顺序存储:
#include <iostream>
#define MAXSIZE 5//容量
using namespace std;
typedef int Datatype;
typedef class Node Queue;
class Node
{
public:
Node();
~Node() {};
void CreateQueue();//创建
int IsEmpty();//判断是否为空
int IsFull();//判断是否满
void AddQueue();//入列
void DeleteQueue();//出列
void TravalQueue();//遍历
private:
Datatype data[MAXSIZE];//存储队列
int front;//队头
int rear;//队尾
int size;//记录当前队列大小
};
//构造函数
Node::Node()
{
Datatype data = 0;
front = 0;
rear = 0;
size = 0;
}
//创建
void Node::CreateQueue()//队头、队尾初始化为-1
{
front = -1;
rear = -1;
size = 0;
return;
}
//判断是否为空
int Node::IsEmpty()
{
if (size==0)//队头和队尾相等
return 1;
else
return 0;
}
//判断是否满
int Node::IsFull()
{
if (size==MAXSIZE)
return 1;
else
return 0;
}
//入列
void Node::AddQueue()
{
if (IsFull())
cout << "队列已满" << endl;
else
{
cout << "输入入列值:";
rear++;
cin >> data[rear];
size++;
}
return;
}
//出列
void Node::DeleteQueue()
{
if (IsEmpty())
cout << "队列已空"<<endl;
else
{
cout << "出列的值为:" << data[front+1]<<endl;
front++;
size--;
}
return;
}
//遍历
void Node::TravalQueue()
{
if (IsEmpty())
cout << "队列为空" << endl;
else
{
cout << "当前队列为:";
int temp = front;//记录队头
while (temp != rear)
{
cout << data[temp+1] << " ";
temp++;
}
cout << endl;
}
return;
}
int main()
{
Queue q;
int i;
cout << "1.创建; 2.判断是否为空; 3.判断是否满; 4.入列; 5.出列; 6.遍历; 0.退出" << endl;
do
{
cout << "输入操作:";
cin >> i;
switch (i)
{
case 0:break;
case 1:q.CreateQueue(); break;
case 2:
if (q.IsEmpty())
cout << "队列为空" << endl;
else
cout << "队列不空" << endl;
break;
case 3:
if (q.IsFull())
cout << "队列满" << endl;
else
cout << "队列不满" << endl;
break;
case 4:q.AddQueue(); break;
case 5:q.DeleteQueue(); break;
case 6:q.TravalQueue(); break;
default:cout << "输入错误,请重新"; break;
}
} while (i != 0);
return 0;
}
运行:
链式存储:
#include <iostream>
using namespace std;
typedef class Node Queue;
typedef int Datatype;
//队列元素结点基类
class Node
{
public:
Datatype data;//存储数据
Queue* next;//指向下一个数据结点
};
//派生类
class QNode :public Node
{
public:
QNode();
~QNode() {};
void CreateQueue();//创建
int IsEmpty();//判断是否为空
void AddQueue();//插入
void DeleteQueue();//删除
void TravalQueue();//遍历
private:
Queue* front;//队头结点
Queue* rear;//队尾结点
};
//构造函数初始化
QNode::QNode()
{
front = NULL;
rear = NULL;
}
//创建
void QNode::CreateQueue()
{
front = NULL;
rear = NULL;
}
//判断是否为空
int QNode::IsEmpty()
{
if (front == NULL)//队头为空
return 1;
else
return 0;
}
//入列
void QNode::AddQueue()
{
Node* Q = new Node;//建立新的存储结点
Q->next = NULL;
cout << "输入要入列的值:";
cin >> Q->data;
if (rear == NULL)//当前队尾为空
{
rear = Q;//新结点设为第一个结点
front = Q;
}
else
{
rear->next = Q;//新结点入列
rear = Q;//队尾向后移
}
return;
}
//出列
void QNode::DeleteQueue()
{
Node* ptemp = front;//记录队头结点
if (IsEmpty())
{
cout << "队列已空" << endl;
return;
}
else if(front==rear)//只有一个元素
{
cout << "出列的值:" << front->data << endl;
front = NULL;
rear = NULL;
}
else
{
cout << "出列的值:" << front->data << endl;
front = front->next;//队头结点向后移
}
delete ptemp;
}
//遍历
void QNode::TravalQueue()
{
if (IsEmpty())
cout << "队列为空" << endl;
else
{
Node* ptemp = front;
cout << "当前队列为:";
while (ptemp != NULL)
{
cout << ptemp->data << " ";
ptemp = ptemp->next;
}
cout << endl;
}
}
int main()
{
QNode q;
int i;
cout << "1.创建; 2.判断是否为空; 3.入列; 4.出列; 5.遍历; 0.退出" << endl;
do
{
cout << "输入操作:";
cin >> i;
switch (i)
{
case 0:break;
case 1:q.CreateQueue(); break;
case 2:
if (q.IsEmpty())
cout << "队列为空" << endl;
else
cout << "队列不空" << endl;
break;
case 3:q.AddQueue(); break;
case 4:q.DeleteQueue(); break;
case 5:q.TravalQueue(); break;
default:cout << "输入错误,请重新"; break;
}
} while (i != 0);
return 0;
}
运行: