队列是一种特殊的线性表,因此也可以分为顺序存储和链式存储。队列最突出的特点是先进先出。
一、顺序存储
新建一个类Queue,在Queue.h中:
#include"iostream"
using namespace std;
#define MaxSize 1024
#define ElementType int
// 顺序存储
class Queue
{
public:
Queue();
~Queue();
void MakeEmptyQ();
void AddQ(ElementType item);
ElementType DeleteQ();
int Length();
private:
ElementType Data[MaxSize];
int front; //头指针
int rear; //尾指针
};
在Queue.cpp中:
#include "Queue.h"
Queue::Queue()
{
}
Queue::~Queue()
{
}
//顺序存储:
void Queue::MakeEmptyQ() //工作队列,若是循环队列,要采用加1取余法
{
front = -1;
rear = -1;
}
void Queue::AddQ(ElementType item)
{
if (front == -1) front++;
if (rear == MaxSize - 1)cout << "error\n";
else
{
rear++;
Data[rear] = item;
}
}
ElementType Queue::DeleteQ()
{
ElementType tmp;
int i;
if (rear == -1) return -1;
else
{
tmp = Data[front];
for ( i = 0; i < rear; i++)
{
Data[i] = Data[i + 1];
}
rear--;
return tmp;
}
}
int Queue::Length()
{
return rear + 1;
}
在main.cpp中:
#include"Queue.h"
int main()
{
Queue Q;
Q.MakeEmptyQ();
Q.AddQ(1); Q.AddQ(2); Q.AddQ(3); Q.AddQ(4);
cout << Q.Length() << "\n";
cout<<Q.DeleteQ()<<"\n";
cout << Q.DeleteQ() << "\n";
cout << Q.DeleteQ() << "\n";
Q.AddQ(9); Q.AddQ(8); Q.AddQ(7);
cout << Q.DeleteQ() << "\n";
cout << Q.DeleteQ() << "\n";
cout << Q.Length() << "\n";
system("pause");
return 0;
}
运行结果:
二、链式存储
新建一个类Queue,在Queue.h中
#include"iostream"
using namespace std;
#define ElementType int
class Node
{
public:
ElementType Data;
struct Node * Next;
};
class Queue
{
public:
Queue();
~Queue();
void AddQ(ElementType item);
ElementType DeleteQ();
bool Empty();
private:
Node * rear; //队尾指针
Node * front; //对头指针
};
在Queue.cpp中:
#include "Queue.h"
Queue::Queue()
{
Node * temnode = new Node;
temnode->Next = nullptr;
front = temnode;
rear = temnode;
}
Queue::~Queue()
{
}
void Queue::AddQ(ElementType item)
{
Node * s= new Node;
s->Data = item;
s->Next = NULL;
rear->Next = s;
rear = s;
}
ElementType Queue::DeleteQ()
{
if (Empty()) return false;
ElementType data;
Node * denode=new Node;
denode = front->Next;
front->Next = denode->Next;
data = denode->Data;
delete denode;
return data;
}
bool Queue::Empty()
{
if (front == rear) return true;
return false;
}
在main.cpp中:
#include"Queue.h"
int main()
{
Queue Q;
Q.AddQ(1); Q.AddQ(2); Q.AddQ(3);
cout << Q.DeleteQ()<<"\n";
cout << Q.DeleteQ() << "\n";
Q.AddQ(4); Q.AddQ(5);
cout << Q.DeleteQ() << "\n";
cout << Q.DeleteQ() << "\n";
system("pause");
return 0;
}
运行结果: