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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

理论基础 —— 栈 —— 双端栈

發布時間:2025/3/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理论基础 —— 栈 —— 双端栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【實現類】

const int maxSize=100; template <class T> class seqStack{ public:seqStack();~seqStack();void push(T x);//入棧T pop();//出棧T getTop();//獲取棧頂元素bool empty();//判斷是否為空 private:T data[maxSize];//數據域int top;//棧首指針 };

【構造函數】

對于 1 號棧,棧指針設為存儲空間頭部,對于 2 號棧,棧指針設為存儲空間尾部

template <class T> bothStack<T>::bothStack(){top1=-1;top2=maxSize; }

【進棧】

  • 若 top1=top2-1?說明棧滿,則給出上溢信息
  • 若在棧 1 插入元素,則棧 1 指針加 1,新元素 x 進棧
  • 若在棧 1 插入元素,則棧 2?指針減?1,新元素 x 進棧
  • template <class T> void bothStack<T>::push(int i,T x){if(top1==top2-1)//判斷是否溢出throw "上溢";if(i==1){top1++;//棧頂指針+1data[top1]=x;//新元素入棧}if(i==2){top2--;//棧頂指針-1data[top2]=x;//新元素入棧} }

    【出棧算法】

  • 若在棧 1 刪除,首先判斷是否為空棧,若 top1=-1,則給出下溢信息,否則刪除并返回棧 1 的棧首元素
  • 若在棧 2?刪除,首先判斷是否為空棧,若 top2=-1,則給出下溢信息,否則刪除并返回棧 2 的棧首元素
  • template <class T> T bothStack<T>::pop(int i){if(i==1){if(top1==-1)//溢出判斷throw "棧1下溢";T x=data[top1];//取出棧元素top1--;//棧頂指針-1return x;//返回出棧元素}if(i==2){if(top1==-1)//溢出判斷throw "棧2下溢";T x=data[top1];//取出棧元素top1++;//棧頂指針+1return x;//返回出棧元素} }

    【判斷棧空】

    對于第 i 個棧,要判斷其是否為空,只要判斷其棧頂指針,若 top1=-1 或 top2=maxSize,則棧空

    bool bothStack<T>::empty(int i){if(i==1)if(top1==-1)return true;if(i==2)if(top2==maxSize)return true;return false; }

    【取棧頂元素】

  • 判斷要取元素的棧是否為空
  • 若棧不為空,直接返回棧頂元素 data[top]
  • template <class T> T bothStack<T>::getTop(int i){if(i==1){if(empty(1))throw "棧為空";return data[top1];}if(i==2){if(empty(2))throw "棧為空";return data[top2];} }

    ?

    總結

    以上是生活随笔為你收集整理的理论基础 —— 栈 —— 双端栈的全部內容,希望文章能夠幫你解決所遇到的問題。

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