Linux高级环境编程实验报告,Linux高级环境编程实验报告3.doc

Linux高级环境编程实验报告3

作 业 报 告

学生姓名: 学 号: 指导教师:

学生E-mail:

一、作业名称: 自定义消息队列

二、作业要求

自行设计一个消息队列(不能依赖已有库的队列),实现一般队列的操作:入列、出列以及队列判空,另外要保证线程安全,并且能够接收CLMessage类继承体系的消息;需要提供发送消息的通信类,以及循环消息的管理类,保证能够支持线程之间的通信。

三、设计与实现

根据要求分析,首先不能依赖已有库的队列,我们可以利用单链表来创建一个队列,对于消息的出队与入队操作,需要设定两个指针,头指针和尾指针,分别指向队头和队尾,根据队列的要求,队头处只能读(出队),队尾只能写(入队)。对于判空操作,设定队头指针等于队尾指针时为空。

代码清单3.1 自定义队列的实现

struct CLNode//链表节点

{

T data;

struct CLNode *next;

};

template

class CLMyQueue

{

private:

struct CLNode *QueueHead;//队头指针

struct CLNode *QueueTail;//队尾指针

public:

CLMyQueue();

~CLMyQueue();

void Push(T data); //数据入队操作

T Pop(); //数据出队操作

bool IsEmpty();//不能从空队列读数据,因此需进行队列判空

};

template

CLMyQueue::CLMyQueue()//构造函数中对队列进行初始化操作,队头、队尾置空

{

QueueHead = NULL;

QueueTail = NULL;

}

template

CLMyQueue::~CLMyQueue()//析构函数清空队列中的所有数据

{

while (QueueHead != NULL) //队头不为空,则清除队头,继续找队头的后继结点,删除所有的结点数据

{

struct CLNode *t = QueueHead;

QueueHead = QueueHead->next;

delete t;

}

}

template

void CLMyQueue::Push(T data)//数据入队操作

{

if (IsEmpty())//如果队列为空,将数据入队,并且队头和队尾指针都指向该数据

{

QueueHead = new struct CLNode;

QueueHead->data = data;

QueueTail = QueueHead;

return;

}

//在队尾插入数据

struct CLNode *newNode = new struct CLNode;

newNode->data = data;

newNode->next = NULL;

QueueTail->next = newNode;

QueueTail = newNode;

}

template

T CLMyQueue::Pop()//数据出队操作

{

if (IsEmpty())//不能从空队列中读数据,因此判定队列是否为空,空则返回空指针

{

return NULL;

}

T data = QueueHead->data;//取出对头数据,并修改队头指针

struct CLNode *t = QueueHead;

QueueHead = QueueHead->next;

delete t;

return data;

}

template

bool CLMyQueue::IsEmpty()//判断队列是否为空

{

if (QueueHead == NULL) //当队头指针为空时,队列为空

{

return true;

}

return false;

}

代码清单3.1给出了自定义消息队列的实现。开始定义了单链表结点的结构。在自定义队列类CLMyQueue中给出了入队和出队的操作,分别是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值