链表问题---等待答案!

jacklee794 2003-08-22 01:11:34
看看程序,当删除一个后再去查找时或再去删除时出现问题,关键看看search()
#include"iostream.h"
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define NULL 0
struct student
{
long stunumber;
char stuname[6];
char stusex[2];
int stuscor;
struct student *next;
};
struct student *head,*p,*q;
int i,j,flag;
long number;
char name[6];
char w[6]={"a"};
char sex[2];
int scor,n;
void rigist()
{
head=NULL;
q=NULL;
number=201;
flag=0;
// q=(struct student *)malloc(sizeof(struct student));
for(i=0;i<=100;i++)
{
p=(struct student *)malloc(sizeof(struct student));
cout<<"学号:"<<number<<endl;
p->stunumber=number;
cout<<"姓名:";
cin>>name;
if(strcmp(name,w)==0)
break;
strcpy(p->stuname,name);
cout<<"性别:";
cin>>sex;
strcpy(p->stusex,sex);
cout<<"分数:";
cin>>scor;
p->stuscor=scor;
if(head==NULL)
{
head=p;
q=head;
}
else
{
q->next=p;
q=q->next;
}
p->next=NULL;
number=number+1; //完成学号自加
flag++; //记录学生个数
}
n=number-1; //记录学号以便后面检索
}
void print()
{
cout<<"学号 姓名 性别 分数"<<endl;
q=head;
for(i=0;i<flag;i++)
{
if(q!=NULL)
{
cout<<q->stunumber<<" "<<q->stuname<<" "<<q->stusex<<" "<<q->stuscor<<endl;
q=q->next;
}
}
}
void search()
{
if(head==NULL)
{
cout<<"系统没有记录可查!"<<endl;
return;
}
cout<<"请输入你要查找的学号:";
q=head;
j=0;
cin>>number;
if((number>n)||(number<head->stunumber))//完成不在学号内的检索
cout<<"没有你要查的人"<<endl;
else
{
for(i=0;i<=flag;i++)
{

if(number==q->stunumber)
{
j=1; //标志变量,标志找到要找的学生,若为0则没有要找的学生
break;
}
else
{
q=q->next;
}
}
if(j=1)
{
cout<<number<<"已经找到"<<endl;
cout<<j<<"你要查询的学号:"<<q->stunumber <<" 姓名:"<< q->stuname<<" 分数:"<<q->stuscor<<endl ;
}
else
cout<<j<<number<<"不存在"<<endl;
}

}

void sort()
{
}
void insert()
{

}
void del()
{
q=head;
cout<<"请输入你要删掉的学号:";
cin>>number;
if((number<head->stunumber)||(number>n))
cout<<"不存在!"<<endl;


else
{
if(number==head->stunumber)
{
head=q->next;
cout<<q->stunumber<<"的所有信息已经删除"<<endl;
free(q);
}
else
{
for(i=0;i<=flag;i++)
{
if(number!=q->stunumber)
{
p=q;
q=q->next;
}
else
break;
}
cout<<q->stunumber<<"已经删除"<<endl;
p->next=q->next;
q->stunumber=0;
free(q);
flag=flag-1;
}
}
}
void del1()
{
q=head;
cout<<"请输入你要删掉的学号:";
cin>>number;
if((number<head->stunumber)||(number>n))
cout<<"不存在!"<<endl;


else
{
if(number==head->stunumber)
{
head=q->next;
cout<<q->stunumber<<"的所有信息已经删除"<<endl;
free(q);
}
else
{
while(number!=q->stunumber)
{
p=q;
q=q->next;
}
cout<<q->stunumber<<"已经删除"<<endl;
p->next=q->next;
q->stunumber=0;
free(q);
flag=flag-1;
}
}
}
void main()
{
char c;
a:
cout<<"\t\t\t※※※※※※※※※※※※※※※※※※※※※※"<<endl;
cout<<"\t\t\t※ 欢迎使用学生记录管理系统 ※"<<endl;
cout<<"\t\t\t※ 学生情况登记:r ※"<<endl;
cout<<"\t\t\t※ 插入学生情况:i ※"<<endl;
cout<<"\t\t\t※ 打印登记表 :p ※"<<endl;
cout<<"\t\t\t※ 删除表中记录:d ※"<<endl;
cout<<"\t\t\t※ 保存登记文件:s ※"<<endl;
cout<<"\t\t\t※※※※※※※※※※※※※※※※※※※※※※"<<endl;
cout<<"\t\t\t选择你要的操作:";
cin>>c;
// getchar();
switch(c)
{
case 'r':
rigist();
goto a;
case 'p':
print();
goto a;
case 'i':
insert();
goto a;
case 'd':
del();
goto a;
case 's':
search();
goto a;
default:
return ;
}
}
...全文
62 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
98440622 2003-08-22
  • 打赏
  • 举报
回复
下个月去包月,否则什么都干不了
Dragon132 2003-08-22
  • 打赏
  • 举报
回复
已经调好了

