1 / 22
文档名称:

栈的操作(实验报告).doc

格式:doc   大小:96KB   页数:22页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

栈的操作(实验报告).doc

上传人:762357237 2019/3/8 文件大小:96 KB

下载得到文件列表

栈的操作(实验报告).doc

文档介绍

文档介绍::熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现;熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的基本操作在队列的顺序存储结构和链式存储结构上的实现。实验要求:复****课本中有关栈和队列的知识;用C语言完成算法和程序设计并上机调试通过;撰写实验报告,给出算法思路或流程图和具体实现(源程序)、算法分析结果(包括时间复杂度、空间复杂度以及算法优化设想)、输入数据及程序运行结果(必要时给出多种可能的输入数据和运行结果)。基础实验[实验1]栈的顺序表示和实现实验内容与要求:编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:(1)初始化顺序栈(2)插入元素(3)删除栈顶元素(4)取栈顶元素(5)遍历顺序栈(6)置空顺序栈分析:栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p->top==MAXNUM-1,栈满时,不能入栈;否则出现空间溢出,引起错误,这种现象称为上溢。出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转移的条件。注意:(1)顺序栈中元素用向量存放(2)栈底位置是固定不变的,可设置在向量两端的任意一个端点(3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置参考程序:#include<>#include<>#defineMAXNUM20#defineElemTypeint/*定义顺序栈的存储结构*/typedefstruct{ ElemTypestack[MAXNUM]; inttop;}SqStack;/*初始化顺序栈*/voidInitStack(SqStack*p){ if(!p) printf("Eorror"); p->top=-1;}/*入栈*/voidPush(SqStack*p,ElemTypex){ if(p->top<MAXNUM-1) { p->top=p->top+1; p->stack[p->top]=x; } else printf("Overflow!\n");}/*出栈*/ElemTypePop(SqStack*p){ ElemTypex; if(p->top!=0) { x=p->stack[p->top]; printf("以前的栈顶数据元素%d已经被删除!\n",p->stack[p->top]); p->top=p->top-1; return(x); } else { printf("Underflow!\n"); return(0); }}/*获取栈顶元素*/ElemTypeGetTop(SqStack*p){ ElemTypex; if(p->top!=0) { x=p->stack[p->top]; return(x); } else { printf("Underflow!\n"); return(0); }}/*遍历顺序栈*/voidOutStack(SqStack*p){ inti; printf("\n"); if(p->top<0) printf("这是一个空栈!"); printf("\n"); for(i=p->top;i>=0;i--) printf("第%d个数据元素是:%6d\n",i,p->stack[i]);}/*置空顺序栈*/voidsetEmpty(SqStack*p){p->top=-1;}/*主函数*/main(){SqStack*q; inty,cord;ElemTypea; do{ printf("\n"); printf("第一次使用必须初始化!\n"); printf("\n"); printf("\n主菜单\n"); printf("\n1初始化顺序栈\n"); printf("\n2插入一个元素\n"); printf("\n3删除栈顶元素\n"); printf("\n4取栈顶元素\n"); printf("\n5置空顺序栈\n"); printf("\n6结束程序运行\n"); printf("\n--------------------------------\n"); printf("请输入您的选择(1,2,3,4,5,6)"); scanf("%d",&cord); printf("\n"); switch(cord) { case1: { q=(SqStack*)malloc(sizeof(SqStack)); InitStack(q); OutStack(q); }break; case2: { pri