线性单链表-学生信息管理

问题描述
某班学生的信息存放在一个线性单链表中,但每学期都有学生因故退学。现要求根据退学学生的学号,将其信息从链表中删除。假设学生的数据只保存姓名、学号、性别,并采用结构体类型描述。

输入说明
输入n个学生数据(1<=n<=10)。每行一个学生信息,包括:姓名(不超过20个字符的字符串)、学号(整形)、性别(字符),以空格分隔。学生数据以#结束,并在下一行输入退学学生的学号。

输出说明
若链表中有退学学生,输出删除该学生后的学生数据;如果链表中没有该学生,则输出错误信息No。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct student
{
 char name[20];
 int num;
 char sex;
}stu;

typedef struct node
{
 stu data;
 struct node *next;
}linklist;

linklist *Creat()
{
 linklist *head,*r,*s;
 head=(linklist*)malloc(sizeof(linklist));
 r=head;
 s=(linklist*)malloc(sizeof(linklist));
 scanf("%s",s->data.name);
 while((s->data.name[0])!='#')
 {
  scanf("%d %c",&s->data.num,&s->data.sex);
  r->next=s;
  r=s;
  s=r->next;
  s=(linklist*)malloc(sizeof(linklist));
  scanf("%s",s->data.name);
 }
 r->next=NULL;
 return head;
}                                   //构造单链表

void Print(linklist *head)
{
 linklist *m;
 m=head->next;
 while(m!=NULL)
 {
  printf("%s %d %c\n",m->data.name,m->data.num,m->data.sex);
  m=m->next;
 }
}                                   //打印单链表

void Delete(linklist *head,int x)
{
 linklist *r,*q;
 r=head->next;
 q=head;
 while(r!=NULL&&r->data.num!=x)
 {
  q=r;
  r=r->next;
 }
 if(r!=NULL)
 {
  q->next=r->next;
  free(r);
  Print(head);
 }
 else
  printf("No\n");
}                             //进行删除操作

int main()
{
 linklist *L;
 int n;
 L=Creat();
 scanf("%d",&n);
 Delete(L,n);
 return 0;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值