带头节点的链式存储栈基本操作(进栈、出栈、获取栈顶元素)
生活随笔
收集整理的這篇文章主要介紹了
带头节点的链式存储栈基本操作(进栈、出栈、获取栈顶元素)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
帶頭節(jié)點的鏈?zhǔn)酱鎯;静僮?#xff08;進(jìn)棧、出棧、獲取棧頂元素)
- 棧鏈?zhǔn)酱鎯Φ奶攸c
- 鏈?zhǔn)酱鎯5幕静僮鞔a實現(xiàn)
- 測試結(jié)果
棧鏈?zhǔn)酱鎯Φ奶攸c
鏈?zhǔn)酱鎯?#xff0c;可以帶頭結(jié)點,或不帶頭結(jié)點,本篇介紹帶頭結(jié)點的鏈?zhǔn)酱鎯5幕静僮鳌?/p>
進(jìn)棧、出棧都在頭結(jié)點一側(cè)進(jìn)行。
由于帶有頭結(jié)點,可不設(shè)置棧頂指針,頭結(jié)點可視為棧頂指針來進(jìn)行操作。
鏈?zhǔn)酱鎯5幕静僮鞔a實現(xiàn)
/*** 帶頭節(jié)點的鏈?zhǔn)酱鎯?/ #include <cstdio> #include <malloc.h>/*** 定義結(jié)構(gòu)*/ typedef struct LNode{int data; //指針域struct LNode *next; //數(shù)據(jù)域 }SqStack,*LinkStack;/*** 初始化棧*/ LNode* initStack(LinkStack &linkStack){linkStack = (LinkStack)malloc(sizeof(LNode)); //創(chuàng)建頭結(jié)點linkStack->data = -1; //頭結(jié)點指針域初始化為-1linkStack->next = NULL;return linkStack; }/*** 判斷棧是否為空*/ bool linkStackIsEmpty(LinkStack linkStack){if(linkStack->next == NULL){ // 只有頭結(jié)點return true; //棧空}return false; //棧非空 }/*** 進(jìn)棧操作(只在頭結(jié)點進(jìn)行進(jìn)棧操作)*/ void push(LinkStack &linkStack,int value){LNode * newNode = (LNode *)malloc(sizeof(LNode)); //創(chuàng)建新結(jié)點newNode->data = value; //給新節(jié)點賦值newNode->next = linkStack->next;//指針域linkStack->next = newNode; //新節(jié)點進(jìn)棧}/*** 出棧操作(在頭結(jié)點進(jìn)行出棧)*/ bool pop(LinkStack &linkStack){LNode * delNode;delNode = linkStack->next; //要出棧的結(jié)點if(linkStackIsEmpty(linkStack)){return false; //棧空}linkStack->next = delNode->next; //頭結(jié)點的指針域指向刪除結(jié)點的后一位free(delNode);return true; }/*** 獲取棧頂元素*/ int getTop(LinkStack linkStack){if(linkStackIsEmpty(linkStack)){return -1; //棧空,返回-1}return linkStack->next->data; }/*** 創(chuàng)建一個完整的棧* @return*/ void creatLinkStack(LinkStack &linkStack){int x;scanf("%d",&x);while(x != 9999){push(linkStack,x);scanf("%d",&x);} }/*** 打印* @return*/ void printStack(LinkStack linkStack){while(linkStack != NULL){printf("棧里的值(包含頭結(jié)點)- %d \n",linkStack->data);linkStack= linkStack->next;} }int main(){LinkStack linkStack;LNode *top;printf("---------初始化--------- \n");top = initStack(linkStack);printf("初始化棧頂指針值(頭結(jié)點): %d \n",top->data);printf("---------進(jìn)棧(創(chuàng)建一個完整棧)---------\n");creatLinkStack(linkStack);printf("---------打印---------\n");printStack(linkStack);printf("---------獲取棧頂元素---------\n");int top1 = getTop(linkStack);printf("棧頂元素: %d\n",top1);printf("---------出棧---------\n");pop(linkStack);printStack(linkStack);printf("---------獲取棧頂元素---------\n");int top2 = getTop(linkStack);printf("棧頂元素: %d\n",top2);return 0; }測試結(jié)果
---------初始化--------- 初始化棧頂指針值(頭結(jié)點): -1 ---------進(jìn)棧(創(chuàng)建一個完整棧)--------- 3 4 2 5 6 9999 ---------打印--------- 棧里的值(包含頭結(jié)點)- -1 棧里的值(包含頭結(jié)點)- 6 棧里的值(包含頭結(jié)點)- 5 棧里的值(包含頭結(jié)點)- 2 棧里的值(包含頭結(jié)點)- 4 棧里的值(包含頭結(jié)點)- 3 ---------獲取棧頂元素--------- 棧頂元素: 6 ---------出棧--------- 棧里的值(包含頭結(jié)點)- -1 棧里的值(包含頭結(jié)點)- 5 棧里的值(包含頭結(jié)點)- 2 棧里的值(包含頭結(jié)點)- 4 棧里的值(包含頭結(jié)點)- 3順序存儲棧基本操作:https://blog.csdn.net/qq_35963993/article/details/106025787.
總結(jié)
以上是生活随笔為你收集整理的带头节点的链式存储栈基本操作(进栈、出栈、获取栈顶元素)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bash shell函数中返回任意值的四
- 下一篇: 一分钟了解c语言求开方sqrt函数