首页 > 学院 > 开发设计 > 正文

leetcode: Implement Queue using Stacks

2019-11-10 17:56:03
字体:
来源:转载
供稿:网友

使用satck实现queue

我使用的是 单向链表 实现的queue.

考察的是基本的数据结构的实现。

为了实现pop 和push 操作,需要设计两个指针(我代码中成了首位两个节点),一个只想第一个元素,另一个只想最后一个元素,以便快速实现pop和push操作。

结构体Node中的默认构造函数,也算是一个知识点吧。

同一段代码,中午提交没通过,晚上一点没改再次提交竟然通过了。。。。真是没脾气。

发现一个问题,pop操作时,如果queue为空,应该返回false.

代码如下:

class MyQueue {public:    struct Node{        int data;        Node* ptr;        Node(const int x=0,Node* p=NULL):data(x),ptr(p){}    };    /** Initialize your data structure here. */    MyQueue() {        size=0;        head=new Node;        tail=new Node;        head->ptr=tail;        tail->ptr=head;       }       /** Push element x to the back of queue. */    void push(int x) {        if(empty()){            head->ptr=new Node(x,tail);            tail->ptr=head->ptr;        }        else{            tail->ptr->ptr=new Node(x,tail);            tail->ptr=tail->ptr->ptr;        }        ++size;    }       /** Removes the element from in front of queue and returns that element. */    int pop() {        int ret=head->ptr->data;        Node* tmp=head->ptr;        head->ptr=tmp->ptr;        delete tmp;        --size;        return ret;    }       /** Get the front element. */    int peek() {        return head->ptr->data;    }       /** Returns whether the queue is empty. */    bool empty() {        return size==0?true:false;    }   PRivate:    unsigned int size;    Node* head;    Node* tail;};/** * Your MyQueue object will be instantiated and called as such: * MyQueue obj = new MyQueue(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.peek(); * bool param_4 = obj.empty(); */

修改成指针之后:

class MyQueue{public:    struct Node{        int data;        Node* ptr;        Node(int x=0,Node* p=NULL):data(x),ptr(p){}    };        MyQueue(){        size=0;        head=NULL;        tail=NULL;            }    int pop()    {        if(empty())            return false;        int ret=head->data;        Node* tmp=head->ptr;        delete head;        --size;        head=tmp;        return ret;           }    void push(int x)    {        if(empty())        {            head=new Node(x,nullptr);            tail=head;        }        else        {            tail->ptr=new Node(x,nullptr);            tail=tail->ptr;        }        ++size;    }    int peek()    {        return head->data;    }       bool empty()    {        return size==0?true:false;    }private:    Node* head;    Node* tail;    unsigned int size;    };


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表