標籤:std [] print end style clu 入口 rom index
棧的資料結構是先進後出,而隊列的資料結構就是 一個出口一個入口入口只能入隊,出口只能出隊
實現的代碼如下:
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(); //是否為null17 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 }else54 {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 }else67 {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 else78 return FALSE;79 }80 BOOL Queue::isFull()81 {82 if((m_rear+1) % m_qUeuesize == m_front)83 return TRUE;84 else85 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 }else21 {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++簡單實現迴圈隊列