(完整版)数据结构实验报告全集_1_第1页
(完整版)数据结构实验报告全集_1_第2页
(完整版)数据结构实验报告全集_1_第3页
(完整版)数据结构实验报告全集_1_第4页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(完整版)数据结构实验报告全集数据结构实验报告全集实验一线性表基本操作和简单程序1实验目的(1)掌握使用visual c+ 6.0上机调试程序的基本方法;(2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。2实验要求(1)认真阅读和掌握和本实验相关的教材内容。(2)认真阅读和掌握本章相关内容的程序。(3)上机运行程序。(4)保存和打印出程序的运行结果,并结合程序进行分析。(5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果实验代码:1)头文件模块#include iostream.h/头文件#include/库

2、头文件-动态分配内存空间typedef int elemtype;/定义数据域的类型typedef struct linknode/定义结点类型elemtype data;/定义数据域struct linknode *next;/定义结点指针nodetype;2)创建单链表 nodetype *create()/建立单链表,由用户输入各结点data域之值,/以0表示输入结束 elemtype d;/定义数据元素dnodetype *h=null,*s,*t;/定义结点指针int i=1;coutwhile(1)cout cin d;if(d=0) break;/以0表示输入结束if(i=1)/

3、建立第一个结点h=(nodetype*)malloc(sizeof(nodetype);/表示指针hh-data=d;h-next=null;t=h;/h是头指针else/建立其余结点s=(nodetype*) malloc(sizeof(nodetype);s-data=d;s-next=null;t-next=s;t=s;/t始终指向生成的单链表的最后一个节点 i+;return h;3)输出单链表中的元素void disp(nodetype*h)/输出由h指向的单链表的所有data域之值nodetype *p=h;coutif(p=null)coutwhile(p!=null)coutd

4、atanext;cout4)计算单链表的长度int len(nodetype *h)/返回单链表的长度int i=0;nodetype *p=h; while(p!=null) p=p-next;i+;return i;5)寻找第i个节点nodetype *find(nodetype *h,int i)/返回第i个节点的指针nodetype *p=h;int j=1;if(ilen(h)|ireturn null;/i上溢或下溢celsewhile (p!=null&jj+;p=p-next;return p; 6)单链表的插入操作 nodetype *ins(nodetype *h,int

5、i,elemtype x)/在单链表head中第i个节点/(i=0)之后插入一个data域为x的节点nodetype *p,*s;s=(nodetype*)malloc(sizeof(nodetype);/创建节点ss-data=x;s-next=null;if(i=0)/i=0:s作为该单链表的第一个节点s-next=h;h=s;elsep=find(h,i);/查找第i个节点,并由p指向该节点if(p!=null)s-next=p-next;p-next=s;return h;7)单链表的删除操作 nodetype *del(nodetype *h,int i)/删除第i个节点 nodet

6、ype *p=h, *s;int j=1;if(i=1)/删除第1个节点h=h-next;free(p);elsep=find(h,i-1);/查找第i-1个节点,并由p指向该节点 if(p!=null&p-next!=null)s=p-next;/s指向要删除的节点p-next=s-next;free(s);else coutreturn h;8)释放节点空间 void dispose(nodetype *h)/释放单链表的所有节点占用的空间 nodetype *pa=h,*pb;if(pa!=null)pb=pa-next;if(pb=null)/只有一个节点的情况free(pa);els

7、ewhile (pb!=null)/有两个及以上节点的情况free(pa);pa=pb;pb=pb-next;free(pa);9)主程序模块:#includeslink.h/包含头文件slinkvoid main() nodetype *head;/定义节点指针变量 head=create();/创建一个单链表disp(head);/输出单链表coutins(head, 2,0);/在第二个节点之后插入以0为元素的节点 disp(head);/输出新链表del(head,2);/删除第二个节点disp(head);/输出新链表5实验结果建立一个单链表:输入第1结点data域值:1输入第2结点

8、data域值:2输入第3结点data域值:3输入第4结点data域值:4输入第5结点data域值:5输入第6结点data域值:6输入第7结点data域值:7输入第8结点data域值:8输入第9结点data域值:9输入第10结点data域值0:输出一个单链表: 1 2 3 4 5 6 7 8 9 单链表长度:9输出一个单链表:1 02345678 9输出一个单链表:1 2 3 4 5 6 7 8实验二顺序栈的实现1.实验目的掌握顺序栈的基本操作:初始化栈、判栈空否、入栈、出栈、取栈顶数据元素等运算以及程序实现方法。2.实验要求(1)认真阅读和掌握和本实验相关的教材内容。(2)分析问题的要求,编写

9、和调试完成程序。(3)保存和打印出程序的运行结果,并分析程序的运行结果。3.实验内容利用栈的基本操作实现一个判断算术表达式中包含圆括号、方括号是否正确配对的程序。具体完成如下:(1)定义栈的顺序存取结构。(2)分别定义顺序栈的基本操作(初始化栈、判栈空否、入栈、出栈等)。(3)定义一个函数用来判断算术表达式中包含圆括号、方括号是否正确配对。其中,括号配对共有四种情况:左右括号配对次序不正确;右括号多于左括号;左括号多于右括号;左右括号匹配正确。(4)设计一个测试主函数进行测试。(5)对程序的运行结果进行分析。实验代码: #include #define maxsize 100typedef s

10、tructint datamaxsize;int top;sqstack;void initstack(sqstack *st) /初始化栈st-top=-1;int stackempty(sqstack *st) /判断栈为空return (st-top=-1);void push(sqstack *st,int x) /元素进栈if(st-top=maxsize-1)printf(栈上溢出!n);elsest-top+;st-datast-top=x;void pop(sqstack *st) /退栈if(st-top=-1)printf(栈下溢出n);elsest-top-;int gettop(sqstack *st) /获得栈顶元素if(st-top=-1)printf(栈空n);return 0;elsereturn st-datast-top; void display(sqstack *st) /打印栈里元素 int i;printf(栈中元素:);for(i=st-top;i=0;-i)printf(%d ,st-datai);printf(n);int main() /测试sqstack l;sqstack *st=&l;initstack(st);prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论