链表的功能及程序运行的结果(运行的结果的截图都是按顺序截图的,即截图都是相连的):
功能:(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
运行的结果:

(3) 根据姓名进行查找,返回此学生的学号和成绩;
运行结果:

(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
运行结果:

(5) 给定一个学生信息,插入到表中指定的位置;
运行结果:

(6) 删除指定位置的学生记录;
运行结果;

(7) 统计表中学生个数。
 
三、全部代码 单链表:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> typedef struct { char no[10]; //8位学号 char name[20]; //姓名 int price; //成绩 }Student;
typedef struct LNode { Student data; struct LNode *next; }LNode,*Linklist;
Linklist creatlist()//(头插入法)输入学生信息。 { Linklist L,p; int i,n; L=(Linklist)malloc(sizeof(LNode)); L->next=NULL; printf("请输入要录入学生的个数:"); scanf("%d",&n); for(i=0;i<n;i++) { p=(Linklist)malloc(sizeof(LNode)); printf("请输入学生的信息:\n"); printf("姓名:"); scanf("%s",&p->data.name); printf("学号:"); scanf("%s",&p->data.no); printf("成绩:"); scanf("%d",&p->data.price); p->next=L->next; L->next=p; } return L; }
void putlist(Linklist L)//打印学生信息。 { Linklist p; p=L->next; while(p) { printf("姓名:%s\n学号:%s\n成绩:%d\n",p->data.name,p->data.no,p->data.price); p=p->next; printf(" "); }printf("\n"); }
int lengthlist(Linklist L)//求学生的总数。 { Linklist p; int j; p=L->next; j=0; while(p!=NULL) { j++; p=p->next; } printf("表中的学生总数为:%d\n",j); } void namegetlist(Linklist L)//根据学生姓名查找学生的信息。 { char name[10]; int j=1; Linklist p; printf("请输入查找学生的姓名:"); scanf("%s",&name); p=L->next; while(p&&strcmp(p->data.name,name)!=0) { p=p->next; j++; } if(p) printf("该学生的信息:\n学号:%s\n成绩:%d\n",p->data.no,p->data.price); else printf("该表中没有该学生的信息。"); } void getlist(Linklist L)//根据学生结点位置查找学生信息。 { int i,j=1,l=0; Linklist p; printf("请输入查找学生的位置结点:"); scanf("%d",&i); p=L->next; while(p!=NULL) { l++; p=p->next; } p=L->next; while((p->next)&&(j<i)) { p=p->next; ++j; } while(i>l) { printf("输入的结点值超过学生总数 ,请重新输入学生的位置结点:"); scanf("%d",&i); } while((p!=NULL)&&(j<i)) { p=p->next; j++; } printf("查找学生信息:\n姓名:%s\n学号:%s\n成绩:%d\n",p->data.name,p->data.no,p->data.price); }
void insertlist(Linklist L)//学生信息插入。 { int i,j,l; Linklist p,s; p=L;l=0; while(p!=NULL) { l++; p=p->next; } printf("请输入插入学生的结点位置:"); scanf("%d",&i); while(l<i) { printf("输入的结点值已超过总数,请重新输入插入学生的结点位置:"); scanf("%d",&i); } p=L;j=1; while(p&&(j<i)) { p=p->next; ++j; } s=(Linklist)malloc(sizeof(LNode)); printf("请输入学生的信息:\n"); printf("姓名:"); scanf("%s",&s->data.name); printf("学号:"); scanf("%s",&s->data.no); printf("成绩:"); scanf("%d",&s->data.price); s->next=p->next; p->next=s; printf("学生信息插入成功!"); printf("\n"); } void deletelist(Linklist L)//学生信息的删除。 { int i,j,l=0; Linklist p,q; p=L->next; while(p!=NULL) { l++;p=p->next; } printf("请输入要删除学生的位置结点:"); scanf("%d",&i); while(l<i) { printf("输入的结点值超过总数,请重新输入要删除学生的位置结点:"); scanf("%d",&i); } p=L; j=1; while((p->next)&&(j<i)) { p=p->next; ++j; } q=p->next; p->next=q->next; free(q); printf("删除成功!\n"); }
int main()//主函数 { Linklist L; int k; L=creatlist(); printf("\n"); putlist(L); printf("学生信息输入成功!\n"); printf("学生信息管理系统的操作目录:\n"); printf("__________________________\n"); printf("__________________________\n"); printf("1、根据学生的结点位置查找学生信息;2、求表中学生的总数;3、插入学生的信息;4、删除学生的信息;5、根据学生的姓名查找学生信息。\n"); printf("__________________________\n"); while(1) { printf("请选择操作:"); scanf("%d",&k); switch(k) { case 0:printf("谢谢使用!");exit(0); case 1:getlist(L);break; case 2:lengthlist(L);break; case 3:insertlist(L);putlist(L);break; case 4:deletelist(L);putlist(L);break; case 5:namegetlist(L);break; } } }
顺序表:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #define MAXSIZE 100 typedef struct { char name[10]; //姓名 char no[8]; //8位学号 int price; //成绩 }Student; typedef struct { Student elem[100]; //指向数据元素的基地址 int length; //线性表的当前长度 int listsize;//表长 }Sqlist,*Seqlist;
void initlist( Seqlist L)//建立一个空的顺序线性表 { L->length=0; L->listsize=MAXSIZE; }
void displist(Seqlist L)//打印学生信息 { int i; for( i=1;i<=L->length;i++) { printf("姓名:%s\n",L->elem[i-1].name); printf("学号:%s\n",L->elem[i-1].no); printf("成绩:%d\n",L->elem[i-1].price); } printf("\n"); }
void inputlist(Seqlist L)//学生信息的输入 { int i,n; printf("请输入学生的个数:"); scanf("%d",&n); for(i=0;i<n;i++) { printf("请输入学生的信息:\n"); printf("姓名:"); scanf("%s",&L->elem[i].name); printf("学号:"); scanf("%s",&L->elem[i].no); printf("成绩:"); scanf("%d",&L->elem[i].price); L->length++; } printf("\n"); }
void seeklist(Seqlist L)//根据学生节点位置查找学生信息 { int i; printf("请输入查找学生的结点:"); scanf("%d",&i); while(i<1||i>L->length) { printf("输入超出学生的总数,请重新输入查找学生的节点:"); scanf("%d",&i); } printf("该学生的信息:\n"); printf("姓名:%s\n学号:%s\n成绩:%d\n",L->elem[i-1].name,L->elem[i-1].no,L->elem[i-1].price); }
void nameseeklist(Seqlist L)//根据学生姓名查找学生信息 { int i; char name[20]; printf("请输入查找学生姓名:"); scanf("%s",&name); for(i=0;i<L->length;i++) { if(strcmp(L->elem[i].name,name)==0) { break; } } if(strcmp(L->elem[i].name,name)==0) { printf("该学生的信息:\n"); printf("学号:%s\n成绩:%d\n",L->elem[i].no,L->elem[i].price); } else printf("该表中没有该学生!\n");
}
void deletelist(Seqlist L)//学生信息的删除 { int i; int j; printf("请输入删除学生的节点:"); scanf("%d",&i); while(i<1||i>L->length) { printf("输入超出学生的总数,请重新输入删除学生的节点:"); scanf("%d",&i); } for(j=i;j<=L->length-1;j++) { L->elem[j-1]=L->elem[j]; } L->length--; } void insertlist(Seqlist L)//学生信息的插入 { int i,j,x; printf("请输入要插入学生的节点位置:"); scanf("%d",&i); if(L->length==MAXSIZE) printf("存储已满,无法插入\n"); while(i<1||i>(L->length+1)) { printf("无法插入,请重新输入插入学生的节点位置:"); scanf("%d",&i); } for(j=L->length-1;j>=i-1;j--) { L->elem[j+1]=L->elem[j]; } printf("请输入学生的信息:\n"); printf("姓名:"); scanf("%s",&L->elem[i-1].name); printf("学号:"); scanf("%s",&L->elem[i-1].no); printf("成绩:"); scanf("%d",&L->elem[i-1].price); ++L->length; printf("\n"); }
int lengthlist(Seqlist L)//求表中学生的总数 { return L->length; }
void main()//学生信息管理系统的主函数 { Sqlist L1; Seqlist L=&L1; int k; initlist(L);//建立一个空的顺序线性表 inputlist(L);//输入学生的信息。 printf("\n"); displist(L);//打印学生的信息。 printf("学生信息输入成功!\n"); printf("\n"); printf("学生信息管理系统的操作目录:\n"); printf("__________________________\n"); printf("__________________________\n"); printf("1、根据学生的结点位置查找学生信息;2、根据学生的姓名查找学生信息;3、插入学生的信息;4、删除学生的信息;5、求表中学生的总数。\n"); printf("__________________________\n"); while(1) { printf("请选择操作:"); scanf("%d",&k); switch(k) { case 0:printf("谢谢使用!");exit(0); case 1:seeklist(L);break; case 2:nameseeklist(L);break; case 3:insertlist(L);displist(L);break; case 4:deletelist(L);displist(L);break; case 5:printf("该表中学生总数:%d\n",lengthlist(L));break; } } }
下载地址(包含实验报告):
https://gitee.com/cheng-hanyuan/example_projec/tree/main/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84
若无法下载,私信我,本人一定会发给各位小可爱的!
 |