c语言删除学生姓名链表,C语言链表学生信息输入

#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);

}

//希望对你有帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值