。。。。。。c語言。。。。。
30
.建立一個學生信息鏈表,每個結點包括:學號、姓名、成績。實現鏈表的建立、顯示和查詢。查詢是指輸入一個學號,如果鏈表中存在該學號的的結點,則顯示此結點的數據。 要求
l 在程序中定義了三個函數:
void init(); //初始化鏈表
void create(); //創建學生成績信息鏈表
l void disp(); 數void search(int
number),其中,參數是學生的學號。如果鏈表中存在該學號的的結點,則顯示此結點的數據,否則輸出沒有該學號的結點。
l 定義一個刪除函數void del(int
number),用於刪除指定學號的結點。如果鏈表中存在該學號的的結點,則刪除該結點,否則顯示鏈表中沒有該學號的結點。
最佳回答:
#include <stdio.h>
#include <malloc.h>
#define N 3
typedef struct stu
{
int no;
char name[20];
float score;
}STU;
typedef struct node
{
STU data;
struct node *next;
}NODE;
NODE *head;
void init()
{
head = NULL;
}
void create()
{
int i;
STU s;
NODE *p,*q;
printf("輸入第1個學生信息:");
scanf("%d%s%f",&s.no,s.name,&s.score);
if(head == NULL)
{
head = (NODE*)malloc(sizeof(NODE));
head->data = s;
head->next = NULL;
}
p = head;
for(i=1; i<N; i++)
{
printf("輸入第%d個學生信息:",i+1);
scanf("%d%s%f",&s.no,s.name,&s.score);
q = (NODE*)malloc(sizeof(NODE));
q->data = s;
q->next = NULL;
p->next = q;
p = q;
}
}
void disp()
{
NODE*p = head;
printf("學號\t姓名\t成績\n");
while(p!=NULL)
{
printf("%d\t%s\t%.2f\n",p->data.no,p->data.name,p->data.score);
p = p->next;
}
}
void search(int number)
{
NODE*p=head;
while(p!=NULL)
{
if(p->data.no == number)
{
printf("%d\t%s\t%.2f\n",p->data.no,p->data.name,p->data.score);
break;
}
p = p->next;
}
if(p == NULL)
{
printf("沒有該學號的學生!\n");
}
}
void del(int number)
{
NODE*p,*q,*t;
p=head;
q=head;
while(p!=NULL)
{
if(p->data.no == number)
{
if(p == head)
{
t = head;
head = head->next;
free(t);
break;
}
else
{
t = p;
q->next = p->next;
free(t);
break;
}
}
q = p;
p = p->next;
}
if(p==NULL)
{
printf("沒有該學號的學生!\n");
}
}
void main()
{
int number;
init();
create();
disp();
printf("輸入要查找的學生的學號:");
scanf("%d",&number);
search(number);
printf("輸入要刪除的學生的學號:");
scanf("%d",&number);
del(number);
disp();
}