运用数组结构来构建的线性队列就是顺序队列。
本例实现了顺序队列的入队、出队、判断队空、初始化队列、打印队列等操作。
#include<iostream>
using namespace std;
const int m=1000;
struct queue{
int data[m];
int front;
int rear;
};
void enqueue(queue &Q,int x);
int delqueue(queue &Q);
bool queueempty(queue Q);
void initqueue(queue &Q);
void printqueue(queue Q);
int main(){
queue Q;
/*以下是测试代码
initqueue(Q);
cout<<queueempty(Q)<<endl;
enqueue(Q,1);
enqueue(Q,2);
printqueue(Q);
cout<<delqueue(Q)<<endl;
printqueue(Q);
*/
return 0;
}
void enqueue(queue &Q,int x){
if((Q.rear+1)%m==Q.front) printf("队满\n");
else{
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%m;
}
}
int delqueue(queue &Q){
int x=Q.data[Q.front];
Q.front=(Q.front+1)%m;
return x;
}
bool queueempty(queue Q){
if(Q.front==Q.rear) return true;
else return false;
}
void initqueue(queue &Q){
Q.front=0;
Q.rear=Q.front;
}
void printqueue(queue Q){
for(int i=Q.front;i!=Q.rear;i++){
if(i>=m) i=i-m;
printf("%d",Q.data[i]);
}
printf("\n");
}
运用链式结构来构建的线性队列就是链队列。
本例实现了链队列的创建、出队、入队、打印队列、判断队空等操作。
#include<bits/stdc++.h>
using namespace std;
struct Node{
int Data;
struct Node *Next;
};
struct QNode{
struct Node *rear;
struct Node *front;
};
typedef struct QNode *Queue;
Queue CreateQueue();
int DeleteQ(Queue PtrQ);
void InsertQ(int item,Queue PtrQ);
void Print(Queue PtrQ);
bool IsEmpty(Queue Q);
int main()
{
/*以下是测试代码
Queue PtrQ=CreateQueue();
Print(PtrQ);
InsertQ(1,PtrQ);
InsertQ(2,PtrQ);
InsertQ(3,PtrQ);
Print(PtrQ);
DeleteQ(PtrQ);
Print(PtrQ);
InsertQ(1,PtrQ);
Print(PtrQ);
DeleteQ(PtrQ);
DeleteQ(PtrQ);
DeleteQ(PtrQ);
Print(PtrQ);
*/
return 0;
}
Queue CreateQueue(){
Queue PtrQ;
PtrQ=(Queue)malloc(sizeof(struct QNode));
struct Node *rear;
struct Node *front;
rear =(Node*)malloc(sizeof(struct Node));
rear=NULL;
front =(Node*)malloc(sizeof(struct Node));
front=NULL;
PtrQ->front=front;
PtrQ->rear=rear;
return PtrQ;
};
int DeleteQ(Queue PtrQ){
struct Node *FrontCell;
int FrontElem;
if(IsEmpty(PtrQ)){
printf("队列空");
return 0;
}
FrontCell=PtrQ->front;
if(PtrQ->front==PtrQ->rear)
PtrQ->front=PtrQ->rear=NULL;
else{
PtrQ->front=PtrQ->front->Next;
}
FrontElem=FrontCell->Data;
free(FrontCell);
return FrontElem;
}
void InsertQ(int item,Queue PtrQ){
struct Node *FrontCell;
FrontCell=(Node*)malloc(sizeof(struct Node));
FrontCell->Data=item;
FrontCell->Next=NULL;
if(IsEmpty(PtrQ)){
PtrQ->front=FrontCell;
PtrQ->rear=FrontCell;
}
else{
PtrQ->rear->Next=FrontCell;
PtrQ->rear=FrontCell;
}
};
void Print(Queue PtrQ) {
struct Node *Q1;
Q1 = PtrQ->front;
if (Q1 == NULL) {
printf("NULL\n");
return;
}
while (Q1 != PtrQ->rear) {
printf("%d ", Q1->Data);
Q1 =Q1->Next;
}
printf("%d", Q1->Data);
putchar('\n');
}
bool IsEmpty(Queue Q){
return(Q->front==NULL);
};