• 栈与队列实现


    围绕两点,加深对栈与队列的理解

    1 如何用两个栈实现一个队列

    2 如何用两个队列实现一个栈

    栈与队列 C++ 简易实现

      1 typedef int DataType;
      2 //简易栈
      3 class stack
      4 {
      5 private:
      6     enum {size=10};
      7     DataType element[size];
      8     int top; //指向栈顶
      9 public:
     10     stack():top(0) {}
     11     bool empty() { return top == 0; }
     12     bool full() { return top == size; }
     13     bool push (const DataType data);
     14     const DataType & pop();
     15 };
     16 bool stack::push (const DataType data)
     17 {
     18     if (full())
     19     {
     20         return false;
     21     }
     22     element[top++] = data;
     23     return true;
     24 }
     25 const DataType & stack::pop()
     26 {
     27     if (empty())
     28     {
     29         return -1;
     30     }
     31     return    element[--top];    
     32 }
     33 //简易队列
     34 class Queue
     35 {
     36 private:
     37     struct Node
     38     {
     39         DataType data;
     40         Node * next;
     41     };
     42     Node * front; //队头
     43     Node * rear;  //队尾
     44     int length;
     45     const int qsize;
     46     Queue(const Queue & q):qsize(0) {}  //防止滥用拷贝,与赋值
     47     Queue & operator=(const Queue & q) { return *this; }
     48 public:
     49     Queue(int qs);
     50     ~Queue();
     51     bool empty()const        { return front == rear;}
     52     bool full()const        { return length == qsize;}
     53     int getlength()const    { return length;}
     54     bool enqueue(const DataType &data);
     55     bool dequeue();
     56 };
     57 Queue::Queue(int qs):qsize(qs),length(0)
     58 {
     59     front = new Node;
     60     front->next = NULL;
     61     rear = front;
     62 }
     63 Queue::~Queue()
     64 {
     65     for (Node *p = front; p != NULL; )
     66     {
     67         Node *pTemp = p->next;
     68         delete p;
     69         p = pTemp;
     70     }
     71     front = rear = NULL;
     72 }
     73 bool Queue::enqueue(const DataType &data)
     74 {
     75     if (full())
     76     {
     77         return false;
     78     }
     79     Node *p = new Node;
     80     p->data = data;
     81     p->next = NULL;
     82     rear->next = p;
     83     rear = p;
     84     ++length;
     85     return true;
     86 }
     87 bool Queue::dequeue()
     88 {
     89     if (empty())
     90     {
     91         return false;
     92     }
     93     Node *p = front->next->next;
     94     delete front->next;
     95     front->next = p;
     96     if (p == NULL)
     97     {
     98         rear = front;
     99     }
    100     --length;
    101     return true;
    102 }
  • 相关阅读:
    网络编程定时器一:使用升序链表
    木秀林网,网站专注于消息队列技术的研究
    Disruptor Ringbuffer
    Elasticsearch( 插件开发)
    Elasticsearch源码分析(一)启动流程 ModuleBuilder injector
    NativeScriptEngineService 被调用流程
    JAX-RS Resteasy
    gradle eclipse 配置
    maven repository 配置
    Eclipse中部署ES源码运行
  • 原文地址:https://www.cnblogs.com/sevenPP/p/3667773.html
Copyright © 2020-2023  润新知