要求:
以单链表形式创建一个学生表或图书表,并能实现相关的创建、销毁、清空、查找、插入和删除等算法。
需要定义学生表或图书表的结构体
- linklist.h代码:
typedef struct link_node//定义结构体,包含学生学号 语文 数学 英语成绩
{
int number,cgrade,mgrade,egrade;
struct link_node *next;
}node,*linklist;
linklist createlist(int n)//创建单链表
{
node *p,*s;
linklist head=(linklist)malloc(sizeof(node));
p=head;
for(int i=0; i<n; i++)//输入单链表中各元素的值
{
s=(linklist)malloc(sizeof(node));
printf("请输入第%d个学生的学号:\n",i);
scanf("%d",&s->number);
printf("请输入第%d个学生的语文,数学,英语成绩:\n",i);
scanf("%d %d %d",&s->cgrade,&s->mgrade,&s->egrade);
p->next=s;
p=s;
}
p->next=NULL;
head=head->next;
return head;//返回单链表头结点
}
void displaylist(linklist q)//顺序显示单链表全部元素的值
{
unsigned int i=0;
while(q)
{
printf("\n第%d个学生的学号为:\n",i);
printf("%d\n",q->number);
printf("第%d个学生的语文,数学,英语成绩为:\n",i);
printf("%d %d %d\n",q->cgrade,q->mgrade,q->egrade);
q=q->next;
i++; }
printf("\n");
}
void findlist(linklist q,unsigned int num)//查找学生序号为num的学生的学号及成绩
{
unsigned int o=0;
while(o!=num)//查找
{
q=q->next;
o++;
}
printf("\n第%d个学生的学号为:\n",num);
printf("%d\n",q->number);
printf("第%d个学生的语文,数学,英语成绩为:\n",num);
printf("%d %d %d\n",q->cgrade,q->mgrade,q->egrade);
}
void deletelist(linklist q,unsigned int num)//删除序号为num的学生的所有信息
{
unsigned int o=0;
while(o!=num-1)//查找
{
q=q->next;
o++;
}
q->next=q->next->next;//跳过当前结点
}
void replacelist(linklist q,unsigned int num)//更改序号为num的学生的信息
{
unsigned int o=0;
while(o!=num)//查找
{
q=q->next;
o++;
}
printf("\n请重新输入学号:\n");
scanf("%d",&q->number);
printf("请重新输入成绩:\n");
scanf("%d %d %d",&q->cgrade,&q->mgrade,&q->egrade);
}
void insertlist(linklist q,unsigned int num)//在序号为num的位置插入新的学生的信息
{
unsigned int o=0;
while(o!=num-1)//查找
{
q=q->next;
o++;
}
linklist n=(linklist)malloc(sizeof(node));
printf("\n请输入学号:\n");
scanf("%d",&n->number) ;
printf("请输入语文,数学,英语成绩:\n");
scanf("%d %d %d",&n->cgrade,&n->mgrade,&n->egrade);
n->next=q->next;
q->next=n;
}
2 . linklist_main.c代码
#include<stdio.h>
#include<stdlib.h>
#include <malloc.h>
#include "linklist.h"
int main()
{
unsigned int n,m,a;
printf("请输入学生数量\n");
scanf("%d",&n);
linklist v=createlist(n);
while(1)
{
printf("\n请选择功能:\n");
printf("\n1:查找 2:删除 3:更改 4:插入 5:显示\n");
scanf("%d",&a);
switch(a)
{
case 1: printf("请输入学生序号:\n");
scanf("%d",&m);
findlist(v,m);break;
case 2: printf("请输入学生序号:\n");
scanf("%d",&m);
deletelist(v,m);break;
case 3: printf("输入学生序号:\n");
scanf("%d",&m);
replacelist(v,m);break;
case 4: printf("输入插入序号:\n");
scanf("%d",&m);
insertlist(v,m);break;
case 5: displaylist(v);break;
default :printf("请重新选择功能:\n");
}
}
return 1;
}
运行结果: