linux c异步队列,队列(C语言实现,基于链式结构)

队列(C语言实现,基于链式结构)

Queue.h文件

/**

* 队列(C语言实现,基于链式结构)

* 指定数据类型为整型

* 不采用头结点

*/

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

typedef int Status;

typedef int ElemType;

//定义队列节点的结构

typedef struct QueueNode{

ElemType data;

struct QueueNode* next;

}QueueNode;

//定义队列的结构

typedef struct Queue{

QueueNode* front;

QueueNode* rear;

}Queue;

/*

* 初始化一个空队列

*/

Status InitQueue(Queue* q);

/*

* 销毁队列

*/

Status DestroyQueue(Queue* q);

/*

* 清空队列

*/

Status ClearQueue(Queue* q);

/*

* 判断队列是否为空

*/

Status QueueEmpty(Queue q);

/*

* 获取队列第一个元素的值

*/

Status GetHead(Queue q, ElemType *e);

/*

* 入队列

*/

Status EnQueue(Queue* q, ElemType e);

/*

* 出队列

*/

Status DeQueue(Queue* q, ElemType* e);

/*

* 获取队列长度

*/

int QueueLength(Queue q);

/*

* 打印队列所有元素

*/

void PrintQueue(Queue q);

Queue.c文件

#include

#include

#include "Queue.h"

Status InitQueue(Queue* q)

{

q->front = NULL;

q->rear = NULL;

}

Status DestroyQueue(Queue* q)

{

QueueNode* qn_tmp_ptr;

while(q->front){

qn_tmp_ptr = q->front;

q->front = q->front->next;

free(qn_tmp_ptr);

}

free(q);

return OK;

}

Status ClearQueue(Queue* q)

{

QueueNode* qn_tmp_ptr;

qn_tmp_ptr = q->front;

while(qn_tmp_ptr){

qn_tmp_ptr->data = 0;

qn_tmp_ptr = qn_tmp_ptr->next;

}

return OK;

}

Status QueueEmpty(Queue q)

{

if(!q.front)

return TRUE;

else

return FALSE;

}

Status GetHead(Queue q, ElemType *e)

{

*e = q.front->data;

return OK;

}

Status EnQueue(Queue* q, ElemType e)

{

QueueNode* qn_ptr = (QueueNode*)malloc(sizeof(QueueNode));

qn_ptr->data = e;

qn_ptr->next = NULL;

if(!q->front){

q->front = qn_ptr;

q->rear = qn_ptr;

}else{//处理第一个节点

q->rear->next = qn_ptr;

q->rear = qn_ptr;

}

return OK;

}

Status DeQueue(Queue* q, ElemType* e)

{

QueueNode* qn_tmp_ptr;

QueueNode* queue_node;

if(q->front == q->rear){//处理第一个节点

free(q->front);

q->front = NULL;

q->rear = NULL;

}

queue_node = q->front;

while(queue_node != q->rear){

qn_tmp_ptr = queue_node;

queue_node = queue_node->next;

}

qn_tmp_ptr->next = NULL;

q->rear = qn_tmp_ptr;

free(queue_node);

return OK;

}

int QueueLength(Queue q)

{

int count = 0;

while(q.front){

count++;

q.front = q.front->next;

}

return count;

}

void PrintQueue(Queue q)

{

while(q.front){

printf("%d\n", q.front->data);

q.front = q.front->next;

}

}

int main()

{

Queue q;

ElemType e_tmp;

InitQueue(&q);

EnQueue(&q,1);

EnQueue(&q,2);

EnQueue(&q,3);

DeQueue(&q,&e_tmp);

PrintQueue(q);

printf("the lenght of queue is %d\n", QueueLength(q));

}

将C语言梳理一下,分布在以下10个章节中:

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值