陣列實現stack和queue,及其相互實現

2021-09-28 18:52:41 字數 1011 閱讀 4373

queue:先進先出

stack:先進後出

stack實現queue

一般寫法 兩個stack,元素的出和進都放到stack1,每進乙個就倒2次(s1->s2 s1存新 s2->s1),把後加進來的放到最下面;

高效能演算法:s1負責出,s2負責入

入隊時,s2若為空,將s1匯入s2,然後將元素壓入s2;s2不為空,元素直接加入s2

出隊時,判斷s1是否為空,如不為空,則直接彈出頂元素;如為空,則將s2的元素逐個「倒入」s1,把最後乙個元素彈出並出隊。

這個思路,避免了反覆「倒」棧,僅在需要時才「倒」一次。

用queue實現stack

也需要兩個queue,放入的時候直接到有數的queue中即可,後進入的在隊尾;但是出的時候因為要出隊尾的,所以逐個將元素轉移到另乙個queue,最後乙個的時候直接返回即可;

或者新來的放進空的queue1,另乙個queue的逐個塞入queue1

陣列實現stack:挨個向後放即可,出的時候頂端開始出

陣列實現對列:保持左邊是最先進來的,移除的時候移除第乙個,別的左移,保持第0位是最先進來的

第二種方案:來個標誌位 oldest+size,oldest=contenntsize-1出時,oldest=0.

下面僅僅給出用stack實現queue的方案:

public class queuewithstack 

public void add(string s)else

}stack1.push(s);

size ++ ;

}public string removestfromsack2()

string tmp ;

if(stack2.isempty())

tmp = stack1.pop();

}else

size --;

return tmp;

}public static void main(string args)

}

Go 用list實現stack和queue

go的container list 包裡面帶的list,有在鍊錶頭部和尾巴插入元素,和獲取頭部和尾部元素的操作,因此我們可以用list來實現棧和佇列的功能。import container list fmt func stacktest for ele stack.back 取出鍊錶最後乙個元素 v...

棧(Stack)和佇列(Queue)

棧和佇列是兩種重要的線性結構。從資料結構角度看,棧和佇列也是線性表,其特殊性在於棧和佇列的基本操作是線性表操作的子集,它們是操作受限的線性表,因 此,可稱為限定性的資料結構。但從資料型別角度看,它們是和線性表大不相同的兩類重要的抽象資料型別。由於它們廣泛應用在各種軟體系統中,因此在物件導向 的程式設...

棧stack 和 佇列queue

stl中,sort的預設排序為less,也就是說從小到大排序 priority queue預設是less,也就說大頂堆 map預設是less,也就說用迭代器迭代的時候預設是小的排在前面 set預設是less,也就是說用迭代器迭代的時候是從小到大排序的。棧和佇列的區別是啥?吃多了拉就是佇列,吃多了吐就...