zoukankan      html  css  js  c++  java
  • 【Weiss】【第03章】练习3.25:数组模拟队列

    【练习3.25】

    编写实现队列的例程,使用

    a.链表

    b.数组

    Answer:

    在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以。

    数组模拟队列和链表的两点小不同是:

    ①、数组空间有限,入队需要检测数组是否已经满

    ②、数组经过几次操作后,rear可能绕回front前面,所以许多操作都要用模来实现。

    测试代码:

     1 #include <iostream>
     2 #include "queue.h"
     3 using namespace std;
     4 using namespace queue;
     5 template class Queue<int>;
     6 int main(void)
     7 {
     8     Simu_Queue<int> test(6);
     9     //测试插入
    10     test.enqueue(2);
    11     test.enqueue(3);
    12     test.enqueue(5);
    13     test.enqueue(7);
    14     test.enqueue(11);
    15     test.enqueue(13);
    16     test.enqueue(17);
    17     test.traverse();
    18     cout << endl;
    19     //测试删除
    20     test.dequeue();
    21     test.dequeue();
    22     test.dequeue();
    23     test.traverse();
    24     cout << endl;
    25     //测试绕数组遍历
    26     test.enqueue(17);
    27     test.enqueue(19);
    28     test.enqueue(23);
    29     test.traverse();
    30     cout << endl;
    31 
    32     system("pause");
    33 }
    View Code

    实现代码:

     1 //练习3.25新增,用数组模拟队列
     2 template <typename T> class Simu_Queue
     3 {
     4 public:
     5     Simu_Queue() :head(nullptr), front(0), rear(0), size(0){}
     6     Simu_Queue(unsigned int _maxsize) :front(0), rear(0), maxsize(_maxsize){ head = new T[maxsize + 1]; }
     7     Simu_Queue(const Simu_Queue& another)
     8     {
     9         front = another.front;
    10         rear = another.rear;
    11         maxsize = another.maxsize;
    12         head = new T[maxsize + 1];
    13         for (unsigned i = 0; i < maxsize + 1; ++i)
    14             head[i] = another.head[i];
    15     }
    16     ~Simu_Queue()
    17     { 
    18         delete[] head; 
    19         front = rear = maxsize = 0;
    20         head = nullptr;
    21     }
    22     Simu_Queue& operator=(const Simu_Queue& another)
    23     {
    24         if (this != &another)
    25         {
    26             delete[] head;
    27             front = another.front;
    28             rear = another.rear;
    29             maxsize = another.maxsize;
    30             head = new T[maxsize + 1];
    31             for (unsigned i = 0; i < maxsize + 1; ++i)
    32                 head[i] = another.head[i];
    33         }
    34     }
    35 public:
    36     //返回最大元素量
    37     unsigned int size()const{ return maxsize; }
    38     //返回当前元素量
    39     unsigned int length()const{ return front <= rear ? rear - front : rear + maxsize + 1 - front; }
    40     //判断是否为空
    41     bool empty()const{ return front == rear; }
    42     //入队
    43     bool enqueue(const T &item)
    44     {
    45         if ((rear + 1) % (maxsize + 1) != front)
    46         {
    47             head[rear] = item;
    48             rear = (rear + 1) % (maxsize + 1);
    49             return true;
    50         }
    51         return false;
    52     }
    53     //出队
    54     bool dequeue()
    55     {
    56         if (rear != front)
    57         {
    58             front = (front + 1) % (maxsize + 1);
    59             return true;
    60         }
    61         return false;
    62     }
    63     //输出队列元素
    64     void traverse()const
    65     {
    66         unsigned int temp = front;
    67         while (temp != rear)
    68         {
    69             cout << " " << head[temp] << flush;
    70             temp = (temp + 1) % (maxsize + 1);
    71         }
    72     }
    73 private:
    74     T* head = nullptr;
    75     unsigned int front;
    76     unsigned int rear;
    77     unsigned int maxsize;
    78 };
  • 相关阅读:
    475. Heaters
    69. Sqrt(x)
    83. Remove Duplicates from Sorted List Java solutions
    206. Reverse Linked List java solutions
    100. Same Tree Java Solutions
    1. Two Sum Java Solutions
    9. Palindrome Number Java Solutions
    112. Path Sum Java Solutin
    190. Reverse Bits Java Solutin
    202. Happy Number Java Solutin
  • 原文地址:https://www.cnblogs.com/catnip/p/4355061.html
Copyright © 2011-2022 走看看