目录
队列Q非空,删除队头元素,用e返回其值,返回OK,否则ERROR;(出队)
预先要引用的头文件以及宏定义
#include<stdio.h>
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int ElemType;
typedef int Status;
所使用队列的结构
typedef struct LQNode {
ElemType data;
struct LQNode* next;
}LQNode,*QueuePtr;
typedef struct {
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LQueue;
其基本操作接口
void InitQueue_LQ(LQueue& Q); //初始化队列Q
void DestroyQueue_LQ(LQueue& Q); //销毁队列Q
Status QueueEmpty_LQ(LQueue Q); //若队列Q为空,返回TRUE,否则ERROR;
int QueueLength_LQ(LQueue Q); //返回队列Q中的元素个数
Status GetHead_LQ(LQueue Q, ElemType& e); //若队列不空,则返回队头元素,并返回OK否则ERROR;
Status EnQueue_LQ(LQueue& Q, ElemType e); //在队列Q的队尾中插入元素e
Status DeQueue_LQ(LQueue& Q, ElemType& e); //队列Q非空,删除队头元素,用e返回其值,返回OK,否则ERROR;
初始化队列
void InitQueue_LQ(LQueue& Q)
{
Q.front = NULL;
Q.rear = NULL;
}
销毁队列
void DestroyQueue_LQ(LQueue& Q)
{
LQNode* p, * q;
p = Q.front;
while (p != NULL)
{
q = p;
p = p->next;
free(q);
}
Q.front = NULL;
Q.rear = NULL;
}
若队列Q为空,返回TRUE,否则ERROR;
Status QueueEmpty_LQ(LQueue Q)
{
if (Q.front == Q.rear)
{
return TRUE;
}
else
{
return FALSE;
}
}
返回队列Q中的元素个数
int QueueLength_LQ(LQueue Q)
{
LQNode* p;
p = Q.front;
int sum = 0;
while (p != NULL)
{
sum++;
p = p->next;
}
return sum;
}
若队列不空,则返回队头元素,并返回OK否则ERROR;
Status GetHead_LQ(LQueue Q, ElemType& e)
{
if (Q.front != NULL)
{
e = Q.front->data;
return OK;
}
else
{
return ERROR;
}
}
在队列Q的队尾中插入元素e(入队)
Status EnQueue_LQ(LQueue& Q, ElemType e)
{
LQNode* p;
p = (LQNode*)malloc(sizeof(LQNode));
if (p == NULL)
{
return OVERFLOW;
}
else
{
p->data = e;
p->next = NULL;
if (Q.front == NULL)
{
Q.front = p;
}
else
{
Q.rear->next = p;
}
Q.rear = p;
return OK;
}
}
队列Q非空,删除队头元素,用e返回其值,返回OK,否则ERROR;(出队)
Status DeQueue_LQ(LQueue& Q, ElemType& e)
{
LQNode* p;
if (Q.front == NULL)
{
return ERROR;
}
else
{
p = Q.front;
e = p->data;
Q.front = p->next;
if (Q.rear == p)
{
Q.rear = NULL;
}
free(p);
return OK;
}
}
一些接口的测试
int main()
{
//链队列
LQueue Q;
InitQueue_LQ(Q);
cout<<QueueEmpty_LQ(Q)<<endl;
for (int i = 0; i < 4; i++)
{
EnQueue_LQ(Q, i);
}
cout << QueueEmpty_LQ(Q) << endl;
cout<<QueueLength_LQ(Q)<<endl;
ElemType e;
GetHead_LQ(Q, e);
cout << e << endl;
for (int i = 0; i < 2; i++)
{
ElemType num = 0;
DeQueue_LQ(Q, num);
cout << num << endl;
}
cout << QueueEmpty_LQ(Q) << endl;
DestroyQueue_LQ(Q);
}