07_用兩個棧實現隊列

題目:用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數appendTail 和deleteHead,分別完成在隊列尾部插入結點和在隊列頭部刪除結點的功能。

思路:用兩個棧實現隊列,需要兩個棧Stack1和Stack2,push的時候直接push進Stack1。pop需要判斷Stack1和Stack2中元素的情況,Stack1空的話,直接從Stack2
pop,Stack1不空的話,把Stack1的元素push進入Stack2,然後pop Stack2的值。

Java版本:

import java.util.Stack;

public class Test {

    // <>指定泛型參數,java泛型參數只是使用一個大寫字母來定義
    // T 應填入一個類型,例如String。
    // 注意:類型參數只能代表引用型類型,不能是原始類型(像int,double,char的等)。
    // java的數據類型分基本數據類型(原始數據類型)和引用數據類型

    // 定義一個隊列,隊列裏元素是T類型的。裏面包含兩個棧,插入棧和彈出棧
    public static class Queue<T>{
        //插入棧,只用於插入的數據
        private Stack<T> stack1 =new Stack<>();
        //彈出棧,只用於彈出數據 
        private Stack<T> stack2 =new Stack<>();

        public Queue(){}

        public void appendTail(T t){
            stack1.add(t);
        }

        public T deleteHead(){
            // 先判斷彈出棧是否爲空,如果爲空就將插入棧的所有數據彈出棧
            // 並且將彈出的數據壓入彈出棧中
            if(stack2.size()<=0){
                while(stack1.size()>0)
                {
                    stack2.add(stack1.pop());
                }
            }   
        // 如果彈出棧中沒有數據就拋出異常
        if(stack2.size() == 0)
            throw new RuntimeException("No more element.");

        // 返回彈出棧的棧頂元素,對應的就是隊首元素。 
        return stack2.pop();
        }           
}

    public static void main(String[] args) {
        Queue<String> queue=new Queue<String>();
        queue.appendTail("abcd");
        queue.appendTail("你是誰?");
        queue.appendTail("123");
        queue.appendTail("+-");

        System.out.println(queue.deleteHead());
        System.out.println(queue.deleteHead());
        System.out.println(queue.deleteHead());
        System.out.println(queue.deleteHead());
    }
}

這裏寫圖片描述

Python版本:

# -*- coding:utf-8 -*-
class Queue():
    def __init__(self):
        self.stack1 = []
        self.stack2 = []

    def appendTail(self,t):
        self.stack1.append(t)

    def deleteHead(self):
        if(len(self.stack2) <= 0):
            while(len(self.stack1) > 0):
                self.stack2.append(self.stack1.pop())
        return self.stack2.pop()

queue = Queue()
queue.appendTail("abcd")
queue.appendTail("你是誰?")
queue.appendTail("123")
queue.appendTail("+-")

print(queue.deleteHead())
print(queue.deleteHead())
print(queue.deleteHead())
print(queue.deleteHead())

這裏寫圖片描述

發佈了53 篇原創文章 · 獲贊 15 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章