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

来源:互联网 发布:matlab两个数组相加 编辑:程序博客网 时间:2024/05/16 08:32

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;

}

阅读全文
0 0
原创粉丝点击