数据结构之 顺序栈、共享栈、链栈
生活随笔
收集整理的這篇文章主要介紹了
数据结构之 顺序栈、共享栈、链栈
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
順序棧、共享棧、鏈棧
- 一、思維導(dǎo)圖:
- 二、棧的定義:
- 三、棧的特點:
- 四、棧的基本操作:
- 五、常考題型:
- 六、順序棧:
- 1.思維導(dǎo)圖:
- 2.順序棧基本操作的實現(xiàn):
- 1.定義棧:
- 2. 初始化棧:InitStack(&s)
- 3.銷毀棧:DestoryStack(&S)
- 4.進棧:Push(&s,x)
- 5.出棧:Pop(&s,&x)
- 6.讀棧頂元素:GetTop(s,&x)
- 7.判空棧:StackEmpty(S)
- 七、共享棧:
- 1.共享棧的定義
- 2.順序棧基本操作的實現(xiàn):
- 1.定義棧:
- 1.初始化棧:InitStack(&s)
- 2.銷毀棧:DestoryStack(&L)
- 3.進棧:Push(&s,x)
- 4.出棧:Pop(&s,&x)
- 5.讀棧頂元素:GetTop(s,&x)
- 八、鏈棧:
- 1.思維導(dǎo)圖:
- 2.鏈棧基本操作的實現(xiàn):
- 1.定義鏈棧:
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 九、棧的數(shù)學性質(zhì)
一、思維導(dǎo)圖:
**ps:**棧和線性表非常類似,學習過程中可以對比進行學習。
二、棧的定義:
特殊的線性表。僅在標尾進行插入或刪除操作的線性表棧頂 = 表尾棧底 = 表頭空棧 = 空表三、棧的特點:
LIFO(last in first out)四、棧的基本操作:
初始化棧:InitStack(&s)銷毀棧:DestoryStack(&L)進棧:Push(&s,x)出棧:Pop(&s,&x)讀棧頂元素:GetTop(s,&x)判空棧:StackEmpty(S)五、常考題型:
結(jié)論:n個不同元素進棧,出棧元素不同排列的個數(shù)為
六、順序棧:
1.思維導(dǎo)圖:
2.順序棧基本操作的實現(xiàn):
1.定義棧:
#define MaxSize 100typedef struct{int data[MaxSize]; //靜態(tài)數(shù)組存放棧中元素 int top; //棧頂指針 }SqStack;2. 初始化棧:InitStack(&s)
**ps:**初始化不同,判空、進棧、出棧判斷條件都會不同。當S.top = 0時,小伙伴們自己思考一下
void InitStack(SqStack &S){S.top = -1; }3.銷毀棧:DestoryStack(&S)
bool DestoryStack(SqStack &S) {S.top = NULL;return true; }4.進棧:Push(&s,x)
bool Push(SqStack &S,int x){if(S.top == MaxSize-1)return false;//S.data[++S.top] = x;S.top = S.top + 1;S.data[S.top] = x;return true;}5.出棧:Pop(&s,&x)
bool Pop(SqStack &S,int &x){if(S.top == -1)return false;//x = S.data[S.top--];x = S.data[S.top];S.top = S.top - 1;return true; }6.讀棧頂元素:GetTop(s,&x)
bool GetTop(SqStack &S,int &x){if(S.top == -1)return false;x = S.data[S.top];return true; }7.判空棧:StackEmpty(S)
bool StackEmpty(SqStack S){if(S.top == -1)return true;elsereturn false; }七、共享棧:
1.共享棧的定義
倆個棧共享同一片空間2.順序棧基本操作的實現(xiàn):
1.定義棧:
#define MaxSize 100typedef struct{int data[MaxSize]; //靜態(tài)數(shù)組存放棧中元素 int top0; int top1; }SqStack;1.初始化棧:InitStack(&s)
void InitStack(SqStack &S){S.top0 = -1;S.top1 = MaxSize;}2.銷毀棧:DestoryStack(&L)
bool DestoryStack(SqStack &S) {S.top0 = NULL;S.top1 = NULL;return true; }3.進棧:Push(&s,x)
//只演示其中一個棧 bool Push(SqStack &S,int x){if(S.top0 + 1 == top1)return false;//S.data[++S.top] = x;S.top = S.top + 1;S.data[S.top] = x;return true;}4.出棧:Pop(&s,&x)
//只演示其中一個棧 bool Pop(SqStack &S,int &x){if(S.top0 == -1)return false;//x = S.data[S.top--];x = S.data[S.top];S.top = S.top - 1;return true; }5.讀棧頂元素:GetTop(s,&x)
bool GetTop(SqStack &S,int &x){if(S.top0 == -1)return false;x = S.data[S.top0];return true; }八、鏈棧:
1.思維導(dǎo)圖:
2.鏈棧基本操作的實現(xiàn):
1.定義鏈棧:
typedef struct Linknode{int data;struct Linknode *next; } *LiStack;2.
3.
4.
5.
6.
7.
九、棧的數(shù)學性質(zhì)
n個不同元素進棧,出棧元素不同排列的個數(shù)為:1/(n+1)Cn2n
總結(jié)
以上是生活随笔為你收集整理的数据结构之 顺序栈、共享栈、链栈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2015年10月5日 正式启用该博客
- 下一篇: 事件与事件处理程序