数据结构全部实验报告.docx
《数据结构全部实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构全部实验报告.docx(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构实验报告一实验内容:实验内容:线性表链式存储结构下基本操作的实现学号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 线性表链式存储结构下基本操作的实现(初始化、赋值、取值、插入、删除、等)。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:首先基于线性链表的存储结构建一个单链表(下面的程序实现的是通过头插法逆序建表),在此基础上实现对单链表的赋值、取值、插入、删除以及两个表的归并,需要注意的是插入(删除)过程中指针的修改。三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题
2、及采取的措施:1、注意 scanf 的格式;2、在编写程序过程中注意链表指针的正确修改;四、源程序及注释四、源程序及注释 源程序 程序名:1.cpp1.cpp#include#include#include#definetrue1#definefalse0#defineok1#defineerror0#defineoverflow-2#define initsize100#define increment10#definenull0typedef int status;typedef int elemtype;typedef struct lnodeelemtypedata;struct ln
3、ode*next;lnode,*linklist;void listtraverse(linklist l)/遍历链式表 llinklist p=l-next;while(p!=null)printf(%dn,p-data);p=p-next;void creatlist(linklist&l,int n)/逆位序输入个元素的值,建立带表头节点的单链表 lint i;linklist p;l=(linklist)malloc(sizeof(lnode);l-next=null;for(i=n;i0;-i)p=(linklist)malloc(sizeof(lnode);p-data=i;p-n
4、ext=l-next;l-next=p;/creatliststatus getelem(linklist l,int i,elemtype&e)/取带头节点的单链表 l 中第 i 个元素,用 e 返回int j;linklist p;p=l-next;j=1;while(p&jnext;+j;if(!p|ji)return error;e=p-data;return ok;/getelemstatus listinsert(linklist&l,int i,elemtype e)/在带头节点的单链表 l 中第 i 个位置前插入元素 elinklist p,s;int j=0;p=l-next
5、;while(p&jnext;+j;if(!p|ji-1)return error;s=(linklist)malloc(sizeof(lnode);s-data=e;s-next=p-next;p-next=s;return ok;/listinsertvoid main()linklist l;int i,e,j,f;int n;printf(请输入节点个数:);scanf(%d,&n);creatlist(l,n);printf(建表成功!);listtraverse(l);printf(please input the location i:);scanf(%d,&i);getelem
6、(l,i,e);printf(the i th elem is%dn,e);printf(please input the inserted elems num and the value:);scanf(%d%d,&j,&f);listinsert(l,j,f);listtraverse(l);五、运行结果五、运行结果数据结构实验报告一实验内容:实验内容:约瑟夫环问题学号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 设有 n 个人围坐一圈,现从某个人开始报数,数到 m 的人出列,接着从出列的下一个人开始重新报数,数到 m 的人又出列,如
7、此下去,直到所有人都出列为止。试设计一个程序求出出列顺序。要求利用单向循环链表存储结构模拟此过程,按照出列的顺序打印出各人的编号。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:本程序是在线性链表的基础上实现对循环链表的操作,重点考察循环链表的删除操作;三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题及采取的措施:1、注意删除元素时指针的变化;2、注意要删除元素位置的确定;四、源程序及注释四、源程序及注释 源程序 程序名:2.cpp2.cpp#include#include#include#defineok 1#defineer
8、ror-1#definetruth0typedefintstatus;typedefstructLnodeintdata;structLnode*next;Lnode,*Linklist;voidcreatlist_L(Linklist&L,int n)inti;Lnode*p;L=(Linklist)malloc(sizeof(Lnode);L-next=L;L-data=1;for(i=n;i1;-i)p=(Linklist)malloc(sizeof(Lnode);p-data=i;p-next=L-next;L-next=p;statusprintf_L(LinklistL)Linkl
9、istp=L;inti;int n=8;for(i=1;idata);p=p-next;printf(n);returnok;voidmain()int i,k,n;Lnode*s;Lnode*L;printf(the whole numberis:);scanf(%d,&n);creatlist_L(L,n);printf(thenumberlistis:);printf_L(L);printf(请输入要删除元素的位置:);scanf(%d,&k);s=L;while(s-next!=s)for(i=1;inext;printf(%dn,s-next-data);s-next=s-next-
10、next;s=s-next;printf(%d,s-data);五、运行结果五、运行结果数据结构实验报告二.实验内容:实验内容:栈的基本操作学号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 栈的基本操作的实现(初始化、赋值、取值、插入、删除等),要求分别采用顺序和链式存储结构。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:在栈的顺序存储结构的基础上实现栈的初始化(即建栈),自此基础上实现其相关操作,包括赋值、取栈顶元素、进栈、出栈等,重点考察栈的“先进后出”的特性三、调试和运行程序过程中产生的问题及采取的
11、措施:三、调试和运行程序过程中产生的问题及采取的措施:(略)四、源程序及注释四、源程序及注释 源程序 程序名:3.cpp3.cpp#include#include#include#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW-1#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status;typedef int SElemType;typedef struct/栈的顺序存储结构SElemType*base;SElemT
12、ype*top;int stacksize;SqStack;Status InitStack(SqStack&S)/栈的初始化S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);/由系统分配空间if(!S.base)exit(OVERFLOW);/分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;Status GetTop(SqStack S,SElemType&e)/返回栈顶元素if(S.base=S.top)return ERROR;e=*(S.top-1);re
13、turn OK;Status Push(SqStack&S,SElemType&e)/插入新的值为栈顶元素if(S.top-S.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize=S.stacksize+STACKINCREMENT;*S.top+=e;/*S.top=e;+S.top;return OK;Status Pop(
14、SqStack&S,SElemType e)/删除栈顶元素if(S.top=S.base)return ERROR;e=*-S.top;/-S.top;e=*S.top;return OK;Status StackEmpty(SqStack S)/判断栈是否为空if(S.top=S.base)return TRUE;else return FALSE;Status Traverse(SqStack S)/遍历栈SElemType*p;if(S.top=S.base)return ERROR;for(p=S.base;pS.top;p+)printf(%d,*p);printf(n);int S
15、tackLength(SqStack S)/求栈的长度SElemType*p;int i=0;p=S.top;while(p!=S.base)p-;i+;return(i);int main()SqStack S;SElemType e;int i,n,N;InitStack(S);i=InitStack(S);/判断是否初始化成功if(i)printf(初始化成功!n);printf(输入栈元素个数:);scanf(%d,&n);printf(输入栈元素的值:);for(i=1;i=n;i+)scanf(%d,&e);Push(S,e);Traverse(S);printf(返回栈顶元素:%
16、d,e);GetTop(S,e);printf(n);printf(输入插入元素的值:);scanf(%d,&e);Push(S,e);Traverse(S);printf(删除栈顶元素之后的序列是:n);Pop(S,e);Traverse(S);printf(栈为空?n);if(StackEmpty)printf(No!n);printf(此时栈的长度为:);N=StackLength(S);printf(%dn,N);return 0;五.调试结果数据结构实验报告二实验内容:实验内容:括号匹配学号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题
17、目题目 假设表达式中允许有两种括号:圆括号和方括号,其嵌套的顺序随意,即()或()等为正确格式,()或(均为不正确的格式。读入含圆括号和方括号的符号序列,输出“匹配”或“此串括号匹配不合法”。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:本程序是在实现栈的基本操作的基础上实现其基本应用,即括号匹配问题,重点利用其“先进后出”的特性三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题及采取的措施:(略)四、源程序及注释四、源程序及注释 源程序 程序名:4.cpp4.cpp#include#include#include#define
18、stack_int_size8#definestackincrement10#defineoverflow-2#defineerror 0#defineok1typedef int status;typedef char selemtype;typedef struct selemtype*base;selemtype*top;int stacksize;sqstack;status initstack(sqstack&s)/构造一个空栈 ss.base=(selemtype*)malloc(stack_int_size*sizeof(selemtype);if(!s.base)exit(ov
19、erflow);s.top=s.base;s.stacksize=stack_int_size;return ok;/initstackstatus emptystack(sqstack s)if(s.top=s.base)return ok;else return error;status push(sqstack&s,selemtype e)/插入元素 e 为新的栈顶元素int stacksize;if(s.top-s.base=s.stacksize)s.base=(selemtype*)realloc(s.base,(s.stacksize+stackincrement)*sizeof
20、(selemtype);if(!s.base)exit(overflow);s.top=s.base+s.stacksize;s.stacksize+=stackincrement;*s.top+=e;return ok;/pushstatus pop(sqstack&s,selemtype&e)/若栈不为空,则删除 s 的栈顶元素,用 e 返回其值if(s.top=s.base)return error;e=*-s.top;return ok;/popint kuohao(char m)/若括号匹配则返回 1,否则返回 0;sqstack s;int i=0;char x;initstack
21、(s);while(mi!=#)if(mi=(|mi=)push(s,mi);if(mi=)|mi=)if(emptystack(s)return 0;elsepop(s,x);if(x=(&mi=)|(x=&mi=)return 0;i+;if(emptystack(s)return 1;else return 0;void main()char e7=(,(,(,),#;int p;p=kuohao(e);printf(说明:若括号匹配的话,输出结果为 1,反之则为 0.n);printf(判断结果为:%dn,p);五、运行结果五、运行结果数据结构实验报告三实验内容:实验内容:表达式求值学
22、号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 表达式求值是实现程序设计语言的基本问题之一,也是栈的应用的一个典型的例子,设计一个程序,演示用算符优先法对算术表达式求值的过程。以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用教科书表 3.1 给出的算符优先关系,实现对算术四则混合运算表达式的求值。【测试数据】3*(7-1);1+2+3+4;88-1*5;1024/4*8;(20+2)*(6/2);(6+2*(3+6)。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:在实现括号匹配的基础上,实
23、现算术表达式的求值问题是又一个栈的重要应用三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题及采取的措施:(略)四、源程序及注释四、源程序及注释 源程序 程序名:5.cpp5.cpp#include#include#include#define STACK_INIT_SIZE 100#define status int#define SElemType float#define ERROR 0#define OK 1typedef struct/定义栈存储结构SElemType*base;SElemType*top;int stacksize;SqStack;v
24、oid InitStack(SqStack&S)/初始化顺序栈 S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(-1);S.top=S.base;S.stacksize=STACK_INIT_SIZE;status GetTop(SqStack S,SElemType&e)/取栈顶元素的值if(S.base=S.top)return ERROR;elsee=*(S.top-1);return OK;status Push(SqStack&S,SElemType e)/入栈if(S.top-S
25、.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S.stacksize+10)*sizeof(SElemType);/分配空间if(!S.base)return ERROR;/分配失败S.top=S.base+S.stacksize;else*S.top+=e;return OK;status Pop(SqStack&S,SElemType&e)/出栈if(S.base=S.top)return ERROR;elsee=*(-S.top);return OK;status Empty(SqStack S)/判断栈是否为空的操作 if(S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 全部 实验 报告
限制150内