队列的链表实现
目录
一.概括
二.队列的链表实现
第一步
定义
第二步就是 让结构体 拥有增删的功能辣
第一项
入队
出队
清空
第二项 查看
参考:
一.概括
身为一个数据结构——无非是增删改查;
二.队列的链表实现
第一步
当然就是让编译器知道这个 我们要有一个队列结构体,给他描述队列的长相(也就是定义队列结构体)
定义
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博客