1,鏈棧(用鍊錶實現棧)
>1,初始化棧
class entry
public entry(int val)
}public entry head = null;
public linkstack()
>2,入棧
public void push(int val)
>3,判斷棧空
public boolean isempty()
>4,出棧
public boolean pop()
head.next = head.next.next;
return true;
}
>5,得到棧頂元素
public int gettop()
return head.next.data;
}
2,佇列
佇列:只能在表的一端進行插入運算,在表的另一端進行刪除運算的線性表 (頭刪尾插)
(兩個棧實現佇列)
1,初始化兩個棧
2,入隊
將資料入到s1這個棧裡
//入隊
public void pushq(int val)
s1.push(val);
}
3,出隊
將s1棧裡的資料出棧到s2中,(注意要保留s1棧低的數)再將s2倒入s1 ,覆蓋s1 棧低的那個元素。就實現了出隊
//出隊
public void popq()
while(s1.top > 1)
s1.top = 0;
while(!s2.isempty())
}
3,得到隊頂元素
//得到隊頂元素
public int gettop()
3,迴圈佇列
順序隊「頭刪尾插」容易產生「假溢位」
當尾指標已經到了陣列的上界,不能再有入隊操作,但其實陣列中還有空位置,這就叫「假溢位」。
所以我們將採用---迴圈佇列---來解決假溢位
在迴圈佇列中,空隊特徵是front=rear;隊滿時也會有front=rear;
解決方案:
人為浪費乙個單元,令隊滿特徵為front=(rear+1)%n;
空條件 : front = rear
隊滿條件: front = (rear+1) % n (n=allsize)
佇列長度:l=(n+rear-front)% n
迴圈佇列的操作-------
1,初始化
int elem;
int front;//隊首
int rear;//隊尾
int usedsize = 0;//當前迴圈佇列內部有效資料個數
int allsize = 10;
public queuelink()
public queuelink(int size)
2,隊滿//判斷是否為滿的方法
public boolean isfull()
3,入隊
public void push(int val)
this.elem[this.rear] = val;
this.rear = (this.rear+1) % this.allsize;
this.usedsize++;
}
4,隊空
public boolean isempty()
5,出隊
//出隊
public void pop()
this.elem[this.front] = -1;
this.front = (this.front+1) % this.allsize;
this.usedsize--;
}
6,得到隊頭元素
//得到隊頭元素
public int gettop()
return this.elem[this.front];
}
7,列印佇列元素
public void show()
system.err.println();
}
用兩個棧實現佇列 用兩個佇列實現棧
劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...
用佇列實現棧 用兩個棧實現佇列
用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。var cqueue function param value return this.stacka.push value return cqueue.prototype.deletehead function els...
用兩個棧實現佇列 用佇列實現棧
題目描述 示例 1 輸入 示例 2 輸入 思路 借用兩個棧,乙個為出棧,乙個為入棧,入棧只放入資料。當出棧為空時,將入棧中的資料全部放入到出棧中。class cqueue 時間複雜度o 1 void int value 時間複雜度o n intdeletehead int ret outstack....