數據結構:基於順序存儲的共享棧

順序存儲的共享棧本質上就是把一個數組兩端分別當成一個棧,這兩個棧共用一塊存儲空間。

#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;
}

 

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