1. 程式人生 > >鏈棧的基本操作(入棧和出棧)及C語言實現完全攻略

鏈棧的基本操作(入棧和出棧)及C語言實現完全攻略

鏈棧,即用線性表連結串列結構實現的功能。實現過程中,鏈棧不需要建立頭結點,增加頭結點反而會增加程式的複雜性,因此連結串列中只需要建立一個頭指標就可以了。

鏈棧的實現思想是:用連結串列頭結點的一端作為棧的棧頂端,這樣做的好處是當資料元素壓棧或者彈棧時,直接使用頭指標就可以完成,不需要增設額外的指標。

例如,用鏈棧實現將(’a’,’b’,’c’,’d’)四個資料元素壓棧,再依次彈棧:
#include <stdio.h>
#include <stdlib.h>
//連結串列結點的結構
typedef struct lineStack{
    char data;
    struct lineStack * next;
}lineStack;
//實現入棧操作,向連結串列的表頭新增新增元素
lineStack* push(lineStack * stack,char a){
    lineStack * line=(lineStack*)malloc(sizeof(lineStack));
    line->data=a;
    line->next=stack;
    stack=line;
    return stack;
}
//實現出棧操作
lineStack * pop(lineStack * stack){
    if (stack) {
        lineStack * p=stack;
        stack=stack->next;
        printf("彈棧元素:%c ",p->data);
        if (stack) {
            printf("棧頂元素:%c\n",stack->data);
        }else{
            printf("棧已空\n");
        }
        free(p);
    }else{
        printf("棧內沒有元素");
        return stack;
    }
    return stack;
}
int main() {
    lineStack * stack=NULL;
    stack=push(stack, 'a');
    stack=push(stack, 'b');
    stack=push(stack, 'c');
    stack=push(stack, 'd');
    stack=pop(stack);
    stack=pop(stack);
    stack=pop(stack);
    stack=pop(stack);
    stack=pop(stack);
    return 0;
}
輸出結果: 彈棧元素:d 棧頂元素:c
彈棧元素:c 棧頂元素:b
彈棧元素:b 棧頂元素:a
彈棧元素:a 棧已空
棧內沒有元素