数据结构上机实验.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构上机实验报告 PAGE 4 数据结构上机实验 姓名: 学号: 院系: 指导教师: 数据结构上机实验报告 实验一 线性表 实验目的 熟悉线性表的顺序和链式存储结构 掌握线性表的基本运算 能够利用线性表的基本运算完成线性表应用的运算 二、实验内容 设有一个线性表E={e1, e2, … , en-1, en},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ en , en-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。 已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。 三、代码 1、(1)顺序表逆置 void invert(sequenlist*L) { int iLen=L-last-1; datatype str; for (int i=0;iiLen/2;i++) { str=L-data[i]; L-data[i]=L-data[iLen-i]; L-data[iLen-i]=str; } } (2)单链表逆置 void invert(linklist*head) { linklist *p,*q,*l; q=head-next; p=q-next; while (p!=NULL) { l=p-next; p-next=q; q=p; p=l; } head-next-next=NULL; head-next=q; } 2、 void resolve(linklist *head,linklist *letter,linklist *digit,linklist *other) { linklist *l,*p; l=head-next; char str; while (l) { p=l; str=p-data; l=l-next; if ((str=astr=z)||(str=Astr=Z)) { insert(letter,p); } else if (str=0str=9) { insert(digit,p); } else{ insert(other,p); } } } 四、运行结果 1、(1) (2) 2、 实验二 栈和队列 实验目的 熟悉栈和队列的顺序和链式存储结构 掌握栈和队列的基本运算 能够利用栈和队列的基本运算完成栈和队列应用的运算 实验内容 1、设单链表中存放有n个字符,试编写算法,判断该字符串是否有中心对称的关系,例如xyzzyx是中心对称的字符串。(提示:将单链表中的一半字符先依次进栈,然后依次出栈与单链表中的另一半字符进行比较。)(文件夹:习题3) 2、假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen 分别指示循环队列中队尾元素的位置和内含元素的个数。编写实现该循环队列的入队和出队操作的算法。提示:队空的条件:sq-quelen==0;队满的条件:sq-quelen==m。(文件夹:习题4) 三、代码 1. int symmetry(linklist *head,stack *s) { linklist *r=head; int iLen=length(r); int i=0; while(i++iLen/2) { r=r-next; push(s,r-data); } char str; while(i++iLen) { r=r-next; str=pop(s); if(str!=r-data) return 0; } return 1; } 2. //入队 void enqueue(qu *sq,datatype x) { if(sq-quelen=m) { sq-quelen++; sq-rear=(sq-rear+1)%m; sq-sequ[sq-rear]=x; cout入队成功!\n; } else { cout队列已满,请先进行出队操作\n; } } //出队 int* dequeue(qu *sq) { if(sq-quelen=0) { cout队列为空,请先进行入队操作\n; return NULL; } else { // sq-rear=(sq-rear-1+m)%m; sq-quelen--; cout出队

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档