資料結構學習筆記 棧與佇列

2021-10-22 16:53:21 字數 3190 閱讀 3705

二、佇列

總結參考文獻

棧和佇列的資料操作範圍僅限於邏輯上特定的某端,棧先進後出,佇列先進先出。

操作介面

功能返回型別

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−

1​bn

−2​…

b2​b

1​b0

​)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...