队列
队列的顺序实现
1.队列的定义
#define MaxSize 10
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int front, rear;
}SqQueue;
2.入队
bool EnQueue(SqQueue& Q, ElemType x) {
if ((Q.rear+1)%MaxSize == Q.front)
return false;
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MaxSize;
return true;
}
3.出队
bool DeQueue(SqQueue& Q, ElemType& x) {
if (Q.front == Q.rear)
return false;
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;
return true;
}
4.获得队顶元素
bool GetHead(SqQueue& Q, ElemType& x) {
if (Q.front == Q.rear)
return false;
x = Q.data[Q.front];
return true;
}
队列的链式实现
1.队列的定义
typedef int ElemType;
typedef struct {
ElemType data;
LinkNode* next;
}LinkNode;
//链式队列
typedef struct {
LinkNode* front,* rear;
}LinkQueue;
2.初始化
void InitQueue(LinkQueue& Q) {
//初始时,front,rear都指向头节点
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
Q.front->next = NULL;
}
3.判空
bool IsEmpty(LinkQueue& Q) {
if (Q.front == Q.rear)
return true;
else
return false;
}
4.入队
void EnQueue(LinkQueue& Q, ElemType x) {
LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
5.出队
bool DeQueue(LinkQueue& Q, ElemType& x) {
if (Q.front == Q.rear)
return false; //空队
LinkNode* p = Q.front->next;
x = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
return true;
}