知识框架
队列的顺序存储实现
#include <iostream>
using namespace std;
#define MaxSize 10
typedef struct {
int data[MaxSize];
int front,rear;
}SeQueue;
void InitQueue(SeQueue &Q){
Q.front = 0;
Q.rear = 0;
}
bool QueueEmpty(SeQueue Q){
return Q.front == Q.rear;
}
bool FullQueue(SeQueue Q){
return (Q.rear+1)%MaxSize == Q.front;
}
bool EnQueue(SeQueue &Q,int e){
if (FullQueue(Q)){
return false;
}
Q.data[Q.rear] = e;
Q.rear = (Q.rear+1)%(MaxSize);
return true;
}
bool DeQueue(SeQueue &Q,int &e){
if (QueueEmpty(Q)){
return false;
}
e = Q.data[Q.front];
Q.front = (Q.front+1)%MaxSize;
return true;
}
bool GetTop(SeQueue Q,int &e){
if (Q.front == Q.rear){
return false;
}
e = Q.data[Q.front];
return true;
}
int main() {
SeQueue Q;
InitQueue(Q);
for (int i = 0; ; ++i) {
if (FullQueue(Q)){
break;
}
EnQueue(Q,i);
}
int e;
for (int i = 0;; ++i) {
if (QueueEmpty(Q)){
break;
}
DeQueue(Q,e);
cout << e <<" ";
}
cout<<endl;
return 0;
}
队列的链式存储实现
#include <iostream>
using namespace std;
#define MaxSize 10
typedef struct {
int data[MaxSize];
int front,rear;
}SeQueue;
void InitQueue(SeQueue &Q){
Q.front = 0;
Q.rear = 0;
}
bool QueueEmpty(SeQueue Q){
return Q.front == Q.rear;
}
bool FullQueue(SeQueue Q){
return (Q.rear+1)%MaxSize == Q.front;
}
bool EnQueue(SeQueue &Q,int e){
if (FullQueue(Q)){
return false;
}
Q.data[Q.rear] = e;
Q.rear = (Q.rear+1)%(MaxSize);
return true;
}
bool DeQueue(SeQueue &Q,int &e){
if (QueueEmpty(Q)){
return false;
}
e = Q.data[Q.front];
Q.front = (Q.front+1)%MaxSize;
return true;
}
bool GetTop(SeQueue Q,int &e){
if (Q.front == Q.rear){
return false;
}
e = Q.data[Q.front];
return true;
}
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
typedef struct {
LinkNode *front,*rear;
}LinkQueue;
void Init(LinkQueue &Q){
Q.front=Q.rear=(LinkNode *) malloc(sizeof (LinkNode));
Q.front->next = NULL;
}
bool Empty(LinkQueue Q){
return Q.front == Q.rear;
}
void Init2(LinkQueue &Q){
Q.front = NULL;
Q.rear = NULL;
}
bool Empty2(LinkQueue Q){
return Q.front == NULL;
}
bool EnQueue(LinkQueue &Q,int e){
LinkNode *s = (LinkNode *) malloc(sizeof (LinkNode));
if (s == NULL){
return false;
}
s->data = e;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
return true;
}
bool EnQueue2(LinkQueue &Q,int e){
LinkNode *s = (LinkNode *) malloc(sizeof (LinkNode));
if (s == NULL){
return false;
}
s->data = e;
s->next = NULL;
if (Q.front == NULL){
Q.front = s;
Q.rear = s;
} else {
Q.rear->next = s;
Q.rear = s;
}
return true;
}
bool DeQueue(LinkQueue &Q,int &e){
if (Q.front->next == NULL){
return false;
}
LinkNode *p = Q.front->next;
Q.front->next = p->next;
e = p->data;
if (Q.rear == p){
Q.rear = Q.front;
}
free(p);
return true;
}
bool DeQueue2(LinkQueue &Q,int &e){
if (Q.front == NULL){
return false;
}
LinkNode *p = Q.front;
Q.front = p->next;
e = p->data;
if (Q.rear == p){
Q.rear = NULL;
Q.front = NULL;
}
free(p);
return true;
}
int main() {
LinkQueue Q;
Init(Q);
for (int i = 0; i < 8; ++i) {
EnQueue(Q,i);
}
int e;
while (!Empty(Q)){
DeQueue(Q,e);
cout<< e << " ";
}
return 0;
}