如果我們有兩個相同型別的棧,我們為他們各自開闢了陣列空間,極有可能第乙個棧已經滿了,再進棧就溢位了,而另乙個棧還有很多儲存空間空閒。這時,我們可以充分利用順序棧的單向延伸的特性,使用乙個陣列來儲存兩個棧,讓乙個棧的棧底為陣列的始端,另乙個棧的棧底為陣列的末端,每個棧從各自的端點向中間延伸。
如下圖所示:
其中,top1和top2分別為棧1和棧2的棧頂指標,size為整個陣列空間的大小,棧1的底固定在下標為0的一端,棧2的底固定在下標為size-1的一端。
實現**:
package com.dhy.seqstack;
/** * 兩棧共享空間
* @author administrator
* */
public class bothstack
/*** 壓棧
* @param i 第幾個棧
* @param o 入棧元素
* @return
*/public boolean push(int i , object o)else if(i == 2)else
throw new runtimeexception("輸入錯誤!");
return true; }
/*** 出棧
* @param i
* @return
*/@suppresswarnings("unchecked")
public t pop(int i) else if(i == 2) else
throw new runtimeexception("輸入錯誤!");
} /**
* 獲取棧頂元素
* @param i
* @return
*/@suppresswarnings("unchecked")
public t get(int i) else if(i == 2) else
throw new runtimeexception("輸入錯誤!"); }
/*** 判斷棧是否為空
* @param i
* @return
*/public boolean isempty(int i) else if(i == 2) else
throw new runtimeexception("輸入錯誤!"); }
/*** 遍歷
*/@suppresswarnings("unchecked")
@override
public string tostring()
str1 += "]";
for(int i=top2;i
棧 兩棧共享空間
對於乙個棧,我們只能盡量考慮周全,設計出合適大小的陣列處理。但是,對於兩個相同型別的棧,我們卻可以做到最大限度地利用其事先開闢的儲存空間進行操作。我們可以用乙個陣列來儲存兩個棧,只不過需要一點小技巧。陣列有兩個端點,兩個棧有兩個棧底,讓乙個棧的棧底為陣列的始端,即下標為0處。另乙個棧的棧底為陣列的末...
兩棧共享空間
include include include define ok 1 define error 0 define maxsize 20 typedef int selemtype typedef int status typedef struct sqdoublestack 雙頭棧的初始化 sta...
兩棧共享空間
1.共有棧的實現 package edu.tcu.soft 兩棧共享空間 public class mybothstack 入棧操作 public void push int i,e e else 如果i 2,入右棧 if i 2 出棧操作 suppresswarnings unchecked pu...