大佬,我的单链表第三个尾插函数错哪了,程序运行到第三个函数显示空白空白

欠债的脱水橘猫 2020-09-16 11:49:21
1.我的单链表第三个函数在小黑窗显示不出来。
2.编译器提示的那些错误,我找不出来在哪里啊


先放,编译器提示:G:\数据结构与算法课程实习\基础部分框架-2\cc1plus.exe [Warning] command line option '-std=c99' is valid for C/ObjC but not for C++
G:\数据结构与算法课程实习\基础部分框架-2\P2.CPP In function 'void display(Node*)':
148 1 G:\数据结构与算法课程实习\基础部分框架-2\P2.CPP [Error] a function-definition is not allowed here before '{' token
190 1 G:\数据结构与算法课程实习\基础部分框架-2\P2.CPP [Error] expected '}' at end of input



/*#include <iostream.h>
#include <iomanip.h>*/
#include <conio.h>
#include <stdio.h>
#include <process.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

//定义结点类型
struct Node{
int data;
Node *next;
};

Node Head; //头结点
Node *DLList; //头指针

void init(Node *DLList);
void display(Node *DLList);
int insert(Node *DLList);
void search(Node *DLList);
void del(Node *DLList);

int main()
{
char choice;

DLList=&Head; //使头指针指向头结点
Head.next=NULL;

while (1)
{
//system("cls");
printf( "\n\n\n\n");
printf( "\t\t 单链表操作 \n");
printf( "\t\t======================================");
printf( "\n\n");
printf( "\t\t 1:初始化 \n");
printf( "\t\t 2:显示 \n");
printf( "\t\t 3:单个插入 \n");
printf( "\t\t 4:查找 \n");
printf( "\t\t 5:删除 \n");
printf( "\t\t 0:退出 \n");
printf( "\n");
printf( "\t\t请选择:" );

choice = getch();
//system("cls");

switch(choice)
{
case '1':
init(DLList);
break;
case '2':
display(DLList);
break;
case '3':
insert(DLList);
break;
case '4':
search(DLList);
break;
case '5':
del(DLList);
break;
case '0':
exit(0);
}
}
}

//公用的等待函数
void wait()
{
printf( "\n\n请按任意键继续" );
getch();
}

//屏幕提示后,从键盘输入线性表长度和随机数种子,生成以DLList为头指针的指定长度的线性表
void init(Node *DLList)//实现单链表的建立
{
int length;
Node *p,*q;
while (1)
{
printf("输入元素个数(0- 10000 ):" );
scanf("%d",&length);
if (length >= 0 && length <= 10000)
break;
printf("\n");
}

int i;
while (1)
{
printf( "输入随机数种子(0-32767):" );
scanf("%d",&i);
if (i >= 0 && i <= 32767)
break;
printf("\n");
}

//从线性表中删除并释放原有的结点,使其成为空表
p=DLList;
while (p->next!=NULL)
{
q=p->next;
p->next=q->next;
free(q);
}

srand(i); //指定随机数种子,相同的种子将产生相同的数据序列
rand();

//向线性表插入length个新结点
for (int j=1;j<=length;j++)
{
p=new Node;
p->next=DLList->next;
DLList->next=p;
p->data=rand() % 10000;
}
}

//在屏幕上依次显示以DLList为头指针的线性表中的全部元素和元素个数
//格式应便于观察
//如果需要指定输出的宽度,可以使用 cout << setw(W) << X ,其中 X 是输出的数值,W 是占据的列数
void display(Node *DLList)
{
//Node *DLList;
// DLList=head;前面已经定义过了,这里再次定义会发生重定义的错误。
if (DLList==NULL)
{
printf("链表为空!");
while(DLList)
{
printf(" %d",DLList->data);
DLList=DLList->next;
}
printf("\n");
printf("链表输出完毕\n");
}

//屏幕提示后,从键盘输入一个元素值,然后把这个新元素插到以DLList为头指针的线性表的末尾!!
int insert(Node *DLList)
{
Node *temp;
printf("请输入一个需要插入的元素值:");
scanf("%d", &num);
if (NULL == DLList)
{
return FALSE;
}
// 创建新结点并判断创建是否成功
Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));
if (NULL == node)
{
return FALSE;
}

