数据结构实验答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

重庆文理学院软件工程学院实验报告册专业:_____软件工程___班级:_____软件工程2班___学号:_____201258014054___姓名:_____周贵宇___________课程名称:___数据结构_指导教师:_____胡章平__________2013年06月25日实验序号1实验名称实验一线性表基本操作实验地点S-C1303实验日期2013年04月22日实验内容1.编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。2.编程实现把顺序表中从i个元素开始的k个元素删除(数据类型为整型)。3.编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an)变成(an,…..a2,a1)。(单链表的数据域数据类型为一结构体,包括学生的部分信息:学号,姓名,年龄)实验过程及步骤1.#includestdio.h#includestdlib.h#includemalloc.h#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineElemTypeint#defineMAXSIZE100/*此处的宏定义常量表示线性表可能达到的最大长度*/typedefstruct{ElemTypeelem[MAXSIZE];/*线性表占用的数组空间*/intlast;/*记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表置为-1*/}SeqList;#includecommon.h#includeseqlist.hvoidpx(SeqList*A,intj);voidmain(){SeqList*l;intp,q,r;inti;l=(SeqList*)malloc(sizeof(SeqList));printf(请输入线性表的长度:);scanf(%d,&r);l-last=r-1;printf(请输入线性表的各元素值:\n);for(i=0;i=l-last;i++){scanf(%d,&l-elem[i]);}px(l,i);printf(请输入要插入的值:\n);scanf(%d,&l-elem[i]);i++;px(l,i);l-last++;for(i=0;i=l-last;i++){printf(%d,l-elem[i]);}printf(\n);}voidpx(SeqList*A,intj){inti,temp,k;for(i=0;ij;i++){for(k=0;kj-1;k++){if(A-elem[i]A-elem[k]){temp=A-elem[i];A-elem[i]=A-elem[k];A-elem[k]=temp;}}}}2.#includestdio.h#includestdlib.h#includemalloc.h#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineElemTypeint#defineMAXSIZE100/*此处的宏定义常量表示线性表可能达到的最大长度*/typedefstruct{ElemTypeelem[MAXSIZE];/*线性表占用的数组空间*/intlast;/*记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表置为-1*/}SeqList;#includecommon.h#includeseqlist.hvoidpx(SeqList*A,intj);intDelList(SeqList*L,inti,SeqList*e,intj)/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1*/{intk,a,b,c;if((i1)||(iL-last+2)){printf(删除位置不合法!);return(ERROR);}if(jL-last-i){printf(删除位置不合法!);return(ERROR);}for(b=0,a=i-1;ai+j-1;b++,a++){e-elem[b]=L-elem[a];}e-last=b;/*将删除的元素存放到e所指向的变量中*/for(k=i;k+j-1=L-last;k++){L-elem[k-1]=L-elem[k+j-1];}/*将后面的元素依次前移*/L-last=L-last-j;printf(删除的元素值为:);for(c=0;cb;c++){printf(%d,e-elem[c]);}printf(\n);return(OK);}voidmain(){SeqList*l,*q;intp,r;inti,j,m;l=(SeqList*)malloc(sizeof(SeqList));q=(SeqList*)malloc(sizeof(SeqList));printf(请输入线性表的长度:);scanf(%d,&r);l-last=r-1;printf(请输入线性表的各元素值:\n);for(i=0;i=l-last;i++){scanf(%d,&l-elem[i]);}px(l,i);for(i=0;i=r-1;i++){printf(%d,l-elem[i]);}printf(\n);printf(请输入要删除的元素位置(位置+个数):\n);scanf(%d%d,&p,&j);m=DelList(l,p,q,j);if(m==0){printf(无法删除);exit(0);}elseif(m==1){printf(线性表内余下元素为:\n);for(i=0;i=r-j-1;i++){printf(%d,l-elem[i]);}printf(\n);}}voidpx(SeqList*A,intj){inti,temp,k;for(i=0;ij;i++){for(k=0;kj-1;k++){if(A-elem[i]A-elem[k]){temp=A-elem[i];A-elem[i]=A-elem[k];A-elem[k]=temp;}}}printf(排序完成!);}3.#includestdio.h#includestdlib.h#includestring.h/*#defineElemTypechar*/typedefstructNode/*结点类型定义*/{intnum;charname[10];intage;structNode*next;}Node,*LinkList;/*LinkList为结构指针类型*/LinkListCreateFromTail()/*通过键盘输入表中元素值,利用尾插法建单链表,并返回该单链表头指针L*/{LinkListL;Node*r,*s;inta;charb[10];intc;intflag=1;/*设置一个标志,初值为1,当输入-1时,flag为0,建表结束*/L=(Node*)malloc(sizeof(Node));L-next=NULL;/*为头结点分配存储空间,建立空的单链表L*/r=L;/*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*//*循环输入表中元素值,将建立新结点s插入表尾*/printf(输入学生的信息:\n);printf(学号姓名年龄\n);while(flag){scanf(%d,&a);if(a==-1)flag=0;else{scanf(%s%d,b,&c);s=(Node*)malloc(sizeof(Node));s-num=a;strcpy(s-name,b);s-age=c;r-next=s;r=s;}}r-next=NULL;returnL;}voidReverseList(LinkListL){Node*p,*q;p=L-next;L-next=NULL;while(p!=NULL){q=p-next;/*q指针保留p-next得值*/p-next=L-next;L-next=p;/*将p结点头插入到单链表L中*/p=q;/*p指向下一个要插入的结点*/}}voidmain(){LinkListl;Node*p;printf(请输入链表数据,以-1结束!\n);l=CreateFromTail();printf(输入的单链表为:\n);p=l-next;while(p!=NULL){printf(%d%s%d\n,p-num,p-name,p-age);p=p-next;}ReverseList(l);printf(逆置后的单链表为:\n);p=l-next;while(p!=NULL){printf(%d%s%d\n,p-num,p-name,p-age);p=p-next;}}实验结果及分析1.实验结果:实验分析:我做了三次实验,分别插入数列前,中,后的数字,实验证明代码没有错误,能正常运行、排序、输出。存在的问题:我不明白为什么我写的是降序排序,计算机运行后就是升序排序了。希望老师能帮我修改一下。2.实验结果实验分析:我通过三次实验(正常删除、删除个数超出、删除位置不正确)证明代码的正确性。改代码可实现派讯,删除,读取删除的内容和输出的功能。4.实验结果实验分析:我做了两次测试,测试证明代码没有错误。教师评阅教师签名:年月日实验序号2实验名称实验二栈和队列基本操作实验地点S-C1303实验日期2013年05月13日实验内容1.利用栈的运算实现数制转换—--分别将十进制转换为八进制和十六进制。2.编程判断一个字符序列是否是回文序列。输入形式为“*****#*****”,*为输入的字符,#为两序列的分隔符。3.实现链队列管理---输入一个整数,如果是奇数就入队,如果是偶数就让队头出队,直到输入0就结束,最后输出队列的所有元素。实验过程及步骤(代码)1.#includestdio.h#includemalloc.h#includewindows.h#defineNULL0typedefstructNumber{intnum;structNumber*next;}Num;voidConversion(intiNum,inti);//转换数字,进栈,iNum为待转换的数,i代表进制voidPop(structNumber*top,inti);//显示结果,出栈,top为栈顶指针,i代表进制voidmain(){intm=8,n=2,j=16;intiNum;charchoose,c;printf(数制转换\n\n);printf(请输入一个十进制数:);scanf(%d,&iNum);printf(转换后结果为:\n);printf(\n八进制:);Conversion(iNum,m);printf(十六进制:);Conversion(iNum,j);printf(\n转换完毕!\n);}voidConversion(intiNum,inti)//进栈{structNumber*top=NULL,*NewP;while(iNum!=0){NewP=(structNumber*)malloc(sizeof(structNumber));if(top==NULL){NewP-next=NULL;top=NewP;top-num=iNum%i;}else{NewP-next=top;top=NewP;top-num=iNum%i;}iNum=iNum/i;}//whilePop(top,i);printf(\n);}voidPop(structNumber*top,inti)//出栈{if(top==NULL)printf(栈空!\n);else{charcell[]=0123456789ABCDEF;structNumber*temp,*q;switch(i){case8://输出八进制case16://输出十六进制{tem

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功