各位大佬想问一下,我这个元素不存在的时候为什么没办法正常运行
//4.屏幕提示后,在以DLList1为头指针的线性表中搜索这个元素key,并给出相应的位置或不存在void search(Node *DLList1,int key)
{
Node *p;
int i=0;
int flag=1;
p=DLList;
while(p)
{
p=p->next;
i++;
if(p->data == key)
{
flag=0;
break;
}
}
if(flag)
{
printf("元素不存在!");
wait();
return;
}
else{
printf("元素所在位置为:%d",i);
wait();
}
}
贴一下完整代码看看,感觉是死循环了 孟婆汤 发表于 2020-9-17 19:27
贴一下完整代码看看,感觉是死循环了
好的
#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);
void insert(Node *DLList1,int,int);
void search(Node *DLList1,int);
void del(Node *DLList1,int);
int main()
{
char choice;
int wz,key;
key=0;
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':
//位置wz,需插入的数key
break;
case '4':
//请输入需要查找的数key
//调用实现函数
break;
case '5':
//请输入需要删除的数
//调用实现函数
break;
case '0':
exit(0);
}
}
return 0;
}
//公用的等待函数
void wait()
{
printf("\n\n请按任意键继续\n");
getch();
}
void init(Node *DLList)
{
int length;
Node *p,*q;
while (1)
{
printf("输入元素个数(0- 10000 ):\n");
scanf("%d",&length);
if (length >= 0 && length <= 10000)
break;
printf("\n");
}
int i;
while (1)
{
printf("输入随机数种子(0-32767):\n");
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;
}
}
void display(Node *DLList)
{
Node *p;
int count=0;
p=DLList;
p=p->next; //头结点未初始化,值自动为0,需要跳过头结点
while(p)
{
printf("%d ",p->data);
p=p->next;
count++;
}
printf("\n");
printf("元素个数:%d",count);
wait();
}
//4.屏幕提示后,在以DLList1为头指针的线性表中搜索这个元素key,并给出相应的位置或不存在
void search(Node *DLList1,int key)
{
Node *p;
int i=0;
int flag=1;
p=DLList;
while(p&&)
{
p=p->next;
i++;
if(p->data == key)
{
flag=0;
break;
}
}
if(flag)
{
printf("元素不存在!");
wait();
return;
}
else{
printf("元素所在位置为:%d",i);
wait();
}
} #include <conio.h>
#include <stdio.h>
#include <process.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
typedef struct Node {
int data;
Node *next;
}Node;
Node Head; //头结点
Node *DLList; //头指针
void init(Node *DLList);
void display(Node *DLList);
void insert(Node *DLList1, int, int);
void search(Node *DLList1, int);
void del(Node *DLList1, int);
int main()
{
char choice;
int wz, key;
key = 0;
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 = getchar();
system("cls");
switch (choice)
{
case '1':
//调用实现函数
init(DLList);
break;
case '2':
//调用实现函数
display(DLList);
break;
case '3':
//位置wz,需插入的数key
break;
case '4':
//请输入需要查找的数key
{
int c = 0;
printf("请插入需要查找的数字: ");
scanf_s("%d", &c);
search(DLList, c);
break;
}
//调用实现函数
break;
case '5':
//请输入需要删除的数
//调用实现函数
break;
case '0':
exit(0);
}
}
return 0;
}
//公用的等待函数
void wait()
{
printf("\n\n请按任意键继续\n");
getchar();
getchar();
}
void init(Node *DLList)
{
int length;
Node *p, *q;
while (1)
{
printf("输入元素个数(0- 10000 ):\n");
scanf_s("%d", &length);
if (length >= 0 && length <= 10000)
break;
printf("\n");
}
int i;
while (1)
{
printf("输入随机数种子(0-32767):\n");
scanf_s("%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;
}
}
void display(Node *DLList)
{
Node *p;
int count = 0;
p = DLList;
p = p->next; //头结点未初始化,值自动为0,需要跳过头结点
while (p)
{
printf("%d ", p->data);
p = p->next;
count++;
}
printf("\n");
printf("元素个数:%d", count);
wait();
}
//4.屏幕提示后,在以DLList1为头指针的线性表中搜索这个元素key,并给出相应的位置或不存在
void search(Node *DLList1, int key)
{
Node *p;
int i = 0;
int flag = 1;
p = DLList;
while (p != NULL)
{
p = p->next;
i++;
if (p != NULL && p->data == key)
{
flag = 0;
break;
}
}
if (flag)
{
printf("元素不存在!");
wait();
return;
}
else {
printf("元素所在位置为:%d", i);
wait();
}
} vs2017 调试通过 孟婆汤 发表于 2020-9-17 19:54
vs2017 调试通过
对,调试可以通过,但是输一个链表里不存在的,无法正常运行出结果 Christopher. 发表于 2020-9-17 20:09
对,调试可以通过,但是输一个链表里不存在的,无法正常运行出结果
你把search那个函数的while循环条件改为 while(p->next) 就可以了
喝多了,不便回复,你们聊 sunrise085 发表于 2020-9-17 22:07
你把search那个函数的while循环条件改为 while(p->next) 就可以了
对的,我后来改出来了 Christopher. 发表于 2020-9-17 23:52
对的,我后来改出来了
没问题啊,我调试的就是不存在的一个值
页:
[1]