07_用两个栈实现队列

来源:互联网 发布:云计算应用迁移方法 编辑:程序博客网 时间:2024/06/05 04:08

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数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())

这里写图片描述

0 0
原创粉丝点击