建立一个采用链式存储的线性表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现.docx
- 文档编号:26129305
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:18
- 大小:149.58KB
建立一个采用链式存储的线性表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现.docx
《建立一个采用链式存储的线性表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现.docx》由会员分享,可在线阅读,更多相关《建立一个采用链式存储的线性表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现.docx(18页珍藏版)》请在冰豆网上搜索。
建立一个采用链式存储的线性表表中元素为学生每个学生信息包含姓名学号和成绩三部分对该表实现
云南大学物理实验教学中心
实验报告
课程名称:
计算机软件技术基础
实验项目:
线性表(链式存储)及其应用
学生姓名:
学号:
学院系级专业
指导教师:
实验时间:
年时分至时分
实验地点:
实验类型:
教学(演示□验证□综合█设计□)学生科研□课外开放□测试□其它□
一、实验目的:
掌握链式存储结构下线性表的建立及基本操作。
二、问题:
建立一个采用链式存储的线性表,表中元素为学生,每个学生信息包含姓名、学号和成绩三部分,对该表实现:
①输出、②查找、③插入、④删除功能,并计算出平均成绩和总成绩。
三、程序的编写与调试
1、原程序:
#include
#include
usingnamespacestd;
structnode
{intnum;
charname[10];
floatscore;
node*next;
};
classlinked_list
{private:
node*head;
public:
linked_list();
voidprt_linked_list();
voidins_num_linked_list(inti,node*b);
voidins_name_linked_list(charname[],node*b);
intdel_num_linked_list(node);
intdel_name_linked_list(node);
intsear_num_linked_list(int);
voidsear_name_linked_list(node);
voidcount_linked_list();
}
/*建立链表*/
linked_list:
:
linked_list()
{node*p,*q;
p=newnode;q=newnode;
p->num=101;strcpy(p->name,"aaa");p->score=98;
q->num=104;strcpy(q->name,"ddd");q->score=95;
head=p;
p->next=q;
q->next=NULL;
return;
}
/*输出*/
voidlinked_list:
:
prt_linked_list()
{node*p;
p=head;
if(head==NULL){cout<<"空链表!
”< elsedo{cout< p=p->next; } while(p! =NULL); return; } /*按学号插入*/ voidlinked_list: : ins_num_linked_list(inti,node*b) {node*q; if(head==NULL) {b->next=NULL;head=b;return;} if(head->num==i) {b->next=head;head=b;return;} q=head; while((q->next! =NULL)&&(((q->next)->num)! =i)) q=q->next; if(q->next==NULL){cout<<"无此元素"< b->next=q->next;q->next=b; return; } /*按姓名插入*/ voidlinked_list: : ins_name_linked_list(charname[],node*b) {node*q; if(head==NULL) {b->next=NULL;head=b;return;} if(strcmp(head->name,name)==0) {b->next=head;head=breturn;} q=head; while((q->next! =NULL)&&(strcmp((q->next)->name,name)! =0)) q=q->next; if(q->next==NULL){cout<<"无此元素"< b->next=q->next;q->next=b; return; } /*按学号删除*/ intlinked_list: : del_num_linked_list(nodex) {node*p,*q; if(head==NULL){cout<<"空链表! "< if(head->num==x.num) {p=head->next;deletehead;head=p;return1;} q=head; while((q->next! =NULL)&&(((q->next)->num)! =x.num)) q=q->next; if(q->next==0){cout<<"链表中无此元素"< p=q->next;q->next=p->next;deletep; return1; } /*按姓名删除*/ intlinked_list: : del_name_linked_list(nodex) {node*p,*q; if(head==NULL){cout<<"空链表! "< if(strcmp(head->name,x.name)==0) {p=head->next;deletehead;head=p;return;} q=head; while((q->next! =NULL)&&(strcmp((q->next)->name,x.name)! =0)) q=q->next; if(q->next==0){cout<<"链表中无此元素"< p=q->next;q->next=p->next;deletep; return1; } /*按学号查找*/ intlinked_list: : sear_num_linked_list(inti) {node*q; if(head==NULL){cout<<"空链表! "< q=head; while((q->next! =NULL)&&((q->num)! =i)) q=q->next; if((q->num)! =i) {cout<<"无此元素"< cout< } /*按姓名查找*/ voidlinked_list: : sear_name_linked_list(nodex) {node*p; if(head==NULL){cout<<"空链表! "< p=head; while((p->next! =NULL)&&(strcmp(p->name,x.name)! =0)) p=p->next; if(strcmp(p->name,x.name)! =0) {cout<<"无此元素"< cout< } /*计算*/ voidlinked_list: : count_linked_list() {floatsum=0,ave; intn=0; node*p; p=head; if(p==0) cout<<"空链表"< elsewhile(p! =0) {sum=sum+p->score; p=p->nxt; n++; } ave=sum/n; cout<<"总分="< cout<<"平均分="< return; } /*主函数*/ intmain() {intmx; linked_lists1; while (1) {cout<<"1.输出2.插入3.删除4.查找5.计算0.退出"< cout<<"请输入0-5: ";cin>>mx; switch(mx) {case1: s1.prt_linked_list();break; case2: {node*b=newnode; intmx1; cout<<"1.按学号插入2.按姓名插入0.退出"< cout<<"输入0-2: "; cin>>mx1; switch(mx1) {case1: cout<<"请输入要插入位置的学号(在此之前一位插入): "; cin>>i; cout<<"请输入要插入的学号、姓名、成绩: "; cin>>b->num>>b->name>>b->score;s1.ins_num_linked_list(i,b); s1.prt_linked_list();break; case2: charname[10]; cout<<"请输入要插入位置的姓名(在此之前一位插入): "; cin>>name; cout<<"请输入要插入的学号、姓名、成绩: ";cin>>b->num>>b->name>>b->score; s1.ins_name_linked_list(name,b); s1.prt_linked_list();break; case0: cout<<"退出"< } }break; case3: {intmx2;nodex; cout<<"请输入要删除的: 1.按学号删除2.按姓名删除0.退出"< cout<<"输入0-2: "; cin>>mx2; switch(mx2) {case1: cout<<"请输入要删除的学号: "; cin>>x.num; s1.del_num_linked_list(x); s1.prt_linked_list();break; case2: cout<<"请输入删除姓名: "; cin>>x。 name;s1.del_name_linked_list(x); s1.prt_linked_list();break; case0: cout<<"退出"< } }break; case4: {intmx3; cout<<"1.按学号查找2.按姓名查找0.退出"< cout<<"输入0-2: "; cin>>mx3; switch(mx3) {case1: inti; cout<<"请输入要查找的学号: "; cin>>i;s1.sear_num_linked_list(i);break; case2: nodex; cout<<"请输入要查找的姓名: "; cin>>x.name;s1.sear_name_linked_list(x);break; case0: cout<<"退出"< } }break; case5: {s1.count_linked_list();break;} case0: cout<<"程序结束"< } } return0; } 2、正确程序: #include #include usingnamespacestd; structnode {intnum; charname[10]; floatscore; node*next; }; classlinked_list {private: node*head; public: linked_list(); voidprt_linked_list(); voidins_num_linked_list(inti,node*b); voidins_name_linked_list(charname[],node*b); intdel_num_linked_list(node); intdel_name_linked_list(node); intsear_num_linked_list(int); voidsear_name_linked_list(node); voidcount_linked_list(); }; /*建立链表*/ linked_list: : linked_list() {node*p,*q; p=newnode;q=newnode; p->num=101;strcpy(p->name,"aaa");p->score=98; q->num=104;strcpy(q->name,"ddd");q->score=95; head=p; p->next=q; q->next=NULL; return; } /*输出*/ voidlinked_list: : prt_linked_list() {node*p; p=head; if(head==NULL){cout<<"空链表! "< elsedo{cout< p=p->next; } while(p! =NULL); return; } /*按学号插入*/ voidlinked_list: : ins_num_linked_list(inti,node*b) {node*q; if(head==NULL) {b->next=NULL;head=b;return;} if(head->num==i) {b->next=head;head=b;return;} q=head; while((q->next! =NULL)&&(((q->next)->num)! =i)) q=q->next; if(q->next==NULL){cout<<"无此元素"< b->next=q->next;q->next=b; return; } /*按姓名插入*/ voidlinked_list: : ins_name_linked_list(charname[],node*b) {node*q; if(head==NULL) {b->next=NULL;head=b;return;} if(strcmp(head->name,name)==0) {b->next=head;head=b;return;} q=head; while((q->next! =NULL)&&(strcmp((q->next)->name,name)! =0)) q=q->next; if(q->next==NULL){cout<<"无此元素"< b->next=q->next;q->next=b; return; } /*按学号删除*/ intlinked_list: : del_num_linked_list(nodex) {node*p,*q; if(head==NULL){cout<<"空链表! "< if(head->num==x.num) {p=head->next;deletehead;head=p;return1;} q=head; while((q->next! =NULL)&&(((q->next)->num)! =x.num)) q=q->next; if(q->next==0){cout<<"链表中无此元素"< p=q->next;q->next=p->next;deletep; return1; } /*按姓名删除*/ intlinked_list: : del_name_linked_list(nodex) {node*p,*q; if(head==NULL){cout<<"空链表! "< if(strcmp(head->name,x.name)==0) {p=head->next;deletehead;head=p;return1;} q=head; while((q->next! =NULL)&&(strcmp((q->next)->name,x.name)! =0)) q=q->next; if(q->next==0){cout<<"链表中无此元素"< p=q->next;q->next=p->next;deletep; return1; } /*按学号查找*/ intlinked_list: : sear_num_linked_list(inti) {node*q; if(head==NULL){cout<<"空链表! "< q=head; while((q->next! =NULL)&&((q->num)! =i)) q=q->next; if((q->num)! =i) {cout<<"无此元素"< cout< return1;} /*按姓名查找*/ voidlinked_list: : sear_name_linked_list(nodex) {node*p; if(head==NULL){cout<<"空链表! "< p=head; while((p->next! =NULL)&&(strcmp(p->name,x.name)! =0)) p=p->next; if(strcmp(p->name,x.name)! =0) {cout<<"无此元素"< cout< } /*计算*/ voidlinked_list: : count_linked_list() {floatsum=0,ave; intn=0; node*p; p=head; if(p==0) cout<<"空链表"< elsewhile(p! =0) {sum=sum+p->score; p=p->next; n++; } ave=sum/n; cout<<"总分="< cout<<"平均分="< return; } /*主函数*/ intmain() {intmx; linked_lists1; while (1) {cout<<"1.输出2.插入3.删除4.查找5.计算0.退出"< cout<<"请输入0-5: ";cin>>mx; switch(mx) {case1: s1.prt_linked_list();break; case2: {node*b=newnode; intmx1; cout<<"1.按学号插入2.按姓名插入0.退出"< cout<<"输入0-2: "; cin>>mx1; switch(mx1) {case1: inti; cout<<"请输入要插入位置的学号(在此之前一位插入): "; cin>>i; cout<<"请输入要插入的学号、姓名、成绩: "; cin>>b->num>>b->name>>b->score;s1.ins_num_linked_list(i,b); s1.prt_linked_list();break; case2: charname[10]; cout<<"请输入要插入位置的姓名(在此之前一位插入): "; cin>>name; cout<<"请输入要插入的学号、姓名、成绩: ";cin>>b->num>>b->name>>b->score; s1.ins_name_linked_list(name,b); s1.prt_linked_list();break; case0: cout<<"退出"< } }break; case3: {intmx2;nodex; cout<<"请输入要删除的: 1.按学号删除2.按姓名删除0.退出"< cout<<"输入0-2: "; cin>>mx2; switch(mx2) {case1: cout<<"请输入要删除的学号: "; cin>>x.num; s1.del_num_linked_list(x); s1.prt_linked_list();break; case2: cout<<"请输入删除姓名: "; cin>>x.name;s1.del_name_linked_list(x); s1.prt_linked_list();break; case0: cout<<"退出"< } }break; case4: {intmx3; cout<<"1.按学号查找2.按姓名查找0.退出"< cout<<"输入0-2: "; cin>>mx3; switch(mx3) {case1: inti; cout<<"请输入要查找的学号: "; cin>>i;s1.sear_num_linked_list(i)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 建立 一个 采用 链式 存储 线性 表表 元素 学生 每个 信息 包含 姓名 学号 成绩 三部 实现