顺序队列的数据结构如下:
typedef struct {
ElemType data[MaxSize];
int front,rear; //front队首指针,rear队尾指针
}SqQueue;
实现下列函数:
void InitQueue(SqQueue* &q); //初始化队列
void ClearQueue(SqQueue* &q); //清空队列
int QueueEmpty(SqQueue* q); //判断队列是否为空
int QueueLength(SqQueue* q); //求队列长度
int enQueue(SqQueue* &q,ElemType e); //元素入队
int deQueue(SqQueue* &q,ElemType e); //元素出队
void DispQueue(SqQueue* q); //输出队列
具体实现代码:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define ElemType int
#define MaxSize 5
#define SWAP(A,B) a^=b;b^=a;a^=b
#define GET_ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0]))
using namespace std;
typedef struct {
ElemType data[MaxSize];
int front,rear; //front队首指针,rear队尾指针
}SqQueue;
void InitQueue(SqQueue* &q); //初始化队列
void ClearQueue(SqQueue* &q); //清空队列
int QueueEmpty(SqQueue* q); //判断队列是否为空
int QueueLength(SqQueue* q); //求队列长度
int enQueue(SqQueue* &q,ElemType e); //元素入队
int deQueue(SqQueue* &q,ElemType e); //元素出队
void DispQueue(SqQueue* q); //输出队列
void InitQueue(SqQueue* &q){
q=(SqQueue *)malloc(sizeof(SqQueue));
q->front=q->rear=0;
}
void ClearQueue(SqQueue* &q){
free(q);
}
int QueueEmpty(SqQueue* q){
return (q->front==q->rear);
}
int QueueLength(SqQueue* q){
int count=0;
int k=q->rear;
int j=q->front;
while(k!=j){
j=(j+1)%MaxSize;
count++;
}
return count;
}
int enQueue(SqQueue* &q,ElemType e){
if(((q->rear+1)%MaxSize)==q->front)return 0;
else{
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e;
return 1;
}
}
int deQueue(SqQueue* &q,ElemType e){
if(q->rear==q->front)return -1;
else{
q->front=(q->front+1)%MaxSize;
e=q->data[q->front];
return 1;
}
}
void DispQueue(SqQueue* q){
int k=q->rear;
int j=q->front;
while(k!=j){
j=(j+1)%MaxSize;
cout<<q->data[j]<<" ";
}
cout<<endl;
}
int main(){
SqQueue* q=NULL;
int a[]={1,2,3,4};
InitQueue(q);
for(int i=0;i<GET_ARRAY_LENGTH(a);i++){
enQueue(q,a[i]);
DispQueue(q);
}
for(int i=0;i<GET_ARRAY_LENGTH(a);i++){
deQueue(q,a[i]);
DispQueue(q);
}
return 0;
}
运行结果: