二、佇列
總結參考文獻
棧和佇列的資料操作範圍僅限於邏輯上特定的某端,棧先進後出,佇列先進先出。
操作介面
功能返回型別
size()
報告棧的規模
intempty()
判斷棧是否為空
bool
push(e)
將e插至棧頂
void
pop()
刪除棧頂物件
ttop()
引用棧頂物件
t&
#include
"../vector/vector.h"
//以向量為基類,公有派生出棧模板類
template
<
typename t>
class
stack
:public vector
t pop()
t&top()}
;
進製轉換的原理:將乙個10進製的數x轉換成n位h進製的數: x=(
bn−1
bn−2
…b2b
1b0)
hx=b
n−1∗
hn−1
+bn−
2∗hn
−2+…
+b2∗
h2+b
1∗h1
+b0∗
h0x0
=x÷h
=bn−
1∗hn
−2+b
n−2∗
hn−3
+…+b
2∗h1
+b1∗
h0⋯⋯
b0x1
=x0÷
h=bn
−1∗h
n−3+
bn−2
∗hn−
4+…+
b2∗h
0⋯⋯b
1⋮xn
−1=x
n−2÷
h=0⋯
⋯bn−
1\begin x = }} \ldots } \right)_h}\\ x = }*} + }*} + \ldots + * + * + *\\ = x \div h = }*} + }*} + \ldots + * + * \cdots \cdots \\ = \div h = }*} + }*} + \ldots + * \cdots \cdots \\ \vdots \\ } = } \div h = 0 \cdots \cdots } \end
x=(bn−
1bn
−2…
b2b
1b0
)h
x=bn
−1∗
hn−1
+bn−
2∗h
n−2+
…+b2
∗h2
+b1
∗h1+
b0∗
h0x0
=x÷
h=bn
−1∗
hn−2
+bn−
2∗h
n−3+
…+b2
∗h1
+b1
∗h0⋯
⋯b0
x1=
x0÷
h=bn
−1∗
hn−3
+bn−
2∗h
n−4+
…+b2
∗h0
⋯⋯b1
⋮xn
−1=
xn−2
÷h=
0⋯⋯b
n−1
對十進位制數x,不斷除h取餘,將餘數(低位到高位)壓入棧中,直到商為0,再依次將高位到低位從棧中取出。
迭代實現**:
void
convert
(stack<
char
>
& s, __int64 n,
int base)
;while
(n!=0)
}//新進製下由高到低的各數字,自頂向下儲存在棧中
佇列中約定,新物件只能由隊尾插入其中,只能從對頭一端刪除已有的元素。
操作介面
功能返回型別
size()
報告佇列的規模(元素總數)
intempty()
判斷佇列是否為空
bool
enqueue(e)
將e插入隊尾
void
dequeue()
刪除隊首物件
tfront()
引用隊首物件
t&**如下(示例):
#include
"../list/list.h"
//以list為基類,公有派生出棧模板類
template
<
typename t>
class
stack
:public list
t dequeue()
t&front()
};
用兩個棧來實現佇列的入隊和出隊,原理如下:
①將stack1作為要使用的隊,判斷stack2是否為空,若不為空,則先將stack2元素壓入stack1中,再將入隊元素壓入(pop)進stack1中,自然地,入隊元素位於stack1棧的棧頂。
②出隊時,若stack2為空,則將stack1中的元素一一彈出並壓入stack2中,直到stack1中元素為空,這時候stack2的棧頂物件就是佇列的隊首物件。如果stack2不為空時,則直接彈出stack2的棧頂物件
class
solution
intpop()
int ret = stack2.
top();
stack2.
pop();
return ret;
}private
: stack<
int> stack1;
stack<
int> stack2;
};
棧和佇列都含有乙個能夠刪除集合中的特定元素的方法。
[1]:
[2]:
[3]:鄧俊輝.資料結構(c++語言版).北京:清華大學出版社,2023年8月第一版,isbn:978-7-302-33064-6.
資料結構學習筆記 棧 佇列 (習題)
1.引言 本文主要講解棧和佇列的一些常見的面試題。2.一些常見的面試題 2.1 題目 輸入兩個整數序列。其中乙個序列表示棧的push順序,判斷另乙個序列有沒有可能是對應的pop順序。為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。比如輸入的push序列是1 2 3 4 5,那麼4 5 ...
資料結構學習 棧和佇列
棧是限定僅在表尾進行插入和刪除操作的線性表。我們把插入和刪除的一段稱為棧頂,另一端稱為棧底,不含任何元素的棧稱為空棧。由於棧本身是乙個線性表,因此棧的儲存方式也有兩種,分別是順序儲存和鏈式儲存。既然棧是線性表的特列,那麼棧的順序儲存其實也是線性表順序儲存的簡化。我們稱為順序棧。1 兩棧的共享空間 此...
資料結構學習筆記 棧
它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。p...