写一个单链表的基本操作,在写find之前都能运行。但是写到值查找之后,再给主函数加上输出函数的时候,无论怎样都运行不出主函数里的输出函数,find函数也到不了,即使把函数调用了也不能进入find函数体里面。
麻烦贴一下代码,方便调试
find函数最后一个for语句最后应该是i++,你写成了j++。由于i值没有变,且i<=j成立,所以成死循环了
#include<stdio.h>
#define MAXSIZE 20 //MAXSIZE为线性表中的最大元素个数
typedef struct list //建表
{
int elem[MAXSIZE];
int last; //线性表中最后一个元素在数组elem中的下标值
}Seqlist;
void creat(Seqlist *p) //线性表数据的输入
{
int i=0,n,f; //n为用户输入数据的个数,f是中间存储变量
printf("请输入数据的个数:");
scanf("%d",&n);
p->last=n-1;
while(i<n)
{
printf("请输入第%d个数字:",i+1);
scanf("%d",&f);
p->elem[i]=f;
i++;
}
}
void printf1(Seqlist *p) //输出线性表数据
{
int i;
for(i=0;i<=p->last;i++)
{
printf("%d ",p->elem[i]);
printf("last=%d\n",i);
}
}
void find(Seqlist *p) //按值查找,在线性表L中查找值为e的值
{
int i=0,j=0;
int e;
int Find[MAXSIZE]; //Find[MAXSIZE]记录查找值e的位置(下标值+1)
printf("请输入要查找的数值:");
scanf("%d",&e);
printf("您所查找的值%d在线性表中的位置为:/n",e);
while(i<=p->last)
{
if(e=p->elem[i])
{
Find[j]=i+1;
j++;
}
i++;
}
if(j!=0)
{
for(i=0;i<=j;i++)
{
printf("last=%d\n",Find[i]);
}
}
else
printf("您所查找的数值e不在此线性表中!/n");
}
void main()
{
int choose=0;
Seqlist p;
printf(" 以下是对顺序表的操作\n");
printf("-------------------------------------------------------\n");
printf(" 1. 在顺序表插入数据\n");
printf(" 2. 在顺序表中删除数据\n");
printf(" 3. 输出顺序表中的数据\n");
printf(" 4. 查询顺表表中单独的数据\n");
printf("-------------------------------------------------------\n");
printf(" 请选择你的操作:");
scanf("%d",&choose);
switch(choose)
{
case 4:find(&p);
break;
}
}