数据结构:基于顺序存储的共享栈

顺序存储的共享栈本质上就是把一个数组两端分别当成一个栈,这两个栈共用一块存储空间。

#include <stdio.h>
#include <stdlib.h>

#define MaxSize 20
#define ElemType int

typedef struct{
	ElemType data[MaxSize];
	int top0; // 0号栈顶指针 
	int top1; // 1号栈顶指针 
} ShareStack;

// 初始化操作 
void StackInit(ShareStack &s)
{
	s.top0 = -1;
	s.top1 = MaxSize;
}

// 入栈,两个入栈操作函数构成重载,用最后是否有一个int参数来判断
// 此种方法可以参考++或--运算符的前缀后缀重载方法 
bool StackPush(ShareStack &s, ElemType e) // 没有int参数,在top0方向入栈 
{
	if(s.top0 +1 == s.top1){ // 栈满 
		return false;
	}
	s.data[++s.top0] = e;
	return true;
}
bool StackPush(ShareStack &s, ElemType e, int)// 有int参数,在top1方向入栈 
{
	if(s.top0 +1 == s.top1){ // 栈满 
		return false;
	}
	s.data[--s.top1] = e;
	return true;
}
// 出栈
bool StackPop(ShareStack &s) 
{
	if(s.top0 == -1){
		return false;
	}
	s.top0 --;
	return true;
}
bool StackPop(ShareStack &s, int) 
{
	if(s.top1 == MaxSize){
		return false;
	}
	s.top1 ++;
	return true;
}
// 判断栈是否为空 
bool StackIsEmpty(ShareStack &s) 
{
	return (s.top0 == -1 && s.top1 == MaxSize) ? true : false;
}

int main() 
{
	ShareStack s;
	StackInit(s);
	for(int i = 0; i < 10; i++){
		StackPush(s, i+1);
	}
	for(int i = 0; i < 10; i++){
		StackPush(s, i+1, 1);
	}
	for(int i = 0; i < 20; i++){
		printf("%d ", s.data[i]);
	} 
	
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章