所謂的共享棧就是兩個虛擬的棧使用一塊固定大小的陣列元素,涉及到如何不衝突的進行入棧出棧操作。對一維陣列即在陣列兩頭設定兩個棧頂標記(指標)。然後分別這兩個進行入棧出棧操作。當前面的棧標記位置+1=後面棧的位置,那麼不可以進行入棧操作,如果兩個棧有在棧底(對前面的來說是top1-1,後乙個是top2n)是不可以進行出棧操作的。
結構圖如下:
//函式根據operate這個字串內容是push還是pop,flag是1還是2表示是前面一部分棧還是後一部分棧,n表示共享棧stack_array陣列的長度
#include#includeusing namespace std;
int top1,top2;//棧頂指標在整個過程是變化的,記錄著兩個棧棧頂位置,需要設定為全域性變數
char sharestack(char stack_array,int top,int flag,string operate)
if(flag==2)
}if(operate=="pop")
if(flag=2)
}}int main()
;//初始化字元陣列
top1=-1;
top2=10;//初始化1、2號棧棧頂指標
//2號棧入棧基本操作,將top的變化放在main中執行,實現連續入棧或出棧。
if(top1+1!=top2)//棧不滿則入
//2號棧入棧
if(top1+1!=top2)
cout<
在此次編寫的過程中遇到不能進行連續**入棧或者出棧的問題,在每次出入棧都要進行相應的資料操作,可以考慮將其封裝在函式中。
乙個陣列實現兩個棧 共享棧
問題分析 在順序棧的實現中,元素入棧是從下標為0的位置向上增長的,出棧是通過size 實現的。要想用乙個陣列實現2個棧,可以除了下標從0開始增長,還同時讓另乙個棧下標從size 1處開始減少。問題解決 定義top1,top2分別代表2個棧棧頂的下乙個位置的下標。棧1入棧時,元素放入top1位置,再使...
Java實現陣列棧的操作
棧的操作一般有 判斷是否為空 清空棧 檢視棧的長度 進棧 出棧 首先定義乙個棧的類 public class mystack else 清空棧 public void clear size 0 棧長度 public int length 擴充陣列 suppresswarnings unused pr...
陣列實現簡單的棧操作
微控制器開發過程中,常常會用到棧操作,例如多級選單的頁面跳轉,這裡分享乙個自己c語言寫的非常簡單的棧操作檔案供各位參考。include bsp user stk.h uint8 t stack stack size io static int top element 1 指向棧頂元素的指標 void...