队列的基本概念及实现

队列的基本概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。

队列的实现:队列可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率比较低。

以下是实现队列的基本操作

#pragma once
typedef struct Node {
int value;
struct Node *next;
} Node;

//队列的结构
typedef struct Queue {
Node *head;
Node *last;
}Queue;

//初始化队列
void QueueInit(Queue* q)
{
q->head = q->last = NULL;
}

//队尾入队列
void QueuePush(Queue* q, int v) {
Node *node = (Node *)malloc(sizeof(Node));
node->value = v;
node->next = NULL;
if (q->head == NULL) {
q->head = node;
q->last = node;
}
else {
q->last->next = node;
q->last = node;
}
}

//队头出队列
void Queuepop(Queue* q) {
Node *second = q->head->next;
free(q->head);
q->head = Node * second;
if (q->head = NULL)
{
q->last = NULL;
}
}

//获取队列头元素
QDataType QueueFront(Queue* q) {
return q->head->value;
}

//获取队列队尾元素
QDataType QueueBack(Queue* q) {
return q->last->value;
}

//获取队列中元素个数
int QueueSize(Queue* q) {
int size = 0;
for (Node *c = q->head; c != NULL; c = c->next)
{
size++;
}
return size++;
}

//检测队列是否为空
int QueueEmpty(Queue* q) {
if (q->head = NULL) {
return 1;
}
else {
return 0;
}
}

//销毁队列
void QueueDestroy(Queue *q) {
Node *cur, *next;
for (cur = q->head; cur != NULL; cur = next) {
next = cur->next;
free(cur);
}
q->head = q->last = NULL;
}

队列和栈的基本区别
队列:先进先出,
:先进后出
队列只能在表的一端进行插入和另一端进行删除。
栈是只能在一端进行删除和插入操作

关于栈的相关概念及实现可以进入以下地址: https://blog.csdn.net/weixin_43755584/article/details/89190665


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值