棧的應用和實現

本文原文連接

棧是線性結構的常見應用,是一種能夠實現"先進後出"的存儲結構,🌰:讓咱們想一下箱子📦,往📦裏面放東西,最早放入📦中的東西被放在底部,後放入的反而在上面,假設咱們從上至下的拿東西,那麼就是先放入的後出,後放入的先出,即這就是一個"先入後出"的存儲結構。node

棧的應用很是的普遍:函數調用、中斷、表達式求值、內存分配、緩存、迷宮都有應用棧的知識。git

棧和隊列實現雖然不一樣,但均可以經過數組和鏈表實現,棧分爲靜態棧和動態棧,靜態棧有數組構成,動態棧有鏈表構成。github

其中的核心操做就是:壓棧和出棧。壓棧就是放入棧中,出棧就是拿出棧中。下面咱們看看棧的基本結構:數組

棧頂Top                       棧底Bottom
    👇                             👇
[data|next]——>[data|next]——>[data=NULL|next]——> NULL
複製代碼

確認一個棧只須要兩個參數,棧頂Top和棧底Bottom,初始建立時,棧頂Top等於棧底Bottom;壓棧時,棧頂Top移動;出棧時,仍是棧頂Top移動。緩存

#C語言棧實現

首先咱們先來作好初始化的準備:bash

// 鏈表元素結構體
typedef struct Node {
    int data;
    struct Node * next;
}Node, *pNode;

// 棧的參數
typedef struct Stack {
    pNode pTop;         // 棧頂
    pNode pBottom;      // 棧底
}Stack, *pStack;

// 初始化
void initStack(pStack s);
// 壓棧
void pushStack(pStack s, int value);
// 遍歷
void traverseStack(pStack s);
// 出棧
bool popStack(pStack s);
複製代碼

以上就是棧的基本操做,下面是函數的實現微信

// 初始化
void initStack(pStack s) {
    s->pTop = (pNode)malloc(sizeof(Node));
    if(s->pTop == NULL) {
        printf("內存分配失敗");
        exit(-1);
    }
    s->pBottom = s->pTop;
    s->pTop->next = NULL;
}
// 壓棧
void pushStack(pStack s, int value){
    pNode pNew = (pNode)malloc(sizeof(Node));
    if(pNew == NULL) {
        printf("內存分配失敗");
        exit(-1);
    }
    s->pTop = pNew;
    pNew->data = value;
    pNew->next = s->pBottom;
}
// 遍歷
void traverseStack(pStack s){
    pNode top = s->pTop;
    while(top->next != NULL){
        peintf("%d\n", top->data);
        top = top->next;
    }
}
// 出棧
bool popStack(pStack s){
    pNode node = s->pTop;
    if(node->next != NULL){
        return false;s
    }
    s->pTop = s->pTop->next;
    free(node);
    retrun false;
}
複製代碼

main函數中建立調用棧:數據結構

int main() {
    // 建立棧
    Stack s;
    
    initStack(&s);
    pushStack(&s, 1);
    pushStack(&s, 2);
    pushStack(&s, 3);
    pushStack(&s, 4);
    traverseStack(&s);
    popStack(&s);
    traverseStack(&s);
    
    return 0;
}
複製代碼

代碼示例:C語言建立棧app

參考:ide

郝斌老師數據結構視頻

ps: 微信公衆號:Yopai,有興趣的能夠關注,每週不按期更新。不斷分享,不斷進步

相關文章
相關標籤/搜索