定義
●只允許在一端插入和刪除的線性表;
●允許插入和刪除的一端稱為棧頂(top),另一端稱為棧底(bottom)。
特點後進先出 (lifo)
adt stack
棧的應用舉例
棧在表示式計算過程中的應用 :建立運算元棧和運算子棧。運算子有優先順序。規則:
自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。
當遇到運算子時,如果它的優先順序比運算子棧棧頂元素的優先順序高就進棧。反之,取出棧頂運算子和運算元棧棧頂的連續兩個運算元進行運算,並將結果存入運算元棧,然後繼續比較該運算子與棧頂運算子的優先順序。
左括號一律進運算子棧,右括號一律不進運算子棧,取出運算子棧頂運算子和運算元棧頂的兩個運算元進行運算,並將結果壓入運算元棧,直到取出左括號為止。
棧的鏈結表示—鏈式棧
1.鏈式棧無棧滿問題,空間可擴充
2.插入與刪除僅在棧頂處執行
3.鏈式棧的棧頂在鏈頭
4.適合於多棧操作
下面是關於棧的一些操作
#include "linkstack.h"
#include
linkstack *create_stack()
// 置空棧
s->top = null;
return s;
}int stackempty (linkstack *s)
return s->top == null;
}int push (linkstack *s, stackdata x)
// 新建結點
node* node = (node*)malloc(sizeof(node)/sizeof(char));
if (node == null)
node->data = x;
node->next = s->top;
s->top = node;
return true;
}int pop (linkstack *s, stackdata *x)
if (stackempty(s))
node *p = s->top;
*x = p->data;
s->top = p->next;
free(p);
return true;
}int gettop (linkstack *s, stackdata *x)
if (stackempty(s))
*x = s->top->data;
return true;
}// 銷毀棧
int destroy(linkstack *s)
int x;
while(stackempty(s) != true)
free(s);
return true;
}
資料結構之棧篇
關於棧 棧對應的操作 實現棧介面的實現 棧介面 author wbkearly param 棧中元素型別 public inte ce stack 基於自己實現的陣列類來實現棧的相關操作 arraystack 這裡的array類是在我之前部落格中所建立的array類,由於array中的操作已經非常的...
C語言資料結構之順序棧
tips 前些天學習了順序表的一系列操作,今天來看看c語言資料結構之順序棧的實現以及關於順序棧的各種操作。棧的特點是先進後出,後進先出,在陣列中可利用乙個指向陣列下標指標top來進行順序棧的相關操作。首先我們定義乙個順序棧的結構體 define maxsize 10 給順序棧定義預設大小 typed...
資料結構篇 棧
本篇開始學習棧,首先棧這種資料結構是一種後進先出的結構,棧限定為只能在一段進行刪除或插入操作。比如我們要插入2 3 1三個數,按照2 3 1 的順序插入叫做入棧,出棧的順序就是1 3 2。現在嘗試寫乙個判斷回文串的程式。這裡講述用棧的思想來判斷回文串,主要思路是取字串的前半截入棧,然後確定要匹配的字...