链式队列操作包括
//定义数据结构
/*初始化队列*/
void QueueInitiate(LQueue* Q);
/*队列是否为空*/
//队列为空返回0,否则返回1
int QueueNotEmpty(LQueue Q);
/*入队列*/
//在队列Q中插入元素x
//插入成功返回1,否则返回0
int QueueAppend(LQueue* Q, DataType x);
/*取队头元素*/
//取队列Q的当前队头元素,由x返回
//取成功返回1,否则返回0
int QueueGet(LQueue Q, DataType* x);
/*出队列*/
//删除队列当中的数据元素,删除的数据元素由x返回
//出队列成功返回1,否则返回0
int QueueDelete(LQueue* Q, DataType* x);
/*撤销动态内存空间*/
void QueueDestroy(LQueue Q);
1.定义结构体
//定义数据元素
typedef int DataType ;
typedef struct qnode
{
DataType data;
struct qnode *next;
}LQNode;
//定义队头指针和队尾指针
typedef struct
{
LQNode* front;
LQNode* rear;
}LQueue;
2.初始化队列
/*初始化队列*/
void QueueInitiate(LQueue* Q)
{
Q->front = NULL;
Q->rear = NULL;
}
2.队列是否为空
/*队列是否为空*/
//队列为空返回0,否则返回1
int QueueNotEmpty(LQueue Q)
{
if (Q.front == NULL)
{
printf("当前链表为空");
return 0;
}
else
return 1;
}
3.入队列
/*入队列*/
//在队列Q中插入元素x
//插入成功返回1,否则返回0
int QueueAppend(LQueue* Q, DataType x)
{
LQNode* p;
p = (LQNode*)malloc(sizeof(LQNode));
p->data = x;
p->next = NULL;
if (Q->rear != NULL)
{
Q->rear->next= p;
}
Q->rear = p;
if (Q->front == NULL)
Q->front = p;
return 1;
}
4.取对队头元素
/*取队头元素*/
//取队列Q的当前队头元素,由x返回
//取成功返回1,否则返回0
int QueueGet(LQueue Q, DataType* x)
{
if (Q.front == NULL)
{
printf("当前队列为空,无法取队头元素");
return 0;
}
else
{
*x = Q.front->data;
return 1;
}
}
5.出队列
/*出队列*/
//删除队列当中的数据元素,删除的数据元素由x返回
//出队列成功返回1,否则返回0
int QueueDelete(LQueue* Q, DataType* x)
{
LQNode* p;
if (Q->front == NULL)
{
printf("当前队列为空,无法出队列");
return 0;
}
else
{
*x = Q->front->data;
p = Q->front;
Q->front = Q->front->next;
if (Q->front == NULL)
Q->rear = NULL;
free(p);
return 1;
}
}
6.撤销动态内存空间
/*撤销动态内存空间*/
void QueueDestroy(LQueue Q)
{
LQNode* p, * q;
p = Q.front;
while (p != NULL)
{
q = p;
p=p->next;
free(q);
}
}
代码测试如下
#include<stdio.h>
#include"queuelist.h" //包含链式队列头文件
int main()
{
LQueue lqueuelist;
int i, x;
QueueInitiate(&lqueuelist);
for (i = 0; i < 10; i++)
{
QueueAppend(&lqueuelist, i + 1);
}
QueueGet(lqueuelist, &x);
printf("当前队头元素为 %d\n", x);
while (QueueNotEmpty(lqueuelist))
{
QueueDelete(&lqueuelist, &x);
printf("%d ", x);
}
}
程序运行结果如下