兩棧共享空間

2021-07-23 03:28:09 字數 1211 閱讀 4387

1.共有棧的實現

package edu.tcu.soft;

/** * 兩棧共享空間

*/public class mybothstack

// 入棧操作

public void push(int i, e e) else

// 如果i=2,入右棧

if (i == 2)

} }// 出棧操作

@suppresswarnings("unchecked")

public e pop(int i)

return (e) object[top1--];

} // 如果i=2,將右棧的棧頂元素出棧

if (i == 2)

return (e) object[top2++];

} return null;

} // 獲取棧頂元素

@suppresswarnings("unchecked")

public e peek(int i)

if(i==2)

return null; }

//當兩棧滿時,自動將棧的長度增長為原來的1倍

private object increasestack(object object2, int top12, int top22)

for(int j=newlength-1;j>newlength-(oldlength-top22);j--)

return object;

} //獲取棧的長度

public int size()

}

2.測試類

package edu.tcu.soft;

public class test

}

通過親手寫**,你才會發現棧、共享棧的實現方式其實是差不多。

共點:通過乙個陣列和棧頂指標來實現棧元素的存放和彈出      

不同點:順序棧是單方向延伸,共享棧是相向延伸

共享棧優點:如果在乙個程式中同時使用相同資料型別和兩個棧是,我們想到最直接的辦法是為每個棧開闢乙個陣列空間,不過這樣做的結果可能出現乙個棧的空間已被佔滿而無法進行插入操作,同時另乙個棧的空間仍有剩餘而沒得到利用的情況,從而造成儲存空間的浪費。共享棧利用乙個陣列來儲存兩個棧,讓乙個棧的棧底為該陣列的始端,另乙個棧的棧頂為該陣列的末端,每個棧從各自的端點向中間延伸。

棧 兩棧共享空間

對於乙個棧,我們只能盡量考慮周全,設計出合適大小的陣列處理。但是,對於兩個相同型別的棧,我們卻可以做到最大限度地利用其事先開闢的儲存空間進行操作。我們可以用乙個陣列來儲存兩個棧,只不過需要一點小技巧。陣列有兩個端點,兩個棧有兩個棧底,讓乙個棧的棧底為陣列的始端,即下標為0處。另乙個棧的棧底為陣列的末...

兩棧共享空間

include include include define ok 1 define error 0 define maxsize 20 typedef int selemtype typedef int status typedef struct sqdoublestack 雙頭棧的初始化 sta...

兩棧共享空間

兩棧共享空間 儲存結構定義 const int stacksize 10 typedef int datatype typedef struct bothstack 入棧操作 void push bothstack s,int i,datatype x if i 1 s.data s.top1 x ...