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,也就是說用迭代器迭代的時候是從小到大排序的。棧和佇列的區別是啥?吃多了拉就是佇列,吃多了吐就...