我們都知道棧的特點是」後進先出「,佇列的特點是」先進先出「。兩個棧實現乙個佇列也就是利用兩個棧來實現佇列的先進先出特點。
思路:
注:圖中的紅框表示該元素出佇列。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...