文档介绍:蒀实验二栈和队列蒅1、实验目的:肄熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现;莂熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的基本操作在队列的顺序存储结构和链式存储结构上的实现。衿芆2、实验要求:肅复习课本中有关栈和队列的知识;蒁用C语言完成算法和程序设计并上机调试通过;莈撰写实验报告,给出算法思路或流程图和具体实现(源程序)、算法分析结果(包括时间复杂度、空间复杂度以及算法优化设想)、输入数据及程序运行结果(必要时给出多种可能的输入数据和运行结果)。羆膇3、实验内容袃螈[实验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);螈 pr