// 给结点成员变量赋值
node->data = num
node->next = NULL;

// 让新结点变为链表的最后一个节点
Node* tmp = DLList;
while(tmp->next)
{
tmp = tmp->next;
}
//找到链表的尾节点并令尾节点指向node
tmp->next = node;

return TRUE;

}

//屏幕提示后,从键盘输入一个元素值,在以DLList为头指针的线性表中搜索这个元素
void search(Node *DLList)
{

}

//屏幕提示后,从键盘输入一个元素值,在以DLList为头指针的线性表中删除这个元素
//屏幕显示删除成功与否的信息
void del(Node *DLList)
{
}

//应用题

/*
6、将链接存储线性表逆置,即最后一个结点变成第1个结点,原来倒数第2个结点变成第2个结点,如此等等。
7、生成有序的两个单链表A和B(链表的数据和个数自定),其首结点指针分别为a和b,要求将两
个单链表合并为一个有序的单链表C,其首结点指针为c,并且合并后的单链表的数据不重复。
8、将一个首结点指针为a的单链表A分解成两个单链表A和B,其首结点指针分别为a和b,使得链表A中含有原链表A中序号为奇数的元素,而链表B中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。

*/
...全文
112 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
void display(Node *DLList)
{
//Node *DLList;
// DLList=head;前面已经定义过了,这里再次定义会发生重定义的错误。
if (DLList==NULL)
{
printf("链表为空!");
} //这里少了个花括号
while(DLList)
{
printf(" %d",DLList->data);

啊,我死了。。。
DLList=DLList->next;
}
printf("\n");
printf("链表输出完毕\n");
}


//屏幕提示后,从键盘输入一个元素值,然后把这个新元素插到以DLList为头指针的线性表的末尾!!
int insert(Node *DLList)
{
Node *temp;
int num; //这里漏了声明num变量
printf("请输入一个需要插入的元素值:");
scanf("%d", &num);
if (NULL == DLList)
{
return FALSE;
}
// 创建新结点并判断创建是否成功
Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));
if (NULL == node)
{
return FALSE;
}

// 给结点成员变量赋值
node->data = num
node->next = NULL;

// 让新结点变为链表的最后一个节点
Node* tmp = DLList;
while(tmp->next)
{
tmp = tmp->next;
}
//找到链表的尾节点并令尾节点指向node
tmp->next = node;

return TRUE;

}

啊。。。。我死了。原来那个提示竟然是上一个函数少了花括号。谢谢大佬
qybao 2020-09-16
  • 打赏
  • 举报
回复
void display(Node *DLList)
{
    //Node *DLList;
   //    DLList=head;前面已经定义过了,这里再次定义会发生重定义的错误。
   if (DLList==NULL)
    {
        printf("链表为空!");
    } //这里少了个花括号
    while(DLList)
    {
        printf(" %d",DLList->data);
        DLList=DLList->next;
    }
    printf("\n");
    printf("链表输出完毕\n");
}
//屏幕提示后,从键盘输入一个元素值,然后把这个新元素插到以DLList为头指针的线性表的末尾!! int insert(Node *DLList) { Node *temp; int num; //这里漏了声明num变量 printf("请输入一个需要插入的元素值:"); scanf("%d", &num); if (NULL == DLList) { return FALSE; } // 创建新结点并判断创建是否成功 Node* node = (Node*) malloc(sizeof(Node) / sizeof(char)); if (NULL == node) { return FALSE; } // 给结点成员变量赋值 node->data = num node->next = NULL; // 让新结点变为链表的最后一个节点 Node* tmp = DLList; while(tmp->next) { tmp = tmp->next; } //找到链表的尾节点并令尾节点指向node tmp->next = node; return TRUE; }

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