基于链表的操作

发布时间:2026/5/19 20:54:27

基于链表的操作 #includecstdio #includeiostream #includestring.h #includecstring #includecstdlib #includecmath #includealgorithm using namespace std; typedef struct { char name[20]; //姓名 char nu[16]; //12位学号,为判断输入学号位数是否正确提供多余空间避免溢出 int score; //成绩 }Student; typedef struct LNode { Student data; struct LNode *next; int len; }LNode; typedef struct { LNode *head; }linkList; //初始化单链表 void initialize(linkList *L) { L-head(LNode*)malloc(sizeof(LNode)); L-head-nextNULL; } //输入(尾插法) //a为需要插入的学生人数 void input(linkList *L,int a) { int i; LNode *node; LNode *end; endL-head; for(i1;ia;i) { node(LNode*)malloc(sizeof(LNode)); printf(请输入第%d个学生的姓名,i); scanf(%s,node-data.name); printf(请输入第%d个学生的学号,i); scanf(%s,node-data.nu); printf(请输入第%d个学生的成绩,i); scanf(%d,node-data.score); printf(\n); node-nextNULL; end-nextnode; endnode; } printf(输入完成\n); } //求表的长度 int length(linkList *L) { int len0; LNode *p; pL-head-next; while(p!NULL) { len; pp-next; } printf(表中学生的人数为%d\n,len); return 0; } //返回第i个元素的值 int getbyplace(linkList *L,int a) { int i0; LNode *p; pL-head; do { pp-next; i; } while(ia); printf(第%d个学生的信息为\n,a); printf(姓名%s\n,p-data.name); printf(学号%s\n,p-data.nu); printf(成绩%d\n,p-data.score); return 0; } //根据内容查找 //char b[]为学生名字 void getbyname(linkList *L,char b[]) { LNode *p; pL-head-next; do { if((strcmp(b,p-data.name))0) { printf(该学生的学号为%s\n,p-data.nu); printf(该学生的成绩为%d\n,p-data.score); break; } else { pp-next; } } while(p-next!NULL); if(p-nextNULL) { printf(查无此人\n); } } //插入学生信息 //a为插入位置 void insert(linkList *L,int a) { int i0; LNode *q; q(LNode *)malloc(sizeof(LNode)); printf(请输入要插入的学生信息\n); printf(姓名); scanf(%s,q-data.name); printf(学号); scanf(%s,q-data.nu); printf(成绩); scanf(%d,q-data.score); LNode *p; pL-head; while(ia-1) { pp-next; i; } q-nextp-next; p-nextq; printf(插入完成\n); } //删除学生信息 //a为删除位置 void deletestudent(linkList *L,int a) { int i0; LNode *p; LNode *q; pL-head; while(ia-1) { pp-next; i; } qp-next; p-nextq-next; free(q); printf(删除成功); } //打印所有学生信息 void print(linkList *L) { LNode *p; pL-head-next; while(p!NULL) { printf(姓名%s\n,p-data.name); printf(学号%s\n,p-data.nu); printf(成绩%d\n,p-data.score); pp-next; } } void main() { int a,i; char answer[20],name[20]; //linkList *L; linkList list; linkList *Llist; initialize(L); printf(请输入需要录入的学生人数); scanf(%d,a); input(L,a); do { printf(******************************************************************\n); printf(请选择:打印学生信息:1\n根据指定位置返回相应学生信息:2\n通过姓名查询学生学号和成绩:3\n插入学生信息:4\n删除学生信息:5\n统计表中学生人数:6\n); printf(******************************************************************\n); scanf(%d,a); switch(a) { case 1:print(L);break; case 2: printf(请输入查找的位置); scanf(%d,i); getbyplace(L,i);break; case 3: printf(请输入查找学生的姓名); scanf(%s,name); getbyname(L,name);break; case 4: printf(请输入插入的位置); scanf(%d,i); insert(L,i);break; case 5: printf(请输入删除的位置); scanf(%d,i); deletestudent(L,i);break; case 6: length(L);break; default:printf(error\n); } printf(是否进行下一步操作y or n); scanf(%s,answer); } while(strcmp(answer,y)0); printf(欢迎下次使用再见); }

相关新闻