1. 程式人生 > >一個數組實現兩個棧(共享棧)

一個數組實現兩個棧(共享棧)

用一個數組來實現兩個棧,陣列的頭和尾分別為兩個棧底。入棧的時候將資料分別從陣列的頭尾向中間存放。


當棧頂1在棧頂2右邊的時候說明棧已滿。因為要實現兩個棧,我們可以定義一個變數,來判斷我們對哪一個棧來進行操作。

結構體定義以及函式宣告部分:

#define MAX 10

typedef int DataType;
typedef struct Stack
{
	DataType* _array;
	size_t _top1;
	size_t _top2;//棧頂 
}Stack;
void StackInit(Stack* s);//初始化
int isfull(Stack *s);//判斷棧是否滿
void StackPush(Stack* s, DataType x,int n);//入棧
int isEmpty(Stack*s, int n);//判斷是否為空
void StackPop(Stack* s,int n);//出棧

函式實現:

void StackInit(Stack* s)
{
	s->_array = (DataType*)malloc(sizeof(DataType)*MAX);
	assert(s->_array);
	s->_top1 = 0;
	s->_top2 = MAX - 1;
}
int isfull(Stack *s)
{
	assert(s);
	if (s->_top1 <= s->_top2)
		return 0;
	else
		return 1;
}
void StackPush(Stack* s, DataType x, int n)
{
	assert(s);
	if (isfull(s) == 1)
	{
		printf("stack is full!\n");
		return;
	}
	if (n)
	{
		s->_array[s->_top1] = x;
		s->_top1++;
	}
	else
	{
		s->_array[s->_top2] = x;
		s->_top2--;
	}
}
int isEmpty(Stack*s, int n)
{
	assert(s);
	if (n)
	{
		if (s->_top1 == 0)
			return 1;
		else
			return 0;
	}
	else
	{
		if (s->_top2 == MAX - 1)
			return 1;
		else
			return 0;
	}
}
void StackPop(Stack* s, int n)
{
	assert(s);
	if (isEmpty(s) == 1)
	{
		printf("stack is empty!\n");
		return;
	}
	if (n)
	{
		s->_top1--;
	}
	else
	{
		s->_top2++;
	}
}