因为队列比较简单,关于队列的概念就不过多赘述了,本文只讲链队的基本操作实现
队列的定义
typedef int QDataType;
//对列中每个结点的结构
typedef struct QListNode
{
QDataType data; //数据域
struct QListNode* next; //指针域
}QNode;
定义队列
// 队列的结构
typedef struct Queue
{
int size; //元素个数
QNode* head; //队头指针
QNode* tail; //队尾指针
}Queue;
初始化队列
// 初始化队列
void QueueInit(Queue* q)
{
assert(q);
q->head = q->tail = NULL; //队头尾指针都置空
q->size = 0; //队内元素个数置空
}
队尾入队列
链队在入队时有两种情况
// 队尾入队列
void QueuePush(Queue* q, QDataType data)
{
assert(q);
//创建新结点
QNode* newnode = (QNode*)malloc(sizeof(QNode));
if (NULL == newnode)
{
perror("malloc");
exit(-1);
}
newnode->data = data; //将数据插入新结点数据域
newnode->next = NULL; //将新结点指针域置空
if (NULL == q->tail) //当前队列没有结点
{
q->head = q->tail = newnode; //队头队尾的指针域同时指针新结点
}
else //当前队列中有结点
{
q->tail->next = newnode; //队尾结点指针域指向新结点
q->tail = newnode; //将插入的结点更新为尾结点
}
q->size++; //队列内有效元素个数 + 1
}
队头出队列
// 队头出队列
void QueuePop(Queue* q)
{
assert(q);
assert(q->head); //队列不为空
QNode* delete = q->head; //保存要删除的队头结点的地址
q->head = q->head->next; //头指针走向下一个结点
free(delete); //删除队头结点
delete = NULL;
if (NULL == q->head) //前面删除的是最后一个元素
{
q->tail = NULL; //尾指针也置空
}
q->size--; //队内元有效元素个数 -1
}
取队头元素
// 获取队列头部元素
QDataType QueueFront(Queue* q)
{
assert(q);
assert(q->head);
return q->head->data; //返回队头结点的数据域内容
}
取队尾元素
// 获取队列队尾元素
QDataType QueueBack(Queue* q)
{
assert(q);
assert(q->tail); //队列不为空
return q->tail->data; //返回队尾结点的数据域内容
}
获取队列有效元素个数
// 获取队列中有效元素个数
int QueueSize(Queue* q)
{
assert(q);
return q->size;
}
判断队空
int QueueEmpty(Queue* q)
{
assert(q);
return 0 == q->size; //表达式成立则结果为真,反之为假
}
销毁队列
// 销毁队列
void QueueDestroy(Queue* q)
{
assert(q);
QNode* cur = q->head; //cur 先指向队头
while (NULL != cur)
{
QNode* next = cur->next; //保存下一个结点
free(cur); //删除当前结点
cur = next; //指向下一个结点
}
q->head = q->tail = NULL; //队头尾指针都置空
q->size = 0;
}
原文地址:https://blog.csdn.net/shangguanxiu/article/details/134645987
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_17027.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。