#include"iostream.h"
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include <conio.h>
#define NULL 0
struct student
{
long stunumber;
char stuname[6];
char stusex[2];
int stuscor;
struct student *next;
};
struct student *head,*p,*q;
int i,j,flag;
long number;
char name[6];
char w[6]={"a"};
char sex[2];
int scor,n;
void rigist()
{
head=NULL;
q=NULL;
number=201;
flag=0;
// q=(struct student *)malloc(sizeof(struct student));
for(i=0;i<=100;i++)
{
p=(struct student *)malloc(sizeof(struct student));
cout<<"学号:"<<number<<endl;
p->stunumber=number;
cout<<"姓名:";
cin>>name;
if(strcmp(name,w)==0)
break;
strcpy(p->stuname,name);
cout<<"性别:";
cin>>sex;
strcpy(p->stusex,sex);
cout<<"分数:";
cin>>scor;
p->stuscor=scor;
if(head==NULL)
{
head=p;
q=head;
}
else
{
q->next=p;
q=q->next;
}
p->next=NULL;
number=number+1; //完成学号自加
flag++; //记录学生个数
}
n=number-1; //记录学号以便后面检索
}
void print()
{
cout<<"学号 姓名 性别 分数"<<endl;
q=head;
for(i=0;i<flag;i++)
{
if(q!=NULL)
{
cout<<q->stunumber<<" "<<q->stuname<<" "<<q->stusex<<" "<<q->stuscor<<endl;
q=q->next;
}
}
}
void search()
{
if(head==NULL)
{
cout<<"系统没有记录可查!"<<endl;
return;
}
cout<<"请输入你要查找的学号:";
cin>>number;
q=head;
j=0;
if((number>n)||(number<head->stunumber))//完成不在学号内的检索
cout<<"没有你要查的人"<<endl;
else
{
for(i=0;i<flag;i++)
{

if(number==q->stunumber)
{
j=1; //标志变量,标志找到要找的学生,若为0则没有要找的学生
break;
}
else
{
q=q->next;
}
}
if(j==1) //这里应该是==
{
cout<<number<<"已经找到"<<endl;
cout<<j<<"你要查询的学号:"<<q->stunumber <<" 姓名:"<< q->stuname<<" 分数:"<<q->stuscor<<endl ;
}
else
cout<<number<<"不存在"<<endl;
}

}

void sort()
{
}
void insert()
{

}
void del()
{
q=head;
cout<<"请输入你要删掉的学号:";
cin>>number;
if((head==NULL||number<head->stunumber)||(number>n)) //如果没记录就不找了
cout<<"不存在!"<<endl;


else
{
if(number==head->stunumber)
{
head=q->next;
cout<<q->stunumber<<"的所有信息已经删除"<<endl;
free(q);
}
else
{
for(i=0;i<flag;i++)
{
if(number!=q->stunumber)
{
p=q;
q=q->next;
}
else
break;
}
if(i==flag) //判断是否有要找的人
{
cout<<number<<"不存在"<<endl;
}
else
{
cout<<q->stunumber<<"已经删除"<<endl;
p->next=q->next;
q->stunumber=0;
free(q);
flag=flag-1;
}
}
}
}
void del1()
{
q=head;
cout<<"请输入你要删掉的学号:";
cin>>number;
if((number<head->stunumber)||(number>n))
cout<<"不存在!"<<endl;


else
{
if(number==head->stunumber)
{
head=q->next;
cout<<q->stunumber<<"的所有信息已经删除"<<endl;
free(q);
}
else
{
while(number!=q->stunumber)
{
p=q;
q=q->next;
}
cout<<q->stunumber<<"已经删除"<<endl;
p->next=q->next;
q->stunumber=0;
free(q);
flag=flag-1;
}
}
}
void main()
{
char c;
head=NULL;
a: cout<<"\t\t\t※※※※※※※※※※※※※※※※※※※※※※"<<endl;
cout<<"\t\t\t※ 欢迎使用学生记录管理系统 ※"<<endl;
cout<<"\t\t\t※ 学生情况登记:r ※"<<endl;
cout<<"\t\t\t※ 插入学生情况:i ※"<<endl;
cout<<"\t\t\t※ 打印登记表 :p ※"<<endl;
cout<<"\t\t\t※ 删除表中记录:d ※"<<endl;
cout<<"\t\t\t※ 保存登记文件:s ※"<<endl;
cout<<"\t\t\t※※※※※※※※※※※※※※※※※※※※※※"<<endl;
cout<<"\t\t\t选择你要的操作:";
cin>>c;
// getchar();
switch(c)
{
case 'r':
rigist();
goto a;
case 'p':
print();
goto a;
case 'i':
insert();
goto a;
case 'd':
del();
goto a;
case 's':
search();
goto a;
case 'q':
return;
default:
goto a ;
}
}
jacklee794 2003-08-22
  • 打赏
  • 举报
回复
lulu不要打击我了,我可是调试了3个星期了,调不出来就气的上网了---聊天。到了今天你还打击我?
jacklee794 2003-08-22
  • 打赏
  • 举报
回复
up效果是一样的,当删除了再删除一次时还是有问题,当查找删除了的那个时同样的问题
程序中断了
prettynacl 2003-08-22
  • 打赏
  • 举报
回复
需要修改的地方很多,
再看看,多测试一下吧。
Dragon132 2003-08-22
  • 打赏
  • 举报
回复
我改过你的del()了
void del()
{
q=head;
cout<<"请输入你要删掉的学号:";
cin>>number;
if((number<head->stunumber)||(number>n))
cout<<"不存在!"<<endl;


else
{
if(number==head->stunumber)
{
head=q->next;
cout<<q->stunumber<<"的所有信息已经删除"<<endl;
free(q);
}
else
{
for(i=0;i<=flag;i++)
{
if(number!=q->stunumber)
{
p=q;
q=q->next;
}
else
continue;
}
if(i==flag)//看是否到最后一个记录

{
cout<<q->stunumber<<"不存在"<<endl; }
else
{
cout<<q->stunumber<<"已经删除"<<endl;
p->next=q->next;
q->stunumber=0;
free(q);
flag=flag-1;
}
}
}
}
wbh0360 2003-08-22
  • 打赏
  • 举报
回复
太乱了,怎么看

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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