題目:設有兩個棧s1,s2都採用順序棧方式,並共享乙個儲存區[0,…,maxsize-1],為了盡量利用空間,減少溢位的可能,可採用棧頂相向、迎面增長的儲存方式。試設計s1,s2,有關入棧和出棧的操作演算法。
關鍵字:共享棧+棧頂相向+迎面增長
思路:
兩個棧共享向量空間,將兩個棧的棧底設在向量兩端,
初始時,s1棧頂指標為-1,s2棧頂指標為maxsize。
兩個棧頂指標相鄰時為棧滿。
兩個棧頂相向、迎面增長,棧頂指標指向棧頂元素。
初始化共享棧:
# define maxsize 100
//兩個棧共享順序儲存空間所能達到的最多元素數/最大容量,初始化100
# define elemtp int
//假設元素型別為整形
typedef
struct
stk;
//stack的縮寫
stk s;
//s是如上定義的結構型別變數,為全域性變數
本題關鍵:
兩個棧入棧和退棧時的棧頂指標的計算。
s1(top=-1)棧是通常意義下的棧;
s2(top=maxsize)棧入棧操作時,其棧頂指標左移(減1);
退棧時,棧頂指標右移(加1)
此外,對於所有棧的操作,都要注意「入棧判滿,出棧判空」
(1)入棧操作
intpush
(int i,elemtp x)
if(s.top[1]
-s.top[0]
==1)switch
(i)}
(2)退棧操作
elemtp pop
(int i)
switch
(i)else
return s.stack[s.top[0]
--];case1:
if(s.top[1]
==maxsize)
else
return s.stack[s.top[1]
++];}
//switch
}
小白演算法積累 棧1 判斷合法操作序列
題目 i 入棧,o 出棧。寫出乙個演算法,判定所給的操作序列是否合法。合法要求 棧的初態和終態均為空。若合法,返回true,否則返回false 假定被判定的操作序列已存入一維陣列中 關鍵字 判斷入棧出棧操作序列是否合法 思路 入棧 無論多少次,只要記憶體足夠,就可以進行 限制 記憶體足夠 出棧 必須...
專案2 建立鏈棧演算法庫
問題及 1.標頭檔案 listack.h,包含定義鏈棧資料結構的 巨集定義 要實現演算法的函式的宣告 ifndef listack h included define listack h included typedef char elemtype typedef struct linknode l...
資料結構與演算法 2 棧
2 儲存結構 2.2 鏈式儲存結構 定義 棧是限定僅在表尾進行插入和刪除的線性表。棧是一種線性表。允許插入和刪除的一端稱為棧頂,另一端稱之為棧底。不含任何元素的棧稱之為空棧,並且棧是後進先出。簡稱lifo結構。插入操作稱之為進棧,壓棧,刪除操作稱之為出棧,彈棧。adt 棧 stack data 同線...