數據結構之棧
阿新 • • 發佈:2017-05-18
class 個數 urn nbsp bottom height enter isp 頭指針
棧的基本概念
定義:棧(Stack) 是限制僅在表的一端進行插入和刪除操作的線性表。
允許進行插入和刪除的一端稱為棧頂(top)
不允許插入和刪除的一端稱為棧底(bottom)
不含元素的棧稱為空棧。
往棧中存入元素稱為入棧
從棧中刪除元素稱為出棧
特點:後進先出(LIFO)或先進後出(FILO)
順序棧的類型說明:
//順序棧的類型說明: #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; int top; }SqStack;
雙向棧:
//雙向棧//為了充分利用棧的空間,采用多個棧共享同一空間。 //雙向棧用一個大數組表示。 //兩個棧共享一個數組的數據結構定義如下: #define MAX 100 typedef struct { int data[MAX]; int top1,top2; }SStack2;
鏈棧
棧的鏈式存儲結構稱為鏈棧,它是運算受限的單鏈表,其插入和刪除操作僅限制在表頭位置上進行.
由於只能在鏈表頭部進行操作,故鏈表沒有必要像單鏈表那樣附加頭結點。棧頂指針就是鏈表的頭指針。
其類型說明為:
//鏈棧 typedef struct SNode { int data;struct SNode *next; }SNode,*LinkStack; LinkStack *top;
(1) 初始化棧 top=NULL;
(2) 判斷空棧 top==NULL;
(3)取棧頂 top–>data;
(4)入棧:
void push(PSTACK S,int val) { PNODE pNew=(PNODE)malloc(sizeof(NODE)); if(pNew==NULL) { printf("分配失敗程序終止"); exit(-1); } else { pNew->data=val; pNew->pNext=S->pTop; S->pTop=pNew; } }
(5)出棧:
bool pop(PSTACK S,int* val) { if(empty(S)) { return false; } else { PNODE p=S->pTop; *val=p->data; S->pTop=p->pNext; free(p); p=NULL; return true; } }
數據結構之棧