有10个学生,每个学生的数据包括学号、姓名和1门课成绩,编写如下函数: (1) 根据学生的信息建立链表; (2) 输出链表; (3) 输入一个学生的学号,查找链表中是否有该学生; (4) 在第i

欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题。

1、         有10个学生,每个学生的数据包括学号、姓名和1门课成绩,编写如下函数:

(1)    根据学生的信息建立链表;

(2)    输出链表;

(3)    输入一个学生的学号,查找链表中是否有该学生;

(4)    在第i个学生前插入一个学生信息;

(5)    删除链表中第i个学生。

#include<stdio.h>

#include<stdlib.h> 

#define N 10

typedef struct Student{

int num;

char name[20];

float score;

}S;

typedef struct Node{

S date;

struct Node *next;

}Node,*LinkList;

LinkList createlist(int n){

int i;

LinkList head,pre,p;

head=pre=(LinkList)malloc(sizeof(Node));

for(i=0;i<n;i++){

p=(LinkList)malloc(sizeof(Node));

scanf("%d%s%f",&(p->date.num),p->date.name,&(p->date.score));

pre->next=p;

pre=p;

}

pre->next=NULL; 

return head; 

}//输入 

void output(LinkList head){

LinkList p;

p=head->next;

while(p!=NULL){

printf("%5d%10s%5.1f\n",p->date.num,p->date.name,p->date.score);

p=p->next;

}

printf("\n");

}//输出 

void search(LinkList head,int n){

LinkList p;

p=head->next;

while(p!=NULL)

if(p->date.num==n)

break;

else

p=p->next;

if(p==NULL)

printf("表中无学号为%d的学生。\n",n);

else

{

printf("满足条件的同学的信息如下:\n");

printf("%8d%10s%.1f",p->date.num,p->date.name,p->date.score);

}

printf("\n");

}//查找 

LinkList insert_node(LinkList head,int i,S st){

int j;

LinkList p,s;

p=head; j=0;

while(p!=NULL&&j<i){

j++; p=p->next;

}

if(!p||j>i){

printf("传递的参数非法\n");

return NULL;

}

s=(LinkList)malloc(sizeof(Node));

s->date=st;

s->next=p->next;

p->next=s;

return 0;

} //插入 

LinkList delete_node(LinkList head,int i){

int j;

LinkList p,q;

p=head; j=1;

while(p->next!=NULL&&j<i){

j++; p=p->next;

}

if(!p->next||j>i){

printf("传递的数据非法\n");

return NULL;

}

q=p->next; p->next=q->next;

free(q);

return head;

}//删除 

int main(){

int i,n,a,b;

S stu;

LinkList head;

printf("输入学生个数:\n");

scanf("%d",&n);

  head=createlist(n);

  output(head);

    printf("输入一个学生的学号:\n");

  scanf("%d",&a);

  search(head,a);

  printf("插入一个学生;\n");

  scanf("%d%s%f",&stu.num,stu.name,&stu.score);

  printf("输入插入位置:\n");

  scanf("%d",&i);

  insert_node(head,i,stu);

  printf("删除第%d个学生;\n",i);

  delete_node(head,i);

  output(head);

return 0;

}

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值