队列的顺序存储
#include<iostream>
using namespace std;
#define MaxSize 10
#define ERROR 0
#define TRUE 1
typedef int ElemType;
typedef struct QNode
{
ElemType data[MaxSize];
int rear;
int front;
}QNode;
void AddQ(QNode* PtrQ,ElemType item)//进入队列
{
if((PtrQ->rear+1)%MaxSize==PtrQ->front)
{
cout<<"队列满";
return ;
}
PtrQ->rear++;
PtrQ->data[PtrQ->rear]=item;
}
ElemType DeleteQ(QNode* PtrQ)//出队列
{
if(PtrQ->front==PtrQ->rear)
{
cout<<"队列空";
return ERROR;
}
else
{
PtrQ->front++;
return PtrQ->data[PtrQ->front];
}
}
队列的链式存储
#include <iostream>
using namespace std;
#define ERROR 0
#define TRUE 1;
#define MaxSize 10;
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node *next;
} Node;
typedef struct QNode {
struct Node *rear;
struct Node *frond;
} QNode;
bool IsEmpty(QNode *PtrQ) {//判断是否是空队列
return (PtrQ->frond == NULL);
}
ElemType DeleteQ(QNode *PtrQ) { //出队列,头指针往前移
Node *FrondCell = new Node;
ElemType FrondElem;
if (PtrQ->frond == PtrQ->rear) {
cout << "队列为空";
return ERROR;
}
FrondCell = PtrQ->frond;
if (PtrQ->frond == PtrQ->rear)
PtrQ->frond = PtrQ->rear = NULL;
else
PtrQ->frond = PtrQ->frond->next;
FrondElem = FrondCell->data;
delete FrondCell;
return FrondElem;
}
void AddQ(QNode *PtrQ, ElemType item) { //入队
Node *temp = new Node;
temp->next = NULL;
temp->data = item;
if (PtrQ->frond == NULL) {//如果队列为空,需要修改头指针
PtrQ->frond = temp;
PtrQ->rear = temp;
return ;
}
PtrQ->rear->next = temp;
PtrQ->rear = temp;
}
void DispQ(QNode *PtrQ) {
Node *p = PtrQ->frond;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
}
int main() {
QNode *PtrQ = new QNode;
PtrQ->frond = PtrQ->rear = NULL;
for (int i = 1; i <= 10; i++)
AddQ(PtrQ, i);
DispQ(PtrQ);
cout << endl;
cout << DeleteQ(PtrQ) << endl;
DispQ(PtrQ);
}