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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 中实现异步队列可以通过以下步骤: 1. 定义一个队列,用于存储任务。 2. 创建一个线程池,用于执行任务。 3. 定义一个任务类,实现 Runnable 接口,用于执行具体的任务。 4. 将任务添加到队列中,等待执行。 5. 创建一个线程,用于从队列中获取任务,并将任务交给线程池执行。 下面是一段示例代码: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; public class AsyncQueue { private LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<>(); private ExecutorService executorService = Executors.newFixedThreadPool(10); public void submit(Runnable task) { queue.offer(task); } public void start() { new Thread(() -> { while (true) { try { Runnable task = queue.take(); executorService.execute(task); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } } ``` 在上面的代码中,我们定义了一个队列 `queue`,用于存储任务。我们还创建了一个线程池 `executorService`,用于执行任务。我们定义了一个 `submit` 方法,将任务添加到队列中。我们还定义了一个 `start` 方法,启动一个线程用于从队列中获取任务,并将任务交给线程池执行。 使用时,我们可以这样做: ```java AsyncQueue asyncQueue = new AsyncQueue(); asyncQueue.start(); asyncQueue.submit(() -> { // 执行具体的任务 }); ``` 这样,我们就实现了一个简单的异步队列

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值