重庆邮电大学

上传人:z**** 文档编号:103641479 上传时间:2022-06-09 格式:DOC 页数:51 大小:643KB
返回 下载 相关 举报
重庆邮电大学_第1页
第1页 / 共51页
重庆邮电大学_第2页
第2页 / 共51页
重庆邮电大学_第3页
第3页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软件技术基础实验报告实验名称:顺序表的操作班级_学号姓名第9_周 星期 2、5, 6节 成绩一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法, 领会顺序表结构的优点和不足。二、实验内容:1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:(1)建立一个顺序表,首先依次输人整数数据元素 (个数根据需要 键盘给定)。(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再 依次显示删除后的顺序表中的数据元素。(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则 显示位置,若没有找到则显示0。2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包 括学号、姓名、手机号码和固定电话四项 。要求实现菜单、初始 化、添加、删除和显示等功能。三、实验结果: UUsersAdmiinistrati3rDei;lrtcpZWXlAzwxDebLjgzwxexei”麗 功要j ECUsersXAdminisitrBtorW&sktopXZWXlXzwADebugXzwxf 炬幘依次输入学生的学号,姓名,移动电话,家庭电话1.2012212828 zwx 匚3:阵3|0斤11 生七 natorXDeEktopXNWXlSzwxDetMjgzwKE刈2”欢迎来到XXX电话本系统*匸初拔化并建立if(4.显7T;全部 C:Users4d mini stratorDesktopVWXlzwDebu gzwx.exeV3典理在有4个电话号码 偸袂畢号姓名移动电话家庭电话1 -2R12212R2R66545895IIWWW65645654654789787893.3565659565dff87845645641154641234.7845641351jgj8745641324548456415输岀完毕iSil i*3l rflTUB a心斗*丈妞一请输入你需要删除的序号 C:ll sersVAdministratorXDes ktppZWX lzwxDebugiwx-eJie四、实验中遇到的问题及解决方法:第一次编写C+ ,感觉力不从心,回去多看看PPT五、实验心得体会:对顺序表的一些常用语句不熟悉,对顺序表的整体思路理解不深刻以后要加强练习附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能 若为书上实例则可不附。)#i nclude #in elude #i nclude #i nclude #defi ne MAXSIZE 20using n amespace std;int num;typedef structstri ng stude nt_nu mber;stri ng n ame;stri ng tel;stri ng home_ph one;int id; TEL;void shuax in( TEL *);void delet(TEL *); void fin d(TEL *); void show(TEL *); int main(v oid)int choose;TEL ListMAXSIZE;while(1)欢迎来到XXX电话本系统cout vv * v en di;cout 1.初始化并建立endl;cout 2.删除endl;cout 3.查找endl;cout 4.显示全部 endl choose;system(cls);while( choose 4)cout vv 输入错误,数字1-4,请重新输入! vv endl;cin choose;system(cls);switch(choose) case 1: shuax in( List); break;case 2: delet(List); break;case 3: fin d(List); break;case 4: show(List); break;system(cls);return 0; void shuax in( TEL * list)int i,j;for(i = 0; i MAXSIZE; i+)listi.id = i + 1;listi.home_ph one = non e; listi. name = non e;listi.stude nt_nu mber = non e;listi.tel = non e;system(cls);cout 初始化成功,现在开始建表: endl;cout 请输入需要建立的电话个数:(小于 MAXSIZE ) num;while( num MAXSIZE )system(cls);cout 输入错误,请重新输入 num;system(cls);cout 请依次输入学生的学号,姓名,移动电话,家庭电话 endl;for(j = 1; j = nu m; j+)cout j listj - 1.stude nt_nu mber;cin listj - 1. name;cin listj - 1.tel;cin listj - 1.home_ph one;cout en dl;if(num = (j - 1)system(cls);cout 建立表完毕! endl;void delet(TEL * list) en dl; en dl;int j,i = 0;cout j;while( j num)cout j;while(listi.id != j)i+;for(j = i; j num - 1; j+)listj. name = listj + 1. name;Iistj.tel = listj + 1.tel;listj.stude nt_nu mber = listj + 1.stude nt_nu mber;listj.home_ph one = listj + 1.home_ph one;listj.home_ph one = non e;listj. name = non e;listj.stude nt_nu mber = non e;listj.tel = none;num-;system(cls);cout 删除完毕 endl;void fin d(TEL * list)stri ng tel num;int i,key = 0;cout 请输入你需要查找的电话号码 tel num;system(cls);for(i = 0; i MAXSIZE; i+)if(te Inum = listi.tel | tel num = listi.home_ph one)if(key = 0)家庭cout 依次 学号姓名移动电话电话 endl;cout listi.id .;cout setw(12) listi.stude nt_nu mber;cout setw(10) listi .n ame;cout setw(14) listi.tel;cout setw(10) listi.home_ph one;cout en dl;key = 1;if( key = 0)cout 未找到此电话号码 endl;void show(TEL * list)int i;cout 现在有 num 个电话号码 endl;cout 依次学号姓名移动电话家庭电话 en dl;for(i = 0; i num; i+)cout listi.id .;cout setw(12) listi.stude nt_nu mber;cout setw(10) listi. name;cout setw(14) listi.tel;cout setw(10) listi.home_pho ne;cout en dl;cout 输出完毕 endl;软件技术基础实验报告实验名称:链表的操作(一)班级学号姓名第 10 周 星期 2、5, 6 节 成绩一、实验目的:1、 掌握单链表结构的实现方式;2、掌握单链表常用算法的实现。二、实验内容:1、设计一个链表,要求编程实现如下任务:(1) 建立一个链表,首先依次输人整数数据元素(个数根据需要键 盘给定)。(2) 删除指定值的结点(指定值通过键盘输入),再依次显示删除 后的链表中的数据元素。(3) 查找指定值的结点(指定数据由键盘输入),若找到则显示查 找成功,若没有找到则显示查找失败。(4) 在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个 结点)之后插入一个元素为x的节点。三、实验结果:I C:UsersAd mi nistratorDes kopZWX_2zwj(Debugzwx.eKe;请输入5个数,每个书中间空一格:6 9 8 5 71 青输入需要删除的节点買除的节点诟输岀为:111要查找的指定值的结点:2请输入在i节点及元素x3匚显示:6 9 6 5 7Press a.ny key to continue四、实验中遇到的问题及解决方法:编写过程中经常把C语言和C+的语句形式搞混乱,课后认真了 解了 C+后得以解决。五、实验心得体会:对单链表的实现方式和常用算法掌握不足,对C+部分基本概念 不熟悉,需课后补强附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能, 若为书上实例则可不附。)#i nclude#i nclude#i ncludestruct LNodeint data;struct LNode *n ext;;LNode *fin d(LNode *head,i nt x)LNode *p=head-n ext;while(p!=NULL & p-data!=x)p=p-n ext;return p;void In sert(LNode *head,i nt i,i nt x)if(i1)coutvv不存在第vvivv个位置;elseLNode *p=head;int k=0;while(p!=NULL & kn ext;k+;if(p=NULL)coutvvivv超出链表最大可插入位置data=x;s-n ext=p-n ext;p-n ext=s; void Delete(LNode *head,i nt i)if(i1)个元素;coutvv不存在第ielseLNode *p=head;LNode *q;int k=0;while(p!=NULL & kn ext;k+;if(p=NULL)coutvvivv超出链表长度n ext=p-n ext;delete p;void mai n()LNode *head,*p;head=new LNode;head- next=NULL;int i,x,y;coutvv请输入5个数,每个书中间空一格:endl;for(i=1;i x;In sert(head,i,x);i=0;coutvv请输入需要删除的节点(15) : vvendl; cin i;Delete(head,i);coutvv删除的节点vvivv后输出为:n ext;while(p!=NULL)coutYvp-Adatavv;p=p-n ext;cout x;if(fin d(head,x)!=NULL)coutvv查找成功vvendl;elsecoutvv查找失败vvendl;coutvve ndl;i=0;x=0;coutvv请输入在i节点及元素xvvendl;cini x;In sert(head,i,x);cout显示:n ext;while(p!=NULL)coutdatan ext;coute ndl;软件技术基础实验报告实验名称:链表的操作 (二)班级学号姓名第 11 周 星期 2、5, 6节 成绩一、实验目的:1、熟悉利用线性链表解决问题的一般思路 ;2、参照给定的链表的程序样例,验证给出的链表的常见算法, 了解单链表结构的优点和不足。二、实验内容:1、使用链表实现一个电话本的管理程序,电话本中的每条记录包括姓名和电话两项。要求实现菜单管理、记录的添加、删除 和显示等功能。三、实验结果:k-ieIcoimt to this telplhone number system 1insertLdel3. showall4. f ind_name5. f inumber6. reuiseB endloase choose s/ourlplease input a name and number:zwx 654please choose your choose:3there is 1 number *zmenumber1654 please choose yaur choose:1please choose your choose:4ip lease input a name :zwxfind this p&Fson zwx654please choose your choose:5please input a numbr654ind this person:2wx654please choose your choose:please choose your choose;7please 匚hoose your choose:2please input what number do youi want to del:654dele this person1number:zwx654please chOOe your choose四、实验中遇到的问题及解决方法:对查找名字、查找号码等功能掌握不清,问老师和同学后基 本清楚五、实验心得体会:体会到了 C+的神奇与精彩,但是自己还不能实现这种神 奇,达到这种精彩,但是增强了自身兴趣附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能, 若为书上实例则可不附。)#i nclude #i nclude #i nclude #include #defi ne LEN sizeof(TEL)#defi ne SIZE sizeof(Size) int n = 0;typedef struct telchar n ame10;long num;struct tel * n ext;TEL;typedef struct tel_sizechar n ame10;long num;Size;TEL * search(void);/ 从文件读取TEL * insert(TEL *head);/ 插入TEL * del(TEL * head);/ 删除void showall(TEL * head);/ 输出到屏幕void fin d_name(TEL * head);/ 通过名字查找void fin d_number(TEL * head);/ 通过号码查找TEL * revise(TEL * head);void sav(TEL * head);/ 储存int main(v oid)TEL * head = NULL;int choose;prin tf(welcome to this telph one nu mber systemn);head = search();/选择显示界面prin tf(1.i nsertn);prin tf(2.deln);prin tf(3.showalln);prin tf(4.fi nd_n amen);prin tf(5.fi nd_nu mber n);prin tf(6.revisen);prin tf(7.saven);prin tf(8.e ndn);do/选择项prin tf(please choose your choose: n);scan f(%d,&choose);switch(choose)case 1:head = in sert(head);break;case 2:head = del(head);break;case 3:showall(head);break;case 4:fi nd_n ame(head);break;case 5:fi nd_nu mber(head);break;case 6:head = revise(head);break;case 7:sav(head);break;case 8:retur n 0;default:pri ntf(i nput wron g!n); prin tf(n);while(1);return 0;TEL * search(void)/寻找文件是否存在函数 FILE * fp;TEL * head = NULL;TEL * p2,* p1;pl = p2 = (TEL *)malloc(LEN);if( ( fp = fope n(TEL nu mber.txt,a+) ) = NULL)/ 打开或者新建文件 prin tf(ca nt ope n file!n);exit(0);fseek(fp,0L,0);文件指针倒回到开头while(!feof(fp)if( fread(p1,SIZE,1,fp) != 1 )/需要防止读出错误情况 break;if(head = NULL)head = p1;else p2-n ext = p1;p2 = pl;n+;pl = (TEL *)malloc(LEN);free(pl);p2- next = NULL;fclose(fp);retur n head;TEL * insert(TEL * head)/ 插入新号码函数TEL * p0, * p1, * p2;p0 = (TEL *)malloc(LEN);prin tf(please in put a n ame and nu mber:n);sca nf(%s %ld,pO- name,&p0- num);pl = head;p2 = p1;if(head = NULL)head = pO;pO- next = NULL;elsewhile( strcmp(pO- name,p1- name) 0 & p1- next != NULL)/比较字符串,找到应该插入位置p2 = p1;p1 = p1- n ext;if( strcmp(p0-name,p1-name) n ext = pO;pO-n ext = p1;elsep1- n ext = pO;pO- next = NULL;n+;retur n head;TEL * del(TEL * head)/ 删除函数TEL * p1, * p2;pl = head;long dele;输入删除的prin tf(please in put what nu mber do you want to del:n);电话号码sca nf(%ld,&dele);if(head = NULL)prin tf(NULL list!n);空表情况elsewhile(dele != p1- num & p1 != NULL)/找到位置p2 = p1;p1 = p1- n ext;if(dele = p1- num)if(dele = head- num)/ 删除在头部情况head = head-n ext;else p2-next = p1-next;/输出删除的数据并用链表架空 prin tf(dele this pers onnu mber: n);prin tf(%10s %15ld,p1- name,p1- nu m);n-;else prin tf(ca nt find this perso n!n);没找到情况retur n head;void showall(TEL * head)/ 打印函数int i = 0;TEL * p;p = head;if(head = NULL)prin tf(NULL list!n);/空表情况else prin tf(there is%d nu mber:n, n);printf(”n amenu mbern);doi+;prin tf(%d.%10s %15ldn,i,p- name,p- nu m);p = p-n ext;while(p != NULL);void fin d_name(TEL * head)/以名字方式寻找号码TEL * p;int dis = 0;char f_n ame20;p = head;prin tf(please in put a n ame:n);输入名字sca nf(%s,f_ name);if(head = NULL)prin tf(NULL list!n);空表情况elsedo if(strcmp(p- name,f_name) = 0)/ 只要找到同名 均输出dis = 1;prin tf(fi nd this pers on:n ”);prin tf(%s %15ldn,p- name,p- nu m);p = p-n ext;while(p != NULL); if(dis = 0)prin tf(ca nt find this pers on!n ”);void fin d_number(TEL * head)/以号码方式寻找号码TEL * p;long f_num;int dis = 0;/dis作为判定是否找到变量p = head;prin tf(please in put a nu mber n);输入号码sca nf(%ld, &f_num);if(head = NULL)prin tf(NULL list!n);/ 空表情况elsedoif(f_num = p-num)dis = 1;break;else p = p-n ext;while(p != NULL); if(dis = 1)prin tf(fi nd this pers on:n);prin tf(%s %15ldn,p- name,p- nu m);else prin tf(ca nt find this pers on!n ”);TEL * revise(TEL * head)/ 修改函数TEL * p = head;int choose ,nu m,i;prin tf(please choose which do you want to revise,i nput the nu mber n);/fin d_name(TEL * head);sca nf(%d,&nu m);for(i = 2; i n ext;prin tf(1.revise n amen);prin tf(2.revise telepho ne nu mber n);sca nf(” %d,&choose);switch(choose)case 1:prin tf(please in put new n amen);sea nf(%s,p-n ame);break;ease 2:prin tf(please in put new teleph one nu mber n);sea nf(%ld,&p- nu m);break;retur n head;void sav(TEL * head)/ 储存函数FILE * fp;TEL * p;if( ( fp = fope n( TEL nu mber.txt,a+) ) = NULL)/打开或者新建文件prin tf(ea nt ope n file!n);exit(0); p = head;while(p != NULL)if( fwrite(p,SIZE,1,fp) = 1 )p = p-n ext;elseprin tf(save wron g!n); exit(O);fclose(fp);软件技术基础实验报告实验名称:栈的操作班级_学号姓名第 1 2 周 星期 2、5, 6 节 成绩一、实验目的:掌握栈的的定义和运算,了解栈的应用。二、实验内容:1、堆栈的测试和应用。要求:设计一个主函数实现对顺序堆栈代码进行测试。测试方法为:依次把数据元素1,3,5,7,9入栈,然后出栈堆栈中的数据元 素并在屏幕上显示。三、实验结果:* C:UsersAd ministratorDes ktopzwx4Debygzwx4.exec nC:U seirsVtdmiinistratoirDe5lrtopzwx4Debugzwx4.exe7冬u&lcomflf度;、7nC:UsersAdministratoADeslrtopzwx4Debugzwx4.eMe 厶 CAUserXAd mini5trator(Desktopzwx4Debugzwrx4,erenM MU X-M MXJ- XJ UM U U- -U M M MXJ UM M -r U U U J M-M- -U y M1-r -l-T UMM *M- UXJ- XJ M M MS四、实验中遇到的问题及解决方法:问题不是太多,但是编写过程还是比较艰辛。五、实验心得体会:栈在本书中比较重要,要多多理解书本知识,多问老师,多实 践。附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能, 若为书上实例则可不附。)#in elude #i nclude #define MAX SIZE 30 using n amespace std;struct SqStackint *data;int top;int stacksize;int In itStack(SqStack *,i nt);void push(SqStack *,i nt);void del(SqStack *);int main(v oid)int choose,size;int in ,i;SqStack p;cout welcome! en dl;cout 请输入长度: size;while(l ni tStack(&p,size)cout 请输入长度: size;system(cls);while(1) en dl;cout *cout 1.入栈 endl;cout 2.出栈 endl;cout 3.栈内情况 endl;cout 4.清空栈 endl;cout 0.退出 endl;cout 请输入选项 endl;cout VV * choose;while(choose 4)cout 请输入一个0-4的常数 choose;system(cls);switch(choose)case 1: cout 输入一个整数 in;push(&p,i n);break;case 2: del(&p);break;case 3: cout 栈底 endl;for(i = 0; i = p.top; i+)cout p.datai -1)cout p.datap.top 0 & size stacksize = size;s-top = -1;data = new in tsize; return 0;else cout top stacksize - 1)s-top+;s-datas-top = x;else cout 栈满top -1)x = s-datas-top;s-top-;cout 出栈数为: x endl;else cout 栈空 endl;软件技术基础实验报告实验名称:队列的操作班级学号姓名第 13 周 星期 2、5, 6节 成绩一、实验目的:掌握队列的定义及其运算,了解队列的应用。二、实验内容:1、队列测试和应用。要求:设计一个主函数对循环队列代码进行测试。测试方法为:依次把数据元素2,4,6,8,10入队,然后出队中的数据元素并在屏幕上显 示。三、实验结果:欢迎来到鹉*2-出队3.0长度乩退岀*-C:U ie rzAd m i nistra torDes kite pVwx5zwK5Debijgzw)(5.exe至来队醤岀 奚岀星欷2.3.0.aBtK-dJdAaibfrLdJtiAaDbucJja彎! Vj/ritorDesJdtopzvx5zvvx5Debigzwx5圧曲f p y工C:UsersAd mi nist rtciA DesktopjWM5zwx5De t)ugzwx5. exe出队数为5且貝疋號貝理址試員氈員廉址鼠解上童貝朋JiJtM!賛JHKit-lt MXKXKmi宾耳啊J:M XMIOC It KN K M X M J4 JI J欢迎来到X翻请选择;Mj lM PI Mi M fll HI P4W!W fl fll IHi H-WWRM M HiH JI HI Mi MnPI HI KWwM M wMrM.W!WW!M M Hi H. iH Pw R W iBI Hi M iH Mr WW5乩退出 ME Itif KX MW HIM Kit MH Btif KH 睥 MH If欢迎来到黠*i-Ak请选扌睪;8-j u-i u-J -a h-J _u s-r uj : 1 kjJ4hn=M 书甘 M=H=MWWfWW=M JIfPWI JWF M HM PtwW JWWt flFPWW善n-M手If M=HlH.n=wrH.四、实验中遇到的问题及解决方法:队列的方式和栈的方式既有不同也有相同 ,没有分好两者的编 写方式,看书后了解清楚了。五、实验心得体会:队列和栈有些相似,可以在两者之间找相同点,互相总结。附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能 若为书上实例则可不附。)#i nclude #i nclude using n amespace std;struct QNodeint data;struct QNode *n ext;;struct Lin kQueuestruct QNode *fron t;struct QNode *rear;void in it(L in kQueue & Q);int Queuele nth(L in kQueue &Q);void En Queue(L in kQueue &Q,i nt x);void DeQueue(L in kQueue & Q);int main(v oid)Lin kQueue Q;int choose,x,e;in it(Q);while(1)Cout VV * en dl;cout VV 欢迎来到XXX VV endl;cout VV 1.入队VV endl;cout VV 2.出队vv endl;cout VV 3队列长度v endl;cout VV 0.退出v endl;cout 请选择: endl;en dl;Cout vv * choose;while(choose 3 | choose choose;switch(choose)case 1: system(cls);cout 请输入一个数 x;En Queue(Q,x); break;case 2: system(cls);DeQueue(Q);break;case 3: system(cls);x = Queuele nth(Q);cout 队列长度为 x next = NULL;Q.rear = Q.fro nt; int Queuele nth(L in kQueue &Q) QNode * p = Q.fro nt;int len = 0;while(p != Q.rear)len+;p = p-n ext;return len; void En Queue(L in kQueue &Q,i nt x)QNode *q;if(Q.rear- n ext = Q.front)cout 队列已满n ext = NULL;q-data = x;Q.rear- n ext = q;Q.rear = q; void DeQueue(L in kQueue &Q)int e;if(Q.fro nt = Q.rear)cout 队列为空n ext;e = Q.fro nt-data;cout 出队数为 e endl;软件技术基础实验报告实验名称:二叉树的生成和遍历班级_学号姓名第 14 周 星期 2、5, 6节 成绩一、实验目的:1、熟悉二叉树节点的定义和生成方式;2、熟悉二叉树链式结构的生成方式;3、掌握二叉树遍历算法的实现。二、实验内容:1.设计实现二叉树的建立及遍历算法,要求:(1) 编写创建二叉链式存储结构的二叉树程序并输出 。(2) 编写递归实现二叉树的先序、中序、后序遍历算法。(3) 编写主函数测试以上二叉树的创建和遍历函数 。2假设二叉树采用链式存储结构进行存储,编写程序实现二叉树 的所有叶子结点的统计并输出统计个数。三、实验结果:1 nC:U seAdmjnistrato.DesktDpWXxDebug.Sxe幘输入二灭树的各节点,卫表示虚节点,井表示结束:123P789#_ QUsr5AdminirtratoiA1DesktopZWXDebug5r5Bexe PC:U sersAd mini stratoDes ktopZWXDetiug5r5-eKewS&JEJmIm2?3A四、实验中遇到的问题及解决方法:对二叉树的查找顺序经常搞错,多看书理解后逐渐错误率降低。五、实验心得体会:二叉树的遍历在本书算一个难点,调试过程中经常出错,要对着课 本一句句的编写,前方依旧很艰难附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能, 若为书上实例则可不附。)#i nclude#i nclude#i nclude#i nclude#defi ne maxsize 200typedef char datatype;typedef struct no de
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!