日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构——实现双栈操作

發布時間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构——实现双栈操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

將編號為 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; }

總結

以上是生活随笔為你收集整理的数据结构——实现双栈操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。