1. 程式人生 > >資料結構--雙棧佇列練習題

資料結構--雙棧佇列練習題

編寫一個類,只能用兩個棧結構實現佇列,支援佇列的基本操作(push,pop)。
給定一個操作序列ope及它的長度n,其中元素為正數代表push操作,為0代表pop操作,保證操作序列合法且一定含pop操作,請返回pop的結果序列。
測試樣例:
[1,2,3,0,4,0],6
返回:[1,2]

1,這樣不平衡

class TwoStack {
public:
    vector<int> twoStack(vector<int> ope, int n) {
        // write code here
        vector<int> result;
        for
(int i = 0; i < n; i++){ if (ope[i]>0) push(ope[i]); else{ result.push_back(pop()); } } return result; } //保證始終有一個棧是空的 //將stackPop中的全部資料要先匯入stackPush void push(int e){ stackPush.push(e); } //將stackPush中資料,要全部匯入stackPop中
//這樣的話,push和pop不平衡 int pop(){ if (!stackPop.empty()){ int temp = stackPop.top(); stackPop.pop(); return temp; } else{ while (!stackPush.empty()){ stackPop.push(stackPush.top()); stackPush.pop(); } int
temp = stackPop.top(); stackPop.pop(); return temp; } } bool empty(){ return (stackPop.empty() && stackPush.empty()); } stack<int> stackPush; stack<int> stackPop; };

解法2:

class TwoStack {
public:
    vector<int> twoStack(vector<int> ope, int n) {
        vector<int> result;
        for (int i=0; i<n; i++){
            if (ope[i] > 0)  push(ope[i]);
            else result.push_back( pop() );
        }

        return result;
    }

    stack<int> a;
    stack<int> b;

    void push(int val){
        while (!b.empty()){//把b中的資料全部倒入a
            a.push(b.top());
            b.pop();
        }
        a.push(val);
    }
    int pop(){
        //把a中的資料全部倒入b
        while (!a.empty()){
            b.push(a.top());
            a.pop();
        }
        int val = b.top();
        b.pop();
        return val;
    }
};

相關推薦

資料結構--佇列練習題

編寫一個類,只能用兩個棧結構實現佇列,支援佇列的基本操作(push,pop)。 給定一個操作序列ope及它的長度n,其中元素為正數代表push操作,為0代表pop操作,保證操作序列合法且一定含pop操

常見資料結構(一)-,佇列,堆,雜湊表

轉載:https://blog.csdn.net/u013063153/article/details/54667361?locationNum=8&fps=1 寫在前面 本文所有圖片均截圖自coursera上普林斯頓的課程《A

java資料結構——佇列

普通佇列是一端進,另一端出的FIFO形式,而雙端佇列就沒有這樣的限制級,也就是我們可以在佇列兩端進行插入或者刪除操作。接下來使用雙端連結串列來實現一個雙端佇列。 1、引進雙端連結串列 2、構

資料結構佇列的總結

在插入元素的時候首先判斷是否滿秩,刪除元素時判斷是否為空秩,順序表一類主要通過看實際長度 與分配長度大小進行判斷,連結串列一類主要通過指標大小進行判斷如top頭指標,佇列主要通過rear與 front是否相等及利用s標誌進行判斷。 一、順序表

15 API-集合(Collection(功能,迭代器),List(List特有迭代器,併發異常),常見資料結構圖示(,佇列,陣列,連結串列))&物件陣列

