队列的简单封装

/************************************************
*文件名:queue.h
*创建者:ycj
*创建时间:2015-3-16
*文件说明:声明队列:入队,出队,打印,获取头部
*************************************************/


#ifndef QUEUE_H
#define QUEUE_H


#include <stdio.h>
#include <stdlib.h>
#define N 100   //定义队列最大多少个
#define datatype char  //定义队列的数据类型


struct queue
{
datatype data[N];//保存数据的数组
int front;//数据的头部
int rear;//数据的尾部
};
typedef struct queue Q;//给已经有的类型名称简化


void init(Q * myqueue);//初始化队列
int isempty(Q * myqueue);//判断是否为空,1代表为空,0代表不为空
void Enqueue(Q * myqueue, datatype num);//入队
datatype Dequeue(Q * myqueue);//出队
void pinrtfQ(Q * myqueue);//打印队列所有的元素

datatype gethead(Q * myqueue);//获取数据头部

#endif




/************************************************
*文件名:queue.c
*创建者:ycj
*创建时间:2015-3-16
*文件说明:实现函数:入队,出队,打印,获取头部数据
*************************************************/


#include "queue.h"


void init(Q * myqueue)//初始化队列
{
myqueue->front = myqueue->rear = 0;//表示为空
}


int isempty(Q * myqueue)//判断为空
{
if (myqueue->front == myqueue->rear)
{
return 1;
}
else
{
return 0;
}
}


void Enqueue(Q * myqueue, datatype num)//入队
{
if (myqueue->rear == N)
{
printf("\n入列失败");
return;//失败
}
else
{
myqueue->data[myqueue->rear] = num;//尾部指向的单元赋值
myqueue->rear += 1;//尾部右移一位,指向下个单元
}
}


datatype Dequeue(Q * myqueue)//出队
{
if (myqueue->front == myqueue->rear)
{
printf("\n出列失败");
return -1;
}
else
{
myqueue->front += 1;//头部右移一位
return myqueue->data[myqueue->front - 1];//返回头部原来的数据
}

}


void pinrtfQ(Q * myqueue)//打印队列所有的元素
{
printf("\n");
if (myqueue->front == myqueue->rear)
{
printf("\n没有数据,打印失败");
return;
}
else
{
for (int i = myqueue->front; i < myqueue->rear; i++)
{
printf("%c  ", myqueue->data[i]);//循环打印所有数据
}
}


}





/************************************************
*文件名:test.c
*创建者:ycj
*创建时间:2015-3-16
*文件说明:测试库文件
*************************************************/


#include "queue.h"
#pragma comment(lib, "queue.lib")


void main()
{
Q Q1;//创建一个结构体变量
char str;
init(&Q1);
Enqueue(&Q1, 'A');//A入队
pinrtfQ(&Q1);//打印队列所有的元素
Enqueue(&Q1, 'B');//B入队
pinrtfQ(&Q1);
Enqueue(&Q1, 'C');//C入队
pinrtfQ(&Q1);
Enqueue(&Q1, 'D');//D入队
pinrtfQ(&Q1);


Dequeue(&Q1);//A出队
pinrtfQ(&Q1);


str = gethead(&Q1);//获取开头的一个结点
printf("getchead = %c", str);//输出


Dequeue(&Q1);//B出队
pinrtfQ(&Q1);
Dequeue(&Q1);//C出队
pinrtfQ(&Q1);


str = gethead(&Q1);//获取开头的一个结点
printf("getchead = %c", str);//输出


Dequeue(&Q1);//D出队
pinrtfQ(&Q1);//打印队列所有的元素
Dequeue(&Q1);//出队
pinrtfQ(&Q1);//打印队列所有的元素


system("pause");
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ 是一个开源的消息队列系统,它使用 AMQP(Advanced Message Queuing Protocol)来进行消息的传递。RabbitMQ 提供了丰富的功能和灵活性,但在使用时可能需要一些封装来简化操作和提高开发效率。 在封装 RabbitMQ 时,可以考虑以下几个方面: 1. 连接管理:封装连接管理可以处理连接的建立和关闭,以及连接的断开重连等情况。这样可以避免在每次使用 RabbitMQ 时都手动创建和关闭连接,提高代码的可维护性。 2. 队列声明和绑定:封装队列的声明和绑定操作可以简化创建队列和绑定交换机的过程。可以提供一个统一的接口,传入队列名称、交换机名称等参数,封装具体的操作细节。 3. 消息发送和接收:封装消息的发送和接收过程可以提供简单易用的接口,隐藏底层的细节。可以提供异步发送和接收的方式,支持回调函数或事件监听机制,方便处理消息的处理逻辑。 4. 错误处理和重试:封装错误处理和重试机制可以增加消息传递的可靠性。当消息发送或接收失败时,可以进行重试或记录错误日志,确保消息不会丢失。 5. 消费者管理:封装消费者的管理可以简化消费者的创建和启动过程。可以提供一个统一的接口,传入消费者处理函数,封装具体的消费者启动和处理逻辑。 6. 消息确认和拒绝:封装消息的确认和拒绝机制可以确保消息的可靠传递。可以提供自动确认或手动确认的方式,确保消息被正确处理。 以上是一些常见的封装思路,具体的封装方式可以根据实际需求和项目情况进行调整和扩展。在封装时,可以参考一些已有的 RabbitMQ 封装库,如 Spring AMQP 等,也可以根据自己的需求进行定制化封装

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值