使用兩個鍊錶實現棧

2021-09-02 18:52:22 字數 1799 閱讀 8375

用兩個佇列實現棧:

入棧的思路:就是把即將放入的資料放到存有資料的哪個佇列裡面去;

出棧的思路:就是先把有資料的那個佇列中所有的資料依次出隊,除過最後乙個元素外其他元素放到另乙個佇列中去,

然後把最後乙個元素出隊。(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...