循环队列的顺序存储
初始时队列为空,front和rear指向同一位置。
front为头指针,指向队列头部元素,rear为尾指针,指向队列尾部元素的下一个位置。
队列满时为图中d2
#include<iostream>
#define MAX 50
using namespace std;
//循环队列
typedef struct{
int data[MAX];
int front,rear;
}SqQueue;
//初始化队列,Q.rear与Q.front指向同一位置
void InitQueue(SqQueue &Q){
Q.rear = Q.front = 0;
}
//循环队列为空时Q.rear == Q.front
bool isEmpty(SqQueue Q){
if(Q.rear == Q.front) return true;
else return false;
}
bool EnQueue(SqQueue &Q,int e){
//判断循环队列是否已满
if((Q.rear + 1) % MAX == Q.front) return false;
//从队列尾部插入元素
Q.data[Q.rear] = e;
//尾部指针后移
Q.rear = (Q.rear + 1) % MAX;
return true;
}
bool DeQueue(SqQueue &Q,int &e){
//判断队列是否为空
if(isEmpty(Q)) return false;
e = Q.data[Q.front];
Q.front = (Q.front + 1) % MAX;
return true;
}
int main(){
SqQueue Q;
InitQueue(Q);
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);
EnQueue(Q,4);
EnQueue(Q,5);
int e;
DeQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
DeQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
DeQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
DeQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
DeQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
return 0;
}
带有头结点的链式队列存储实现
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct LinkNode{
int data;
struct LinkNode* next;
}LinkNode;//队列中的结点
typedef struct{
LinkNode *front,*rear;
}LinkQueue;//队列
void InitLinkQueue(LinkQueue &Q){
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
Q.rear->next = NULL;
}
bool isEmpty(LinkQueue Q){
if(Q.rear == Q.front) return true;
return false;
}
//带有头结点的链式队列入队
void EnLinkQueue(LinkQueue &Q,int e){
LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = e;
s->next = Q.rear->next;
Q.rear->next = s;
Q.rear = s;
}
//出队列
bool DeLinkQueue(LinkQueue &Q,int &e){
if(isEmpty(Q)) return false;
LinkNode *p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(p == Q.rear) Q.rear = Q.front;//只剩余一个结点时,删除后链式队列为空
free(p);
return true;
}
int main(){
LinkQueue Q;
InitLinkQueue(Q);
EnLinkQueue(Q,1);
EnLinkQueue(Q,2);
EnLinkQueue(Q,3);
EnLinkQueue(Q,4);
EnLinkQueue(Q,5);
int e;
DeLinkQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
DeLinkQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
DeLinkQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
DeLinkQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
DeLinkQueue(Q,e);
cout<<"元素"<<e<<"出队列"<<endl;
return 0;
}
如有问题欢迎指出╭(╯^╰)╮