c++简单实现循环队列

时间:2022-11-08 20:30:22

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

实现的代码如下:

 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 }