有10個學生,每個學生的數據包括學號、姓名和1門課成績,編寫如下函數: (1) 根據學生的信息建立鏈表; (2) 輸出鏈表; (3) 輸入一個學生的學號,查找鏈表中是否有該學生; (4) 在第i

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;

}

發佈了75 篇原創文章 · 獲贊 128 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章