资源描述:
《数据结构与算法之——两栈共享存储空间.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数据结构与算法之——两栈共享存储空间其实栈的顺序存储很方便,因为它只在表尾进行操作,不存在普通线性表插入与删除还需要移动元素的情况。同样它也有普通线性表的缺陷,即必须确定数量。然而对于两个相同类型的栈,却可以做到最大限度地利用其开辟的存储空间来进行操作。 数组有两个端点,两个栈使用这一个数组的存储区域,两个栈有两个栈底,分别为数组的始端和末端。这样在压栈的时候,是栈顶指针往中间靠拢,当两指针相遇时,则栈满。栈空即top1=-1,top2=n。而栈满则是top1+1==top2;代码实现:SqDoubleStack.h[cpp]viewplai
2、ncopyprint?1./*两栈共享空间--顺序栈结构 */ 2. 3.#define MAXSIZE 5 4.typedef int SElemType; 5.typedef struct 6.{ 7. SElemType data[MAXSIZE]; 8. int top1; //栈1 栈顶指针 9. int top2; //栈2 栈顶指针 10.}SqDoubleStack; 11. 12.#define OK 1 13.#define ERROR 0 14.typedef int Status;
3、 15. 16.Status InitStack(SqDoubleStack *S); //初始化操作,建立一个空栈S 17.Status DestroyStack(SqDoubleStack *S); //栈栈存在,则销毁它 18.Status ClearStack(SqDoubleStack *S); //将栈清空 1.int StackEmpty(SqDoubleStack S,int stackNumber); //若栈为空,返回true,否则返回false 2.Status GetTop(SqDoubleStack S,
4、SElemType *e,int stackNumber); //若栈存在且非空,用e返回S的栈顶元素 3.Status Push(SqDoubleStack *S,SElemType e,int stackNumber); //若栈S存在,将新元素e插入栈S中并成为栈顶元素 4.Status Pop(SqDoubleStack *S,SElemType *e,int stackNumber); //删除栈S中栈顶元素,并用e返回其值 5.int StackLength(SqDoubleStack S,int stackNumber);
5、 //返回栈S的长度 /*两栈共享空间--顺序栈结构*/#defineMAXSIZE5typedefintSElemType;typedefstruct{SElemTypedata[MAXSIZE];inttop1;//栈1栈顶指针inttop2;//栈2栈顶指针}SqDoubleStack;#defineOK1#defineERROR0typedefintStatus;StatusInitStack(SqDoubleStack*S);//初始化操作,建立一个空栈SStatusDestroyStack(SqDoubleStack*S);//栈栈存在,则销
6、毁它StatusClearStack(SqDoubleStack*S);//将栈清空intStackEmpty(SqDoubleStackS,intstackNumber);//若栈为空,返回true,否则返回falseStatusGetTop(SqDoubleStackS,SElemType*e,intstackNumber);//若栈存在且非空,用e返回S的栈顶元素StatusPush(SqDoubleStack*S,SElemTypee,intstackNumber);//若栈S存在,将新元素e插入栈S中并成为栈顶元素StatusPop(SqDoub
7、leStack*S,SElemType*e,intstackNumber);//删除栈S中栈顶元素,并用e返回其值intStackLength(SqDoubleStackS,intstackNumber);//返回栈S的长度SqDoubleStack.c[cpp]viewplaincopyprint?1.#include 2.#include 3.#include 4.#include "SqDoubleStack.h" 5. 6.int main(void) 7.{ 8. Sq
8、DoubleStack S; 9. InitStack(&