顺序表:
#pragma once
typedef char ElemType;
#define QueueSize 100
typedef struct Queue {
ElemType queue[QueueSize];
int front, rear;
}SeqQueue;
void InitQueue(SeqQueue *Q)
{
Q->front = Q->rear = 0;
}
bool IsEmpty(SeqQueue Q)
{
return (Q.front == Q.rear);
}
bool EnQueue(SeqQueue *Q, ElemType e)
{
if (Q->front == (Q->rear+1)%QueueSize)
return false;
Q->queue[Q->rear] = e;
Q->rear = (Q->rear + 1) % QueueSize;
return true;
}
bool DeQueue(SeqQueue *Q, ElemType &e)
{
if (Q->rear == Q->front)
return false;
else
{
e = Q->queue[Q->front];
Q->front = (Q->front + 1) % QueueSize;
return true;
}
}
bool GetHead(SeqQueue Q, ElemType &e)
{
if (Q.front == Q.rear)
return false;
else
{
e = Q.queue[Q.front];
return true;
}
}
void Clear(SeqQueue *Q)
{
Q->front = Q->rear = 0;
}
//main()
#include"SeqQueue.h"
#include<iostream>
using namespace std;
void main()
{
SeqQueue S;
char str[] = "abcdefg", x;
int i = 0;
InitQueue(&S);
for (i = 0; i < 8; i++)
{
EnQueue(&S, str[i]);
}
DeQueue(&S, x);
cout << "front is " << x << endl;
cout << "Queue is " << endl;
if (!IsEmpty(S))
{
for (i = S.front; i < S.rear; i++)
{
cout << S.queue[i];
}
}
}
链式队列:
#pragma once
#include<iostream>
using namespace std;
typedef char ElemType;
typedef struct node {
struct node *next;
ElemType Data;
}LQnode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
void InitQueue(LinkQueue *L)
{
L->front = L->rear = new LQnode;
if (!L->front)
exit(-1);
L->front->next = NULL;
}
bool IsEmpty(LinkQueue L)
{
return (!(L.front->next));
}
bool EnQueue(LinkQueue *L, ElemType e)
{
LQnode *s;
s = new LQnode;
if (!s) exit(-1);
s->Data = e;
s->next = NULL;
L->rear->next = s;
L->rear = s;
return true;
}
bool DeQueue(LinkQueue *L, ElemType &e)
{
LQnode *s;
if (L->front == L->rear)
return false;
else
{
s = L->front->next;
e = s->Data;
L->front->next = s->next;
if (L->rear == s) L->rear = L->front;
delete s;
return true;
}
}
bool GetHead(LinkQueue *L, ElemType &e)
{
LQnode *s;
if (L->front == L->rear)
return false;
else
{
s = L->front->next;
e = s->Data;
return true;
}
}
void Clear(LinkQueue *L)
{
while (L->front)
{
L->rear = L->front->next;
delete (L->front);
L->front = L->rear;
}
}
//main
#include"LinkQueue.h"
void main()
{
LinkQueue s;
InitQueue(&s);
char *str = "abcdefg";
int i = 0, l = 8;
char e;
for (i = 0; i < l; i++)
{
EnQueue(&s, str[i]);
}
GetHead(&s, e);
cout << "Head is " << e << endl;
cout << "Queue is" << endl;
while (!IsEmpty(s))
{
DeQueue(&s, e);
cout << e;
}
Clear(&s);
}