首页 > 其他分享 >数据结构——链式队列

数据结构——链式队列

时间:2022-11-12 10:35:28浏览次数:49  
标签:printf NULL return 队列 链式 linkqueue lq front 数据结构

定义
特点:先进先出(FIFO)
队尾:入队操作
队头:出队操作
.h文件
typedef int datatype;

typedef struct node
{
datatype data;
struct node *next;
}listnode, *linklist;

typedef struct _linkqueue {
linklist front;
linklist rear;
}linkqueue;

linkqueue* queue_create();
int enqueue(linkqueue *lq, datatype x);
datatype dequeue(linkqueue *lq);
int queue_empty(linkqueue *lq);
int queue_clear(linkqueue *lq);
linkqueue* queue_free(linkqueue *lq)

.c文件
#include <stdio.h>
#include <stdlib.h>
#include "linkqueue.h"

linkqueue* queue_create()
{
linkqueue *lq = (linkqueue *)malloc(sizeof(linkqueue));
if(lq == NULL){
printf("malloc linkqueue fail\n");
return NULL;
}

lq->front = lq->rear = (linklist)malloc(sizeof(listnode));
if(lq->front == NULL){
printf("malloc listnode fail\n");
return NULL;
}

lq->front->data = 0;
lq->front->next = NULL;

return lq;
}
int enqueue(linkqueue *lq, datatype x){
if(lq == NULL){
printf("lq is NULL\n");
return -1;
}

linklist p= (linklist)malloc(sizeof(listnode));
if(p == NULL){
printf("malloc node fail\n");
return -1;
}
p->data = x;
p->next = NULL;
lq->rear->next = p;//连接
lq->rear = p;//移位

return 0;
}
datatype dequeue(linkqueue *lq){
linklist p;
datatype temp;
if (lq == NULL){
printf("lq is NULL\n");
return 0;
}
if (lq->front == lq->rear){
printf("lq is empty\n");
return 0;
}
p = lq->front;
lq->front= p->next;
temp = lq->front->data;
free(p);
p = NULL;

return temp;
}
int queue_empty(linkqueue *lq){
if (lq == NULL){
printf("lq is NULL\n");
return -1;
}

if (lq->front == lq->rear){
printf("linkqueue is empty\n");
return -1;
}
return 0;
}

int queue_clear(linkqueue *lq){
linklist p;
if (lq == NULL){
printf("lq is NULL\n");
return 0;
}

while (!(lq->front == lq->rear))
{
p = lq->front;
lq->front = p->next;
printf("clear:%d\n",p->data);
free(p);
p = NULL;
}
return 0;
}
linkqueue* queue_free(linkqueue *lq){
linklist p;
if (lq == NULL){
printf("lq is NULL\n");
return 0;
}
p = lq->front;
while (lq->front)
{
lq->front = p->next;
printf("free:%d\n",p->data);
free(p);
p = lq->front;
}
free(lq);
lq = NULL;

return lq;
}
main函数
#include <stdio.h>
#include <stdlib.h>
#include "linkqueue.h"
static int test();
int main()
{
printf("Mian start:\n");
test();
return 0;
}

static int test(){

linkqueue *lq;
lq = queue_create();
if(lq == NULL){
return -1;
}

enqueue(lq,9);
enqueue(lq,19);
enqueue(lq,29);
enqueue(lq,39);
enqueue(lq,49);

queue_clear(lq);
while (!queue_empty(lq))
{
printf("dequeue:%d\n",dequeue(lq));
}
lq = queue_free(lq);
return 0;
}

标签:printf,NULL,return,队列,链式,linkqueue,lq,front,数据结构
From: https://www.cnblogs.com/dituirenwu/p/16882816.html

相关文章

  • LeetCode 406.根据身高重建队列
    首先根据身高从小到大排序如果身高相等那么根据第二个值降序排序classSolution{public:vector<vector<int>>reconstructQueue(vector<vector<int>>&people){......
  • Yii2-Queue实现轻量级消息队列
    概述Yii2-Queue是Yii2官方制作的一个消息队列,提供多个缺点:Syncronous,File,DB,Redis,RabbitMQ,AMQPInterop,Beanstalk,Gearman等,使用Yii2开发的时候使用该扩展......
  • 【数据结构-树】并查集的基本操作(待整理)
    目录1数据结构定义2初始化3查找操作4并操作1数据结构定义#defineMAX50intUFSets[MAX];//并查集2初始化//参数:并查集SvoidInit(intS[]){inti;......
  • table数据结构
    依赖guava中的table数据结构使用Table<Long,String,Set<Metric>>table=Tables.synchronizedTable(HashBasedTable.create());#table的三段结构rowKey,columnKey,v......
  • Scala数据结构
    1 数据结构特点Scala同时支持可变集合和不可变集合,不可变集合从不可变,可以安全的并发访问。两个主要的包:不可变集合:scala.collection.immutable可变集合: scala.collecti......
  • .net 分布式架构之业务消息队列
    .net业务消息队列是应用于业务的解耦和分离,应具备分布式,高可靠性,高性能,高实时性,高稳定性,高扩展性等特性。大量的业务消息堆积能力;无单点故障及故障监控......
  • 第一章 数据结构绪论
    本文章作为学习笔记,大量参考了《大话数据结构》这本书,因为没有用于商业活动,而且也算是为作者做了一个小小的宣传,作者应该不会告我侵权,哈。 数据结构的概念:是相互之间存在的......
  • 数据结构(B树和B+树)
    9.2、B树了解B树之前,先来了解一下m叉查找树可以类比二叉查找树(排序树)的来了解m叉查找树;我们这里以5叉查找树为例子二叉查找树有一个关键字和2个孩子,左孩子<根结点<......
  • 【数据结构与算法】ip转int
    思路比较简单,但是有一些坑。classErrorextendsException{/****/privatestaticfinallongserialVersionUID=1L;Stringmsg;Error(Stringmsg){th......
  • Go实现栈与队列基本操作
    @目录一前言二实现栈与队列基本操作2.1栈基本操作2.2队列基本操作三用栈实现队列3.1理论3.2算法题3.3思路3.4代码部分四用队列实现栈4.1理论4.2算法题4.3思路......