#include
#include
#include
#include
#include
#include
typedef struct student{char number[20];char name[20];struct student *next;} stu;
stu *input(stu *);
stu *incert(stu *,stu *);
int sizex(stu *);
void list(stu *);
void searchlist(stu *);
void free1(stu *);
stu *freex(stu *);
stu *del_list(stu *);
int main(void)
{
stu *head=null;
printf("学生信息-链表\n");
for(;;){
printf("1=输入/插入 2=元素个数 3=输出 4=查找 5=删除单个 6=删除全部 7=退出:");
switch(getche()){
case '1':
printf("\n");
head=input(head);
break;
case '5':
printf("\n");
head=del_list(head);
break;
case '2':
printf("\n元素个数为:%d\n",sizex(head));
break;
case '3':
printf("\n");
list(head);
break;
case '4':
printf("\n");
searchlist(head);
break;
case '6':
printf("\n");
head=freex(head);
break;
default:
free1(head);
return(0);
break;
}
}
return(0);
}
stu *input(stu *head){
stu *p=(stu *)malloc(sizeof(stu));
if(p==null){printf("错误\n");return(head);}
for(int i=sizex(head)+1;;i++){
printf("输入学生%d学号:",i);
scanf("%s",p->number);
printf("输入学生%d姓名:",i);
scanf("%s",p->name);
printf("0=停止输入 or press any key\n");
p->next=null;
head=incert(head,p);
if(getch()=='0'){
return(head);
}
p=(stu *)malloc(sizeof(stu));
if(p==null)return(head);
}
}
int sizex(stu* head){
if(head==null)return(0);
for(int i=1;head->next!=null;head=head->next)i++;
return(i);
}
void list(stu *head){
if(head!=null){
for(int i=0;head!=null;head=head->next){
i++;
printf("学生%d学号:%s\n",i,head->number);
printf("学生%d姓名:%s\n\n",i,head->name);
}
}
}
void searchlist(stu *head){
char sitem[20];
printf("输入检索内容:");
scanf("%s",sitem);
if(head!=null){
for(;head!=null;head=head->next){
if(stricmp(head->name,sitem)==0 || stricmp(head->number,sitem)==0){
printf("学生学号:%s\n",head->number);
printf("学生姓名:%s\n\n",head->name);
}
}
if(head==null)printf("未找到匹配\n");
}
else printf("表为空\n");
}
void free1(stu *head){
stu *head1=head;
for(int i=sizex(head);i<0;i--){
head1=head;
for(int j=1;jnext;
free(head1);
}
}
stu *freex(stu *head){
char sitem[5]="";
printf("是否删除?(y/n):");
scanf("%s",sitem);
if(strcmp(sitem,"y")==0){
free1(head);
printf("删除成功\n");
return(null);
}
else{
printf("未删除\n");
return(head);
}
}
stu* incert(stu *head,stu *p){
if(p==null)return(head);
if(head==null)return(p);
stu *q=(stu *)malloc(sizeof(stu));
q->next=head;
head=q;
for(q=head;q->next!=null;q=q->next){
if(strcmp(p->number , q->next->number)<0){
break;
}
if(strcmp(p->number , q->next->number)==0){
p->next=q->next->next;
free(q->next);
q->next=p;
q=head->next;
free(head);
return(q);
}
}
p->next=q->next;
q->next=p;
q=head->next;
free(head);
return(q);
}
stu *del_list(stu *head){
char sitem[20];
stu *p=(stu *)malloc(sizeof(stu)),*q;
p->next=head;
head=p;
do{
printf("输入要删除的学号(输入'e'退出):");
scanf("%s",sitem);
if(head!=null){
for(p=head;p->next!=null;p=p->next){
if(stricmp(p->next->number,sitem)==0){
printf("学生学号:%s\n",p->next->number);
printf("学生姓名:%s\n",p->next->name);
goto found1;
break;
}
}
}
printf("未找到匹配\n");
}while(strcmp(sitem,"e")!=0);
printf("未删除\n");
q=head->next;
free(head);
return(q);
found1:
printf("是否删除?(y/n):");
scanf("%s",sitem);
if(strcmp(sitem,"y")==0){
q=p->next->next;
free(p->next);
p->next=q;
printf("删除完成\n");
}
else printf("未删除\n");
q=head->next;
free(head);
return(q);
}
//希望对你有帮助