鏈棧的基本操作(入棧和出棧)及C語言實現完全攻略
阿新 • • 發佈:2018-12-17
鏈棧,即用線性表的連結串列結構實現棧的功能。實現過程中,鏈棧不需要建立頭結點,增加頭結點反而會增加程式的複雜性,因此連結串列中只需要建立一個頭指標就可以了。
鏈棧的實現思想是:用連結串列頭結點的一端作為棧的棧頂端,這樣做的好處是當資料元素壓棧或者彈棧時,直接使用頭指標就可以完成,不需要增設額外的指標。
例如,用鏈棧實現將(’a’,’b’,’c’,’d’)四個資料元素壓棧,再依次彈棧:
輸出結果:
彈棧元素:d 棧頂元素:c
彈棧元素:c 棧頂元素:b
彈棧元素:b 棧頂元素:a
彈棧元素:a 棧已空
棧內沒有元素
鏈棧的實現思想是:用連結串列頭結點的一端作為棧的棧頂端,這樣做的好處是當資料元素壓棧或者彈棧時,直接使用頭指標就可以完成,不需要增設額外的指標。
例如,用鏈棧實現將(’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; }
彈棧元素:c 棧頂元素:b
彈棧元素:b 棧頂元素:a
彈棧元素:a 棧已空
棧內沒有元素