1、用陣列結構實現大小固定的棧和佇列
(1)棧:
publicstatic
class
arraystack
arr = new
integer[initsize];
size = 0;
}public
integer peek()
//返回棧頂元素但並不讓元素出棧
return arr[size - 1];
}public
void push(int
obj)
arr[size++] =obj;
}public
integer pop()
return arr[--size];}}
(2)佇列:
publicstatic
class
arrayqueue
arr = new
integer[initsize];
size = 0;
first = 0;
last = 0;
}public
integer peek()
return
arr[first];
}public
void push(int
obj)
size++;
arr[last] =obj;
last = last == arr.length - 1 ? 0 : last + 1;
}public
integer poll()
size--;
int tmp =first;
first = first == arr.length - 1 ? 0 : first + 1;
return
arr[tmp];}}
2、實現乙個特殊的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小元素的操作。
【要求】
1.pop、push、getmin操作的時間複雜度都是o(1)。
2.設計的棧型別可以使用現成的棧結構。
【思路】
根據要求1,由棧先進後出的特性,我們可以判斷乙個棧是滿足不了需求的,此時需使用兩個棧,乙個data棧儲存資料,乙個min棧儲存最小元素。當需要返回棧中最小元素的操作時,將min棧棧頂元素返回即可。
【code】
publicstatic
class
mystack1
public
void push(int
newnum)
else
if (newnum <= this
.getmin())
this
.stackdata.push(newnum);
}public
intpop()
int value = this
.stackdata.pop();
if (value == this
.getmin())
return
value;
}public
intgetmin()
return
this
.stackmin.peek();}}
3、僅用佇列結構實現棧結構
【思路】
使用兩個佇列,乙個佇列名為主佇列,乙個佇列名為help的輔助佇列,模擬進棧操作即入主佇列,當需模擬出棧時,將主佇列元素一一出隊併入help佇列,當出最後乙個元素時將其返回,完成出棧操作,並將help佇列名轉化為主佇列,原本的主佇列此時已無元素,轉換成help佇列。
【code】
publicstatic
class
twoqueuesstack
public
void push(int
pushint)
public
intpeek()
while (queue.size() != 1)
int res =queue.poll();
help.add(res);
swap();
return
res;
}public
intpop()
while (queue.size() != 1)
int res =queue.poll();
swap();
return
res;
}private
void
swap()
}
4、僅用棧結構實現佇列
【思路】
與上述一樣也需要兩個棧,乙個棧名為push棧,當入佇列時需要用到;乙個棧名為pop棧,當出佇列時需要用到。當需要出佇列時,先檢查pop棧有無元素,如無則push棧將全部元素出棧並將出棧元素一一壓入pop棧,此時返回pop棧頂元素,即為出隊操作。
這裡需注意兩個規則,規則一:pop棧有內容時push棧不能往裡倒元素。規則二:當pop棧無元素,push棧要往裡倒元素時,需將元素一次性全部倒入。否則違背佇列規則。
【code】
publicstatic
class
twostacksqueue
public
void push(int
pushint)
public
intpoll()
else
if(stackpop.empty())
}return
stackpop.pop();
}public
intpeek()
else
if(stackpop.empty())
}return
stackpop.peek();}}
佇列的特殊實現 用棧實現佇列
用棧實現佇列這種方式我是想不到的,不過卻是很容易理解的一種方式。她其實是組合使用了兩個棧的 後進先出 來實現佇列的 先進先出 這樣實現的佇列,其操作的時間複雜度為o 1 演算法的實現思路 準備兩個用於棧實現佇列 instack和outstack 1 當有新元素入隊時 將其壓入instack 中 2 ...
佇列實現棧棧實現佇列
佇列是一種先進先出的資料結構,要想實現先進後出,需加乙個輔助佇列進行資料的來回倒 引用交換 從而實現棧結構。例如 5 4 3 2 1 用乙個輔助佇列裝 4 3 2 1,把5彈出,在把 4 3 2 1放回原佇列,如此反覆可變成5 4 3 2 1的棧結構。棧是一種先進後出的資料結構,要想實現先進先出,同...
佇列實現棧,棧實現佇列
兩個佇列實現棧 每次進入乙個佇列,取出得時候,把所有元素進入另乙個佇列,只留下乙個元素,以此實現棧的先進後出 filo package algorithmbymyself import j a.util.linkedlist import j a.util.queue 用兩個佇列實現乙個棧 publ...