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 }