> 文档中心 > 队列的链表实现

队列的链表实现

目录

一.概括

二.队列的链表实现

第一步

定义

第二步就是 让结构体 拥有增删的功能辣

第一项

入队

出队

清空

第二项 查看

参考:


一.概括

身为一个数据结构——无非是增删改查;

二.队列的链表实现

第一步

当然就是让编译器知道这个 我们要有一个队列结构体,给他描述队列的长相(也就是定义队列结构体)

定义

typedef int DataTypestruct QueueNode;struct QueueNOde{ DataType data; int QueueNode *next;};struct Queue{int *head,*tail;int size;};

第二步就是 让结构体 拥有增删的功能辣

第一项

入队

链表中 入队 形象的比喻就是 你拿了些堆放的木板子绳子 造了个连在一起的架子;

即出队的时候 定然要 申请内存 用于安放 数据域和指针域的节点 ,然后判断是否还会进队,进队的话那就有一个后继结点了,没有的话就首位指针值是一样的;记得最后长度加一。

struct QueueEnNode(struct *que,DataTypm dt){struct QueueNOde *inserNode=(struct QueueNode *)malloc(sizeof(struct QueueNode))inserNode->data=dt;inserNode->next=NULL;if(que->tail){  que->tail->next=NULL;  que->tail=inserNode;}else{  que->head=que->tail=inserNode;} ++que->size;}

出队

链表中 出队的话 一个形象的比喻 就是把 ,没用的东西 拿 塑料袋套住 丢垃圾桶里(东西保质期是一样的,谁最先来的,谁先坏掉);用拥有的物品减一;

即 入队的时候 定义一个结构体指针 指向头结构体;然后再将后继节点声明为头节点;

判断队列知否为空,空的尾节点也得置空;

void QueueDeQueue(struct Queue *que){struct QueueNode *temp=que->head;que->head=temp->next;free(temp);--que=size;if(que->size==0){   que->tail=NULL;}}

清空

链表中 清空的话 一个形象的比喻 就像刨土坑,一直刨,刨到底了,自然就停了

即清空为 判断是否队列是否为空,没空就出队,直到为空为止;

void QueClear(struct Queue *que){while(!QueueIsEmpty(qeu)){      QueueDequeue(que)     }}

第二项 查看

可以查到第一位节点的值,可以得到队列的长度,可以得到队列是否为空的信息;

DataType QueueGetFront(struct Queue *que){  return  que->head=date;}int QueueGetSize(struct Queue *que){return que->size;}int QueueIsEmpy(struct Queue *que){return QueueGetSize(que);}

记得初始化队列

         

void QueueClear(struct Queue *que){     que->head=que->tail=NULL;     que->size=0;}

参考:

(73条消息) 《画解数据结构》_英雄哪里出来的博客-CSDN博客