C# · 12月 20, 2021

数据结构探险(一)——栈

FIFO

普通队列

循环队列

c++实现循环队列

#ifndef MYQUEUE_H

#define MYQUEUE_H

/****************************************/

/*环形队列C++实现*/

/****************************************/

class MyQueue

{

public:

MyQueue(int queueCapacity); //InitQueue(&Q)

virtual ~MyQueue(); //DestroyQueue(&Q)

void ClearQueue(); //ClearQueue(&Q)

bool QueueEmpty() const; //QueueEmpty(Q)

bool QueueFull() const;

int QueueLength() const; //QueueLength(Q)

bool EnQueue(int element); //EnQueue(&Q,element)

bool DeQueue(int &element); //DeQueue(&Q,&element)

void QueueTraverse(); //QueueTraverse(Q,visit())B

private:

int *m_pQueue;//队列数组指针

int m_iQueueLen;//队列元素个数

int m_iQueueCapacity;//队列数组容量

int m_iHead;

int m_iTail;

};

#endif

#include

#include

#include”MyQueue.h”

#include

using namespace std;

MyQueue::MyQueue(int queueCapacity)

{

m_iQueueCapacity =queueCapacity;

m_pQueue = new int[m_iQueueCapacity];

ClearQueue();

}

MyQueue::~MyQueue()

{

delete []m_pQueue;

m_pQueue=NULL;

}

void MyQueue::ClearQueue()

{

m_iHead=0;

m_iTail=0;

m_iQueueLen=0;

}

bool MyQueue::QueueEmpty() const

{

if(m_iQueueLen==0)

return true;

else

return false;

//return m_iQueueLen==0?true:false;

}

int MyQueue::QueueLength() const

{

return m_iQueueLen;

}

bool MyQueue::QueueFull() const

{

if(m_iQueueCapacity==m_iQueueLen)

return true;

else

return false;

}

bool MyQueue::EnQueue(int element)

{

if(QueueFull())

{

return false;

}

else

{

m_pQueue[m_iTail]=element;

m_iTaiL++;

m_iTail=m_iTail%m_iQueueCapacity;

m_iQueueLen++;

return true;

}

}

bool MyQueue::DeQueue(int &element)//element必须是引用才可以带回值

{

if(QueueEmpty())

{

return false;

}

else

{

element=m_pQueue[m_iHead];

m_iHead++;

m_iHead=m_iHead%m_iQueueCapacity;

m_iQueueLen–;

return true;

}

}

void MyQueue::QueueTraverse()

{

for(int i=m_iHead;i<m_iQueueLen;i++)//从队列头遍历

{

cout<<m_pQueue[i%m_iQueueCapacity]<<endl;

}

}

#include

#include

#include”MyQueue.h”

#include”MyQueue.cpp”

/****************************/

/* 实现环形队列 */

/****************************/

using namespace std;

int main(void)

{

MyQueue *p =new MyQueue(4);

p->EnQueue(10);

p->EnQueue(12);

p->EnQueue(16);

p->EnQueue(18);

p->EnQueue(20);

p->QueueTraverse();

int e=0;

p->DeQueue(e);

cout<<endl;

cout<<e<<endl;

delete p;

p=NULL;

system(“pause”);

return 0;

}

当存入的数据不是int,而是其他复杂数据类型时