循环数组实现队列

来源:互联网 发布:如何更新mac os系统 编辑:程序博客网 时间:2024/05/22 03:26

固定SIZE

头文件

#ifndef __QUEUE_H__#define __QUEUE_H__#include "stdafx.h"#include <windows.h>#include <iostream>using namespace std;#define  MAX_SIZE 5#define CREATE_THREAD_SAFE() \{ \if(m_bThreadSafe) \{ \m_Mutex = CreateMutex(NULL,FALSE, NULL); \} \}#define DESTROY_THREAD_SAFE() \{ \if(m_bThreadSafe) \{ \CloseHandle(m_Mutex); \} \}#define THREAD_SAFE_LOCK() \{ \if(m_bThreadSafe) \{ \WaitForSingleObject(m_Mutex, INFINITE); \} \}#define THREAD_SAFE_UNLOCK() \{ \if(m_bThreadSafe) \{ \ReleaseMutex(m_Mutex); \}\}class Queue{public:Queue(bool threadSafe = false);//Queue(int maxSize, bool threadSafe = false);int insert(int value);int pop();int size();void printQ();private:int m_nData[MAX_SIZE];bool m_bThreadSafe;int m_nFront;int m_nRear;int m_size;HANDLE m_Mutex;};#endif


cpp文件

Queue::Queue(bool threadSafe):m_bThreadSafe(threadSafe),m_nFront(0),m_nRear(0),m_size(0){CREATE_THREAD_SAFE();}int Queue::insert(int value){int retVal = -1;THREAD_SAFE_LOCK();if(size() == MAX_SIZE)//full{retVal =  -1;}else{m_nData[m_nRear] = value;m_nRear = (m_nRear+1)%MAX_SIZE;m_size++;retVal = 0;}THREAD_SAFE_UNLOCK();return retVal;}int Queue::pop(){int retVal = -1;THREAD_SAFE_LOCK();if(size() == 0)//empty{retVal = -1;}else{m_nFront = (m_nFront+1)%MAX_SIZE;m_size--;retVal = 0;}THREAD_SAFE_UNLOCK();return retVal;}int Queue::size(){return m_size;}void Queue::printQ(){THREAD_SAFE_LOCK();for(int i=0; i<size(); i++){printf("%d", m_nData[(i+m_nFront)%MAX_SIZE]);}printf("\n");THREAD_SAFE_UNLOCK();}

main函数

int _tmain(int argc, _TCHAR* argv[]){Queue q1(true);q1.insert(1);q1.printQ();q1.insert(2);q1.printQ();q1.insert(3);q1.printQ();q1.insert(4);q1.printQ();q1.insert(5);q1.printQ();q1.insert(6);q1.printQ();q1.pop();q1.printQ();q1.insert(7);q1.printQ();q1.pop();q1.printQ();q1.pop();q1.printQ();q1.pop();q1.printQ();q1.pop();q1.printQ();q1.pop();q1.printQ();system("pause");return 0;}



0 0
原创粉丝点击