棧是資料結構中的一種儲存方式,和棧記憶體沒有什麼關係,它可以存在棧記憶體上,也可以存在堆記憶體上,此篇介紹的順序棧棧就是存在棧記憶體上的。
順序棧顧名思義,就是存在記憶體上連續一段位址空間內的棧,和順序表差不多。
棧有乙個要求就是先入後出,後入先出。
結構很簡單:
#define size 10
typedef
int stackdata;
typedef
struct _stack
stack;
這麼用呢,第一步要置空棧,也就相當於給它初始化了:
int initstack (stack
*s)
s->top =
-1;
}
因為是順序棧,是基於陣列來儲存資料的,所以它的空間大小是固定的,所以必要要判斷棧滿、棧空這兩種情況:
//判斷棧空
int stackempty (stack
*s) return s->top ==-1;
}//判斷棧滿
int stackfull (stack
*s) return s->top == (size-
1);}
對棧資料的操作一定要符合先入後出的原則:
入棧或者叫壓棧其實就是在尾部新增資料:
int push (stack
*s, stackdata x)
// 判斷是否滿棧
if (stackfull(s))
s->
data
[++s->top]
= x;
return true;
}
而出棧也就是從尾部將資料取出來丟掉:
//這裡的*x是用來儲存出棧的值
int pop (stack
*s, stackdata *x)
// 判斷是否空棧
if (stackempty(s))
*x = s->
data
[s->top--];
return true;
}
資料結構 棧小結
1陣列棧 2動態陣列棧 動態陣列棧有兩種實現方法,一種是每次擴充1位並進行複製,插入n個元素的時間複雜度位o n 2 1 2 n 一種是每次擴充2倍並進行複製,插入n個元素的時間複雜度為0 n 1 2 4 8.n,此處使用這種最優化的方案。3鍊錶棧 4最小棧的優化版 5棧的逆置 只用push和top...
資料結構 順序棧
編寫乙個程式,實現順序棧 假設棧中元素型別為char 的各種基本運算。並完成下面功能 1 初始化棧s 2 判斷棧s是否非空 3 依次進棧元素a,b,c,d,e 4 判斷棧s是否非空 5 輸出棧長度 6 輸出從棧頂到棧底元素 7 輸出出棧序列 8 判斷棧s是否非空 9 釋放棧。include incl...
資料結構 順序棧
構造乙個順序棧 當輸入9999時,結束入棧操作 輸出棧中元素,顯示棧頂元素,刪除棧頂元素 include include include define stack init size 100 define ok 1 define error 0 typedef int selemtype 順序棧結構...