队列的表示和实现(C语言)

简介: 队列的表示和实现(C语言)

💨队列的概念及结构

✔概念

只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。

队列具有先进先出的特点。

✔结构

入队列:进行插入操作的一端称为队尾

出队列:进行删除操作的一端称为队头


💨队列的实现

💨初始化

voidQueueInit(Queue*pq)  //初始化{
assert(pq);
pq->head=pq->tail=NULL;
}

voidQueuePush(Queue*pq, QDataTypex) //队尾入{
assert(pq);
QNode*newnode= (QNode*)malloc(sizeof (QNode));
if(newnode==NULL)
    {
printf("malloc fail\n");
exit(-1);
    }
newnode->data=x;
newnode->next=NULL;
if(pq->tail==NULL)
    {
pq->head=pq->tail=newnode;
    }
else    {
pq->tail->next=newnode;
pq->tail=newnode;
    }
}

💨出队列

voidQueuePop(Queue*pq) //队头出{
assert(pq);
assert(pq->head);
if(pq->head->next==NULL)
    {
free(pq->head);
pq->head=pq->tail=NULL;
    }
else    {
QNode*next=pq->head->next;
free(pq->head);
pq->head=next;
    }
}

💨取队头数据

//取队头的数据QDataTypeQueueFront(Queue*pq)
{
assert(pq);
assert(pq->head);
returnpq->head->data;
}

💨取队尾数据

1.//取队尾的数据QDataTypeQueueBack(Queue*pq)
{
assert(pq);
assert(pq->head);
returnpq->tail->data;
}

💨取数据的个数

intQueueSize(Queue*pq)//取数据个数{
assert(pq);
intsize=0;
QNode*cur=pq->head;
while (cur)
    {
++size;
cur=cur->next;
    }
returnsize;
}

💨判断队列是否为空

boolQueueEmpty(Queue*pq) //判断是否为空{
assert(pq);
returnpq->head==NULL;
}

💨销毁队列

voidQueueDestory(Queue*pq)  //销毁一个队列{
assert(pq);
QNode*cur=pq->head;
while(cur)
    {
QNode*next=cur->next;
free(cur);
cur=next;
    }
pq->head=pq->tail=NULL;
}

💨队列头文件Queue.h

#ifndef QUEUE_QUEUE_H#define QUEUE_QUEUE_H#include<stdio.h>#include<stdbool.h>#include<assert.h>#include<stdlib.h>typedefintQDataType;
typedefstructQueueNode{
structQueueNode*next;
QDataTypedata;
}QNode;
typedefstructQueue{
QNode*head; //头QNode*tail; //尾}Queue;
voidQueueInit(Queue*pq);  //初始化voidQueueDestory(Queue*pq); //销毁一个队列voidQueuePush(Queue*pq, QDataTypex); //队尾入voidQueuePop(Queue*pq); //队头出//取队头的数据QDataTypeQueueFront(Queue*pq);
//取队尾的数据QDataTypeQueueBack(Queue*pq);
intQueueSize(Queue*pq);//取数据个数boolQueueEmpty(Queue*pq); //判断是否为空#endif
目录
相关文章
|
14天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
90 9
|
6月前
|
C语言
顺序队列的初始化、进队和出队(C语言)
顺序队列的初始化、进队和出队(C语言)
47 1
|
6月前
|
Linux C语言
Linux系统下C语言的队列操作
Linux系统下C语言的队列操作
124 0
|
C语言
【C语言数据结构(基础版)】第四站:栈和队列
【C语言数据结构(基础版)】第四站:栈和队列
76 0
|
2月前
|
存储 C语言
数据结构基础详解(C语言): 栈与队列的详解附完整代码
栈是一种仅允许在一端进行插入和删除操作的线性表,常用于解决括号匹配、函数调用等问题。栈分为顺序栈和链栈,顺序栈使用数组存储,链栈基于单链表实现。栈的主要操作包括初始化、销毁、入栈、出栈等。栈的应用广泛,如表达式求值、递归等场景。栈的顺序存储结构由数组和栈顶指针构成,链栈则基于单链表的头插法实现。
362 3
|
5月前
|
C语言 C++
【数据结构】C语言实现:栈(Stack)与队列(Queue)
【数据结构】C语言实现:栈(Stack)与队列(Queue)
|
5月前
数据结构——队列(C语言版)
数据结构——队列(C语言版)
40 0
|
6月前
|
算法 C语言 容器
纯c语言模拟栈和队列(初学必看)
纯c语言模拟栈和队列(初学必看)
|
6月前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
6月前
|
存储 C语言
数据结构之队列详解(C语言手撕)
数据结构之队列详解(C语言手撕)
71 2