实验3 栈操作 一、 实验的目的要求 1、 了解顺序栈的特性,以及它们在实际问题中的应用
2、 掌握栈表的实现方法,以及它们的基本操作
二、 题目、栈操作 1、设两个顺序栈共享空间,试写出两个栈公用的栈操作算法PuSh(x,k)和 POP(k),其中k 为0 或1,用以指示栈号
编写一个完整的程序实现
2、设一批数据有正有负,试用栈对它们进行调整,使输出时所有负数都在正数之前
编写一个完整的程序实现
三、 算法描述 实现共享栈:线性表(a0,a1,…,an)是一种逻辑结构,若在计算机中对它采用顺序栈存储结构来存储,则就是栈表
两个栈表共享一段内存空间图示如下: 0 maxsize-1 2 4 3 1 Top[0] top[1] 在数据结构中用C 语言来描述,可以利用数组表示顺序表
将两个原表A 和B 存放在一个数组的存储空间(a0,a1,a2,…,amaxsize-1)中,实现方法是:设置两个栈顶指针变量 top[0]和top[1],开始时top[0]=-1 和top[1]=maxsize 表示两个栈均为空,然后根据变量 k 是 0 还是 1,分别进行入栈和出栈操作
调整数据正负:当数据为负时直接输出,若为止则进栈
当输入数据处理完后,栈内都为正数,将其依次出栈输出即可
四、 程序清单 #include #include #include #define maxsize 50 typedef struct //栈的类型定义 { int data[maxsize]; int top[2]; }sqstack; int empty_in(sqstack *S) //输入时判断满栈 { if(S->top[0]+1==S->top[1]) { printf("两个栈均满,不能输入
\n"); return 0;} if((S->top[0]==-1)&&(S->top