首页 > 代码库 > c++简单实现循环队列

c++简单实现循环队列

栈的数据结构是先进后出,而队列的数据结构就是 一个出口一个入口入口只能入队,出口只能出队

实现的代码如下:

 1 /*
 2 循环静态队列实现 2017年8月5日07:50:58
 3 */
 4 #ifndef __QUEUE_H__
 5 #define __QUEUE_H__
 6 #include <Windows.h>
 7 class Queue
 8 {
 9 public:
10     Queue();            //无参构造
11     Queue(DWORD);        //有参构造
12     ~Queue();            //析构
13     BOOL push(UINT);    //入队
14     BOOL pop(UINT&);    //出队
15     void traverse();    //遍历
16     BOOL isEmpty();        //是否为null
17     BOOL isFull();        //是否已满
18 private:
19     DWORD m_qUeuesize;    //队列的数组长度
20     DWORD m_front;    //队列第一个元素索引
21     DWORD m_rear;    // 队列下一个可用元素索引
22     PDWORD m_pTr;    //元素的指针 
23 };
24 Queue::Queue()
25     :m_qUeuesize(6),
26     m_front(NULL),
27     m_rear(NULL)
28 {
29     m_pTr = new DWORD[m_qUeuesize];
30     if(!m_pTr)return;
31     ZeroMemory(m_pTr,sizeof(DWORD)*m_qUeuesize);
32 }
33 Queue::Queue(DWORD dwSize)
34     :m_qUeuesize(dwSize),
35     m_front(NULL),
36     m_rear(NULL)
37 {
38     m_pTr = new DWORD[m_qUeuesize];
39     if(!m_pTr)return;
40     ZeroMemory(m_pTr,sizeof(DWORD)*m_qUeuesize);
41 }
42 Queue::~Queue()
43 {
44     if(m_pTr)
45         delete [] m_pTr;
46 }
47 BOOL Queue::push(UINT Element)
48 {
49     if (isFull())
50     {
51         //队列已满 入队失败
52         return FALSE;
53     }else
54     {
55         m_pTr[m_rear] = Element;
56         m_rear = (m_rear+1) % m_qUeuesize;
57         return TRUE;
58     }
59 }
60 BOOL Queue::pop(UINT& Element)
61 {
62     if (isEmpty())
63     {
64         //队列是null的出队失败
65         return FALSE;
66     }else
67     {
68         Element = m_pTr[m_front];    //先把要出队的数据返回去
69         m_front = (m_front+1) % m_qUeuesize;
70     }
71     return TRUE;
72 }
73 BOOL Queue::isEmpty()
74 {
75     if (m_front == m_rear)
76         return TRUE;
77     else
78         return FALSE;
79 }
80 BOOL Queue::isFull()
81 {
82     if((m_rear+1) % m_qUeuesize == m_front)
83         return TRUE;
84     else
85         return FALSE;
86 }
87 void Queue::traverse()
88 {
89     DWORD dwTempIndex = m_front;
90     while(m_rear!=dwTempIndex)
91     {
92         printf("%d\t",m_pTr[dwTempIndex]);
93         dwTempIndex = (dwTempIndex + 1) % m_qUeuesize;
94     }
95     printf("\r\n");
96 }
97 #endif    //__QUEUE_H__

演示代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include "Queue.h"
 4 int main(void)
 5 {
 6     UINT m_elem = NULL;
 7     Queue * tempPtr = new Queue(10);
 8     if (tempPtr->isEmpty())
 9     {
10         printf("队列是null的\r\n");
11     }
12     tempPtr->push(1);
13     tempPtr->push(2);
14     tempPtr->push(3);
15     tempPtr->push(4);
16     tempPtr->push(5);
17     if(tempPtr->isFull())
18     {
19         printf("队列已满\r\n");
20     }else
21     {
22         tempPtr->push(6);
23     }
24     tempPtr->traverse();
25     tempPtr->pop(m_elem);
26     printf("m_elem:%d\r\n",m_elem);
27     tempPtr->traverse();
28     delete tempPtr;
29     system("pause");
30     return 0;
31 }

 

c++简单实现循环队列