轉至:http://www.nowamagic.net/librarys/veda/detail/2271
既然棧是線性表的特例,那麼棧的順序存儲其實也是線性表順序存儲的簡化,我們將其簡稱爲順序棧。下標爲0的一端作爲棧底比較好,因爲首元素都存在棧底,變化最小,所以讓它作棧底。
我們定義一個top變量來指示棧頂元素在數組中的位置,這top就如同中學物理學過的遊標卡尺的遊標,如上圖所示,它可以來回移動,意味着棧頂的top可以變大變小,但無論如何遊標不能超出尺的長度。同理,若存儲棧的長度爲StackSize,則棧頂位置top必須小於StackSize。當棧存在一個元素時,top等於0,因此通常把空棧的判定條件定爲top等於-1。
下面看看棧的結構體定義:
#include "stdio.h"
/* 存儲空間初始分配量 */
#define MAXSIZE 20
/* SElemType類型根據實際情況而定,這裏假設爲int */
typedef int SElemType;
/* 順序棧結構 */
typedef struct
{
SElemType data[MAXSIZE];
int top; /* 用於棧頂指針 */
}SqStack;
若現在有一個棧,StackSize是5,則棧普通情況、空棧和棧滿的情況示意圖可以從下圖清楚看出。