数据结构之队列

本期我们来讲一下队列,队列也是一种线性的数据结构,具体表现为先进先出。就像我们生活中的排队一样。因为它先进先出的特性,所以我们还是使用链表来实现会效率高一些。我们还是从增删查改这几个维度来认识并学习队列。

我们首先要创建一个队列的数据结构,因为是链表实现,所以我们要先写出一个节点的结构。

typedef int datatype;
typedef struct QNode
{
    datatype n;
    struct QNode* next;
}QNode;

然后再接着写出队列的结构,队列的话因为我们是链表实现,头删效率很高,但是尾删因为要找尾所以效率很低,我们干脆直接把尾节点的指针写在结构里面。

typedef struct Queue
{
    QNode* front;
    QNode* rear;
    int size;
}Queue;

创建好了队列我们首先要进行一下初始化:

void QueueInit(Queue* p)
{
    p->front=p->rear=NULL;
    p->size=0;
}

因为我们插入或者删除数据都会涉及节点的创建和销毁,所以我们还要写一个节点创建的函数。

QNode* BuyQNode(datatype x)
{
	QNode* p = malloc(sizeof(QNode));
	p->n = x;
	p->next = NULL;
	return p;
}

然后我们就可以开始写插入和删除函数了。

首先是插入函数,因为队列都是后进,所以就相当于是尾插。

void QueuePush(Queue* p, datatype x)
{
	QNode* p = BuyQNode(x);
    if(p->size==0)
    {
        p->front=p->rear=p;
    }
    else
	    p->rear->next = p;
	p->size++;
}

删除节点在队列中都是头删。

void QueuePop(Queue* p)
{
    assert(p->size>0);
	QNode* p = p->front;
	p->front = p->front->next;
	p->size--;
	free(p);
}

这样就完成了一个队列的书写了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值