顺序循环队列
#include<bits/stdc++.h>
using namespace std;
typedef int Status;
typedef int QElemType;
#define OVERFLOW -1
#define ERROR 0
#define OK 1
#define MAXSIZE 100
typedef struct {
QElemType *base;
int front;
int rear;
} SqQueue;
Status InitQueue(SqQueue &queue) {
queue.base = new int[MAXSIZE];
if (!queue.base) {
return OVERFLOW;
}
queue.front = queue.rear = 0;
return OK;
}
Status QueueLength(SqQueue &queue) {
return (queue.rear - queue.front + MAXSIZE) % MAXSIZE;
}
Status EnQueue(SqQueue &queue, QElemType e) {
if ((queue.rear+1)%MAXSIZE == queue.front) {
return OVERFLOW;
}
queue.base[queue.rear] = e;
queue.rear = (queue.rear + 1) % MAXSIZE;
return OK;
}
Status DeQueue(SqQueue &queue) {
if ((queue.rear+1)%MAXSIZE == queue.front) {
return OVERFLOW;
}
QElemType e = queue.base[queue.front];
queue.front = (queue.front + 1) % MAXSIZE;
return e;
}
Status GetHead(SqQueue &queue) {
if (queue.front != queue.rear) {
return queue.base[queue.front];
}
}
int main() {
SqQueue test;
InitQueue(test);
EnQueue(test, 10);
EnQueue(test, 15);
EnQueue(test, 20);
cout << "队列长度为:" << QueueLength(test) << "\n";
cout << GetHead(test)<<" "<< GetHead(test)<<" "<< GetHead(test)<<" "<<"\n";
cout << DeQueue(test)<<" "<< DeQueue(test)<<" "<< DeQueue(test)<<" "<<"\n";
}
链队
#include<bits/stdc++.h>
using namespace std;
typedef int Status;
typedef int QElemType;
#define OVERFLOW -1
#define ERROR 0
#define OK 1
#define MAXSIZE 100
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &queue) {
queue.front = queue.rear = new QNode;
queue.front->next = NULL;
return OK;
}
Status EnQueue(LinkQueue &queue, QElemType e) {
QueuePtr temp = new QNode;
temp->data = e;
temp->next = NULL;
queue.rear->next = temp;
queue.rear = temp;
return OK;
}
Status DeQueue(LinkQueue &queue) {
if (queue.front == queue.rear) {
return OVERFLOW;
}
QElemType e = queue.front->next->data;
queue.front->next = queue.front->next->next;
if (queue.rear == queue.front) {
queue.front = queue.rear;
}
return e;
}
Status GetHead(LinkQueue &queue) {
if (queue.front != queue.rear){
return queue.front->next->data;
}
}
int main() {
LinkQueue test;
InitQueue(test);
EnQueue(test, 10);
EnQueue(test, 15);
EnQueue(test, 20);
cout << GetHead(test)<<" "<< GetHead(test)<<" "<< GetHead(test)<<" "<<"\n";
cout << DeQueue(test)<<" "<< DeQueue(test)<<" "<< DeQueue(test)<<" "<<"\n";
}
树下留言
LET’S TALK文字是一次相遇。很高兴听到你的声音。