用兩個佇列實現棧:
入棧的思路:就是把即將放入的資料放到存有資料的哪個佇列裡面去;
出棧的思路:就是先把有資料的那個佇列中所有的資料依次出隊,除過最後乙個元素外其他元素放到另乙個佇列中去,
然後把最後乙個元素出隊。(front+1)% 佇列的長度==rear時表示佇列中只有乙個資料;
//佇列類
class queue
public queue()
public int getelem()
//得到佇列大小
public int getsize()
//得到頭指標
public int getfront()
//得到尾指標
public int getrear()
//是否滿
public boolean isfull()
//入隊;
public void push(int val)
elem[rear] = val;
rear = (this.rear + 1) % elem.length;
}//是否空
public boolean isempty()
//出隊
public void pop()
int num = elem[front];
elem[front] = -1;
front = (front + 1) % elem.length;
}//得到front的節點內容
public int getfrontdata()
//列印函式
public void show()
system.out.println();
}}//用兩個佇列實現棧
/* * 入棧的思路:就是把即將放入的資料放到存有資料的哪個佇列裡面去;
* 出棧的思路:就是先把有資料的那個佇列中所有的資料依次出隊,除過最後乙個元素外其他元素放到另乙個佇列中去,
* 然後把最後乙個元素出隊。(front+1)% 佇列的長度==rear時表示佇列中只有乙個資料;
* */
class stack
private queue emptyqueue;
private queue notemptyqueue;
//private void fun() else if (!queue1.isempty() && queue2.isempty()) else
}//入棧
public void push(int val)
// 出棧
public void pop()
//把這個佇列的元素放到另乙個佇列然後出隊,留最後乙個節點
while (((notemptyqueue.getfront()+1)%notemptyqueue.getsize() !=notemptyqueue.getrear()))
notemptyqueue.pop(); //把目標節點出隊
}//得到棧頂元素
public int gettop()
return notemptyqueue.getrear()-1>=0 ? notemptyqueue.getelem()[notemptyqueue.getrear()-1] : notemptyqueue.getelem()[notemptyqueue.getsize()-1];
}//列印函式
public void show()
system.out.println( );
}}
兩個棧實現佇列 兩個佇列實現棧
1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...
兩個棧實現佇列,兩個佇列實現棧
include include include using namespace std 使用兩個棧實現佇列,實現了push,pop,front操作 其中棧s2是輔助棧,push直接在s1中插入 pop從s2中出棧,如果s2是空的,將s1倒進s2,然後再出棧,這樣減少了倒棧次數,比較高效。front就...
兩個棧實現佇列 兩個佇列實現棧
一 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。二 1 自己 基本思路 乙個棧用於壓縮,乙個專門用於彈出。因為棧是先進後出,所有的元素入棧再出棧,再入棧就可以將順序調整過來。但是沒有想到優化。class solution int pop int tem...