用兩個棧實現乙個佇列和用兩個佇列實現乙個棧

2021-10-08 05:44:30 字數 1669 閱讀 9263

我們都知道棧的特點是」後進先出「,佇列的特點是」先進先出「。兩個棧實現乙個佇列也就是利用兩個棧來實現佇列的先進先出特點。

思路:

template

<

typename t>

class

cqueue

~cqueue

(void

)void

(const t& node)

;//尾插

t deletehead()

;//頭刪

private

: stack stack1;

stack stack2;};

template

<

typename t>

void cqueue::(

const

& t& node)

t cqueue

::deletehead()

} t head = stack2.

top();

stack2.

pop();

if(stack2.

size()

==0)return0;

return head;

}

注:圖中的紅框表示該元素出佇列。

template

<

typename t>

class

cstack

~cstack

(void

)void

(const t& node)

; t deletehead()

;private

: queue queue1;

queue queue2;};

template

<

typename t>

void cstack::(

const t& node)

//實現棧元素的插入

else

}t cstack

::deletehead()

//實現棧元素的刪除

if(queue2.

size()

==1)if

(queue1.

size()

>

1&& queue2.

size()

==0)

t last=queue1.

front()

; queue1.

pop();

return last;}if

(queue2.

size()

>

1&& queue1.

size()

==0)

t last=queue2.

front()

; queue2.

pop();

return last;}if

(queue1.

size()

==0&& queue2.

size()

==0)throw

newexception

("stack is empty");

}

用兩個棧實現佇列和用兩個佇列實現乙個棧

template class cqueue 解題思路 插入操作在stack1中進行,刪除操作在stack2中進行,如果stack2為空,則將stack1中的所有元素轉移到stack2中。例項 include include include using namespace std template c...

用兩個棧實現佇列和用兩個佇列實現乙個棧

1.用兩個堆疊實現乙個佇列。思路 對於insert,把資料插入到第乙個堆疊中 對於remove,如果第二個堆疊為空,把第乙個堆疊的所有元素pop出來並放入第二個堆疊中,然後返回第二個堆疊的第乙個元素。implement queue by 2 stacks using namespace std cl...

用兩個棧實現佇列和用兩個佇列實現乙個棧

template class cqueue 解題思路 插入操作在stack1中進行,刪除操作在stack2中進行,如果stack2為空,則將stack1中的所有元素轉移到stack2中。例項 include include includeusing namespace std template cl...