資料結構:棧的基本概念、順序棧、共享棧以及鏈棧

SXWisON發表於2024-07-21

相關概念

棧(Stack)是隻允許在一端進行插入或刪除操作的線性表。
棧頂(Top):線性表允許插入刪除的那一端。
棧底(Bottom):固定的,不允許進行插入和刪除的另一端。

棧的基本操作

  • InitStack(&S):初始化一個空棧S。
  • StackEmpty(S):判斷一個棧是否為空,若棧S為空則返回true,否則返回false。
  • Push(&S,x):進棧,若棧S未滿,則將x加入使之成為新棧頂。
  • Pop(&S,&x):出棧,若棧S非空,則彈出棧頂元素,並用x返回。
  • GetTop(S,&x):讀棧頂元素,但不出棧,若棧S非空,則用X返回棧頂元素。
  • DestoryStack(&S):銷燬棧,並釋放棧S所佔用的儲存空間。

棧的數學性質:當\(n\)個不同元素進棧時,出棧元素的不同排列的個數為\(C^n_{2n}/(n+1)\)。該公式稱為卡特蘭數(Catalan)公式,可採用數學歸納法證明。

順序棧

#define MaxSize 50
typedef int Elemtype;

typedef struct {
	Elemtype data[MaxSize];
	int top;
} SqStack;


void InitStack(SqStack& S) {
	S.top = -1;
}

bool StackEmpty(SqStack S) {
	if (S.top = -1)
		return true;
	else
		return false;
}

bool Push(SqStack& S, Elemtype x) {
	if (S.top == MaxSize - 1)
		return false;
	S.data[++S.top] = x;
	return true;
}

bool Pop(SqStack& S, Elemtype& x) {
	if (S.top == -1)
		return false;
	x = S.data[S.top--];
	return true;
}

bool GetTop(SqStack& S, Elemtype& x) {
	if (S.top == -1)
		return false;
	x = S.data[S.top];
	return true;
}

相關文章