演算法 棧和佇列

2021-10-03 18:09:50 字數 2042 閱讀 2594

佇列

public inte***ce mystackextends iterable

public class arraystackimplements mystack

@override

public item pop() throws exception

item item = a[--n];

check();

// 避免物件游離

a[n] = null;

return item;

}private void check() else if (n > 0 && n <= a.length / 4)

}/**

* 調整陣列大小,使得棧具有伸縮性

*/private void resize(int size)

a = tmp;

}@override

public boolean isempty()

@override

public int size()

@override

public iteratoriterator()

@override

public item next() };}

}

需要使用鍊錶的頭插法來實現,因為頭插法中最後壓入棧的元素在鍊錶的開頭,它的 next 指標指向前乙個壓入棧的元素,在彈出元素時就可以通過 next 指標遍歷到前乙個壓入棧的元素從而讓這個元素成為新的棧頂元素。

public class liststackimplements mystack

@override

public mystackpush(item item)

@override

public item pop() throws exception

item item = top.item;

top = top.next;

n--;

return item;

}@override

public boolean isempty()

@override

public int size()

@override

public iteratoriterator()

@override

public item next() };}

}

下面是佇列的鍊錶實現,需要維護 first 和 last 節點指標,分別指向隊首和隊尾。

這裡需要考慮 first 和 last 指標哪個作為鍊錶的開頭。因為出佇列操作需要讓隊首元素的下乙個元素成為隊首,所以需要容易獲取下乙個元素,而鍊錶的頭部節點的 next 指標指向下乙個元素,因此可以讓 first 指標鍊錶的開頭。

public inte***ce myqueueextends iterable

public class listqueueimplements myqueue

@override

public boolean isempty()

@override

public int size()

@override

public myqueueadd(item item) else

n++;

return this;

}@override

public item remove() throws exception

node node = first;

first = first.next;

n--;

if (isempty())

return node.item;

}@override

public iteratoriterator()

@override

public item next() };}

}

棧和佇列演算法

1 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值 的時間 複雜度為o 1 方法1 使用乙個棧實現,交叉棧 pragma once include define max value 100 typedef struct minstackminstack 實現乙個棧,要求實現pu...

演算法 佇列和棧

雙端佇列的首部和尾部都可以亞壓入元素 public class statck stacktest array public static void stacktest int array else else data.push array i system.out.println 每一步棧的最小值 ...

演算法專題 棧和佇列

在j a中棧使用arraydeque和linkedlist,這兩個集合類既實現了list介面,也實現了deque介面。因此以上集合類可以當棧也可以當雙端佇列使用。1 使用兩個棧完成getmin功能,分別為data棧和min棧 壓入規則 將資料壓入data棧,判斷min棧是否為空 彈出規則 將data...