1 / 30
文档名称:

实验二+栈和队列(基本操作).doc

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

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

分享

预览

实验二+栈和队列(基本操作).doc

上传人:文库旗舰店 2019/10/2 文件大小:51 KB

下载得到文件列表

实验二+栈和队列(基本操作).doc

文档介绍

文档介绍:实验二栈和队列1、实验目的:(1)熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现;(2)熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的基本操作在队列的顺序存储结构和链式存储结构上的实现。2、实验要求:(1)复习课本中有关栈和队列的知识;(2)用C语言完成算法和程序设计并上机调试通过;(3)撰写实验报告,给出算法思路或流程图和具体实现(源程序)、算法分析结果(包括时间复杂度、空间复杂度以及算法优化设想)、输入数据及程序运行结果(必要时给出多种可能的输入数据和运行结果)。3、实验内容[实验1]栈的顺序表示和实现实验内容与要求:编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:(1)初始化顺序栈(2)插入元素(3)删除栈顶元素(4)取栈顶元素(5)遍历顺序栈(6)置空顺序栈分析:栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p->top==MAXNUM-1,栈满时,不能入栈;否则出现空间溢出,引起错误,这种现象称为上溢。出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转移的条件。注意:(1)顺序栈中元素用向量存放(2)栈底位置是固定不变的,可设置在向量两端的任意一个端点(3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置#include<>#include<>typedefintSElemType;typedefintStatus;#defineINIT_SIZE1001#defineSTACKINCREMENT10#defineOk1#defineError0#rue1#defineFalse0typedefstruct{SElemType*base;SElemType*top;intstacksize;}SqStack;//初始化栈StatusInitStack(SqStack*s){s->base=(SElemType*)malloc(INIT_SIZE*sizeof(SElemType));if(!s->base){puts("存储空间分配失败!");returnError;}s->top=s->base;s->stacksize=INIT_SIZE;returnOk;}//清空栈StatusClearStack(SqStack*s){s->top=s->base;returnOk;}//栈是否为空StatusStackEmpty(SqStack*s){if(s->top==s->base)returnTrue;elsereturnFalse;}//销毁栈StatusDestroy(SqStack*s)free(s->base);s->base=NULL;s->top=NULL;s->stacksize=0;returnOk;}//获得栈顶元素StatusGetTop(SqStack*s,SElemType&e){if(s->top==s->base)returnError;e=*(s->top-1);returnOk;}//压栈StatusPush(SqStack*s,SElemTypee){if(s->top-s->base>=s->stacksize){s->base=(SElemType*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(SElemType));if(!s->base){puts("存储空间分配失败!");returnError;}s->top=s->base+s->stacksize;s->stacksize+=STACKINCREMENT;}*s->top++=e;returnOk;}//弹栈StatusPop(SqStack*s,SElemType*e){if(s->top==s->base)returnError;--s->top;*e=*(s->top);returnOk;}//遍历栈StatusStackTraverse(SqStack*s,Status(*visit)(SElemType)){SElemType*b=s->base;SElemType*t=s->top;while(t>b)visit(*b++);printf("\n");returnOk;}Statusvisit(SElemTypec){printf("%d",c);returnOk;}intmain(){SqStacka;SqStack*s=&a;SElemTyp