1:物件陣列(掌握) (1)陣列既可以儲存基本資料型別,也可以儲存引用型別。它儲存引用型別的時候的陣列就叫物件陣列。 (2)案例:用陣列儲存5個學生物件,並遍歷陣列。 學生的物件 public class Student { // 成員變數 private Stri

Python資料結構——佇列

雙端佇列(Deque),是一種類似於佇列的元素的有序集合。它擁有兩端,隊首和隊尾,並且元素保持在當前的位置。雙端佇列的一個不同點就是,新增和刪除元素的位置不受限制。新元素可以在隊首或者隊尾新增。同樣地,雙端佇列中的元素可以從兩端彈出。在某種意義上,這種混合的線性結構同時具有棧和

資料結構佇列相關練習題:判斷有效的括號

給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。 有效字串需滿足: 左括號必須用相同型別的右括號閉合。 左括號必須以正確的順序閉合。 注意空字串可被認為是有效字串。 具體實現程式碼如下: #pragma once #incl

三、資料結構演算法-佇列、優先佇列佇列

## 一、Stack (棧) ### 1、資料結構   Stack是棧。它的特性是:**先進後出(FILO, First In Last Out) 後進先出(Last in - First out)**。java工具包中的Stack是繼承於Vector(向量佇列)的,由於Vector是通過陣列實現的,這就意味

【12】python 資料結構模擬、佇列資料結構模擬

一、壓棧操作模擬 #__author:"吉*佳" #date: 2018/10/21 0021 #function:棧 # 棧:即是先進後出的一種資料結構 # (1)模擬壓棧操作 stack=[] flag=True while flag: temp = input("請輸入壓棧元素[

Python資料結構之: 佇列

棧(stacks) 是一種只能通過訪問其一端來實現資料儲存與檢索的線性資料結構,具有後進先出(last in first out,LIFO)的特徵 stack = [] stack.append("A") #A入棧 stack.append("B") #B入棧 st

資料結構筆記-佇列python實現

概述 棧與佇列是程式設計中被廣泛應用的兩種重要的資料結構,都是在特定範圍的儲存單元記憶體儲資料,這些資料都可以被重新取出使用,與線性表相比,他們的插入和刪除受到更多的約束,固又稱限定性的線性表結構。他們是最簡單的快取結構,他們只支援資料項的儲存與訪問,不支援資料項之間的任何關係。因此,這兩種

java版資料結構與演算法—佇列、兩個實現一個佇列

/** * 佇列:先進先出 */ class MyQueue { int a[]; int maxSize; //大小 int front; //開頭 int rear; //結尾 int nItems; //元素個數 //初始化

資料結構佇列 Part1:的建立與相關函式

First.棧(Stack) 定義:後進先出的線性表 操作: #include<stack> 標頭檔案 stack<int> s;      建立int型別的棧s s.push(x);         &n

資料結構佇列) java實現

棧的相關定義 package StackDef; import java.util.Arrays; import java.util.EmptyStackException; /** * 通過陣列模擬棧 * @author tian * */ public cla

資料結構佇列

棧和佇列是兩種重要的線性結構。從資料結構角度來看,棧和佇列也是線性表,它們是操作受限的線性表,被稱為限定性的資料結構。 棧(Stack) 棧是限定僅在表尾進行插入或刪除操作的線性表。 表尾端被稱為棧頂(top),表頭端稱為棧底(bottom),不含元素的空表稱為空棧。

常見的資料結構佇列、陣列、連結串列和紅黑樹)

(一)棧 棧:stack,又稱堆疊,它是運算受限的線性表,其限制是僅允許在標的一端進行插入和刪除操作,不允許在其 他任何位置進行新增、查詢、刪除等操作。 簡單的說:採用該結構的集合,對元素的存取有如下的特點先進後出(即,存進去的元素,要在後它後面的元素依次取出後,才能取出該元素)。例如,子彈

資料結構的儲存結構(二)

雙端棧 雙端棧是為了更有效的利用棧的空間而產生的。 雙端棧是一種特殊的順序棧。 雙端棧適用於一組互補的資料。 雙端棧兩端為底,2個整形表示棧頂指標。 程式碼收穫 主要還是弄清雙端棧的結構。 棧的歸檔 #include <stdio.h> #

python資料結構佇列

1.功能實現 之前文章有,可以點開看看 棧 佇列 2.應用(1)括號匹配及字尾表示式 class Solution(object): def isValid(self, s): """ :type s: str :rtype

資料結構實驗---佇列

#include<stdio.h> #include<stdlib.h> #define N 105 int a[N]; struct node { int data; n

資料結構——入,出佇列相關操作(C語言實現)

閱讀過程之中可能會花費比較多的時間:建議直接翻到最後,有完整的程式碼可以使用 程式準備工作 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include<proc