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