数据结构——实现双栈操作
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                数据结构——实现双栈操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                題目
將編號為 0 和 1 的兩個棧存放于一個數組空間 V[m]中,棧底分別處于數組的兩端。當第0 號棧的棧頂指針 top[0]等于-1 時該棧為空;當第 1 號棧的棧頂指針 top[1]等于 m 時,該棧為空。兩個棧均從兩端向中間增長(見下圖)。試編寫雙棧初始化,判斷棧空、棧滿、進棧
 和出棧等算法的函數。雙棧數據結構的定義如下:
 
代碼
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std;typedef int SElemType;//雙棧數據結構定義 typedef struct {int top[2], bot[2]; //定義棧頂和棧底指針SElemType* V; //棧數組int m; //棧最大可容納元素個數 }DblStack;//初始化雙棧 void InitDblStack(DblStack& stack, int Maxsize) {SElemType* arr = (SElemType*)malloc(sizeof(SElemType));//申請空間stack.V = arr; //將V指針指向申請的空間stack.m = Maxsize; //初始化最大元素個數stack.top[0] = -1; //左棧棧頂指針初始化stack.bot[0] = 0; //左棧棧底指針初始化stack.top[1] = stack.m; //右棧棧頂指針初始化stack.bot[1] = stack.m - 1; //右棧棧底指針初始化 }//判斷棧空(若為空棧,返回1) int EmptyDblStack(DblStack stack) {if (stack.top[0] == -1 && stack.top[1] == stack.m)return 1; return 0; }//判斷是否為滿棧(滿棧返回1) int FullDblStack(DblStack stack) {if (stack.top[1] == ( stack.top[0] + 1 ) )return 1;return 0; }//左棧進棧 int pushLeft(DblStack& stack, SElemType item) {if (FullDblStack(stack) == 1)//判斷是否為滿棧{printf("棧已滿,無法進棧\n");return 0; //滿棧返回0}stack.top[0]++; //左棧棧頂指針加一stack.V[stack.top[0]] = item; //將數據元素進棧return 1; //完成操作返回1 }//右棧進棧 int pushRight(DblStack& stack, SElemType item) {if (FullDblStack(stack) == 1) //棧已滿{printf("棧已滿,無法進棧\n");return 0; }stack.top[1]--; //右棧棧頂指針減1stack.V[stack.top[1]] = item; //將數據元素進棧return 1; }//左棧出棧 SElemType popLeft(DblStack& stack) {if (stack.top[0] == -1) //棧為空{printf("左棧為空,無法出棧\n");return 0; }SElemType item = stack.V[stack.top[0]]; //取出棧頂數據元素stack.top[0]--; //調整左棧頂指針return item; //返回原棧頂元素 }//右棧出棧 SElemType popRight(DblStack& stack) {if (stack.top[1] == stack.m) //判斷是否為空棧{printf("右棧已空,無法出棧\n");return 0; }SElemType item = stack.V[stack.top[1]]; //取出右棧棧頂元素stack.top[1]++; //調整又棧頂指針return item; //返回原棧頂元素 }//遍歷雙棧 void printDblStack(DblStack stack) {for (int i = 0; i <= stack.top[0]; i++) //輸出左棧printf("|%d| ", stack.V[i]);for (int i = ++stack.top[1]; i < stack.m; i++)//輸出右棧printf("|%d| ", stack.V[i]);printf("\n"); }int main() {DblStack stack;int Maxsize;cout << "輸入棧的容納長度\n";cin >> Maxsize;InitDblStack(stack, Maxsize); //初始化雙棧if (EmptyDblStack(stack) == 1)cout << "雙棧為空\n";pushLeft(stack, 1); //左棧進棧pushLeft(stack, 2); //左棧進棧pushRight(stack, 4); //右棧進棧pushRight(stack, 5); //右棧進棧cout << popLeft(stack) <<endl;cout << popLeft(stack) <<endl;cout << popRight(stack) <<endl;cout << popRight(stack) <<endl;return 0; }總結
以上是生活随笔為你收集整理的数据结构——实现双栈操作的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Easyui and mvc 项目3书籍
- 下一篇: 三、登录页制作《iVX低代码/无代码个人
