线性表的链式存储,可以输入数据,但浏览函数一直没反应。
#include<stdio.h>#include<windows.h>
#include<malloc.h>
#define ElemType student
typedef struct{ //定义结构体
char sno[9];
char name[9];
char sex;
char major[20];
}student;
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode,*Linklist; //定义一个节点 和 一个头指针
int Initlist(Linklist *L)
{
*L=(LNode *)malloc(sizeof(LNode)); //向系统申请一个头节点
if(*L==NULL)
{
printf("分配失败");
return 0;
}
(*L)->next=NULL;
return 1;
}
int traverse_list(Linklist L) //浏览链表
{
LNode *p;
p=L->next;
if(p=NULL)
{
printf("链表为空");
}
else
{
printf("显示所以的学生信息");
while(p!=NULL)
{ printf("学生学号:%s,学生姓名:%s,学生性别:%c,学生专业:%s",p->data.sno,p->data.name,p->data.sex,p->data.major);
p=p->next;
}
}
return 1;
}
int inset_list(Linklist L,int i,ElemType e) //插入函数
{
LNode * p,* s;
int j;
p=L;j=0;
while(p&&(j<i-1))
{
p=p->next;
++j;
}
s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
int delete_list(Linklist L,int i) //删除函数
{
Linklist p=L,q;
int j=0;
while((p->next)&&(j<i-1))
{
p=p->next;
++j;
}
q=p->next;
p->next=q->next;
free(q); //手动释放q
return 1;
}
int menu_select()
{
char c;
do{
system("cls");
printf("\n ***********学生信息管理系统*****************");
printf("\n *** 1、浏览学生信息 ***");
printf("\n *** 2、增加学生信息 ***");
printf("\n *** 3、查找学生信息 ***");
printf("\n *** 4、统计学生信息 ***");
printf("\n *** 5、插入学生信息 ***");
printf("\n *** 6、删除学生信息 ***");
printf("\n *** 0、退出系统 ***");
printf("\n*********************************************\n");
c=getchar();
}while(c<'0'||c>'6');
return(c-'0');
}
void main()
{
int loc;
ElemType e;
LNode * LL;
Initlist(&LL);
while(1)
{switch(menu_select())
{
case 1:
printf("此功能可以实现浏览学生信息\n");
traverse_list(LL);
system("pause");break;
case 2:
printf("此功能可以实现增加学生信息\n");
system("pause");break;
case 3:
printf("此功能可以实现查找学生信息\n");
system("pause");break;
case 4:
printf("此功能可以实现统计学生信息\n");
system("pause");break;
case 5:
printf("此功能可以实现插入学生信息,并且一次可以插入一个元素\n");
printf("请输入要插入元素的位置");
scanf("%d",&loc);
printf("请输入学生信息");
printf("请输入学生学号"); scanf("%s",&e.sno);
printf("请输入学生姓名"); scanf("%s",&e.name);
printf("请输入学生性别"); scanf("%c",&e.sex);
printf("请输入学生专业"); scanf("%s",&e.major);
inset_list(&LL,loc,e); //这里为什么加入&
system("pause");break;
case 6:
printf("此功能可以实现删除学生信息,并且一次只能删除一个元素\n");
printf("请输入要删除元素的位置");
scanf("%d",&loc);
delete_list(&LL,loc); //这里为什么加入&
system("pause");break;
case 0:
printf("谢谢使用本系统/n");
exit(0);
}
}
}
另外delete_list(&LL,loc); 和inset_list(&LL,loc,e); 用不用加& ?