兩棧共用空間是為了解決順序棧未滿時只能利用部分空間的現象,讓兩個棧分別以陣列頭部和尾部作為棧底,向中間延伸,直到在中間相遇,即相當於兩個棧都滿了
事實上和順序棧沒什麼兩樣,不過是要新增乙個函式引數用於識別在哪個棧進行操作
和順序棧一樣,為了在函式中修改結構體內容,函式引數為結構體指標
typedef
struct doublestack
doublestack;
void
initial
(doublestack *d)
入棧
void
push
(doublestack *d,
int data,
int stackname)
else
}else
}
出棧
int
pop(doublestack *d,
int stackname)
else}if
(stackname==2)
else
}return ret;
}
得到棧頂
int
gettop
(doublestack *d,
int stackname)
else
return ret;
}
int
main()
push
(&d,
114514,1
);push
(&d,
1919810,2
);cout<<
gettop
(&d,1)
<<
' ';
cout<<
gettop
(&d,2)
int i=
1;i<=
101;i++
) cout
int i=
1;i<=
100;i++
)return0;
}
棧和佇列 2鏈棧
adrian 鏈棧元素入棧 例如,將元素 1 2 3 4 依次入棧,等價於將各元素採用頭插法依次新增到鍊錶中,每個資料元素的新增過程如圖 2 所示 鏈棧元素出棧 例如,圖 2e 所示的鏈棧中,若要將元素 3 出棧,根據 先進後出 的原則,要先將元素 4 出棧,也就是從鍊錶中摘除,然後元素 3 才能出...
棧和佇列 2
佇列 佇列比棧稍微複雜一點,特別是順序儲存結構中,有乙個rear,乙個front,要把他倆連起來,挺麻煩的,還有假溢位問題,隊空隊滿的討論都是比較難的地方,需要仔細推敲。一 基本知識 佇列 只允許在一端進行插入操作,而另一端進行刪除操作的線性表。允許插入 也稱入隊 進隊 的一端稱為隊尾,允許刪除 也...
棧 兩棧共享空間
對於乙個棧,我們只能盡量考慮周全,設計出合適大小的陣列處理。但是,對於兩個相同型別的棧,我們卻可以做到最大限度地利用其事先開闢的儲存空間進行操作。我們可以用乙個陣列來儲存兩個棧,只不過需要一點小技巧。陣列有兩個端點,兩個棧有兩個棧底,讓乙個棧的棧底為陣列的始端,即下標為0處。另乙個棧的棧底為陣列的末...