链式队列
来源:互联网 发布:淘宝虚拟代理挣钱吗 编辑:程序博客网 时间:2024/06/02 02:27
以单链表的存储方式构建队列,动态分配内存空间,不用考虑上溢。
typedef struct node{ ElemType data; node * next;} ListNode;typedef struct{ ListNode * front; ListNode * rear;}LiQueue;
四要素:
空队列:rear = NULL
满队列:不考虑满队列。
入队列:申请一块新的内存空间,接到rear的next,rear,front指向新的节点。
出队列:将front指向的首结点,输出节点并释放。
链队操作的函数
①初始化队列
void InitQueue(LiQueue *&q) { q = (LiQueue *)malloc(sizeof(LiQueue)); q->front = NULL; q->rear = NULL; }
②销毁队列
//链队的释放,一个指针指向队列的头结点,剩下的就如单链表的释放操作,p、q两指针相随释放其他节点。void DestroyQueue(LiQueue *&q){ LiQueue * p = q->front,* r; if(p!=NULL){ r = p->next; while(r!=NULL) { free(p); p = r; r = p->next; } free(p); free(q); }}
③队列判空
bool EmptyQueue(LiQueue *&q){ return (q->rear==NULL);}
④进队EnQueue
void EnQueue(LiQueue *&q,ElemType e){ LiQueue *p = (LiQueue *)malloc(sizeof(LiQueue)); p->next = NULL; p->data = e; if(q->rear==NULL) //当在空队列进队时,front也需指向首节点 { q->front = q->rear = p; } else { q->rear->next = p; q->rear = p; }}
⑤出队DeQueue
当队列中只有一个元素时,出队后,需将rear,front都赋值NULL
bool DeQueue(LiQueue *&q,ElemType &e){ ListNode * n; if(q->rear==NULL) return false; n = q->front; e = n->data; if(q->front==q->rear) q->front = q->rear = NULL; else q->front = q->front->next; free(n); return true;}
阅读全文
0 0
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 队列--链式
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 队列-链式
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- HDU 1853 Cyclic Tour(二分图最优匹配:有向环覆盖)
- MyBatis 一级和二级缓存
- [Linux]--进程间通信
- FFmpeg 获取RTSP传过来的视频数据并保存成文件
- 交叉编译
- 链式队列
- 最小生成树
- 失踪的7(P1590&NOIP水题测试(2017082301))
- 一个 Yii + vue 项目(3) 解决跨域、数据库配置
- Android属性动画完全解析(上),初识属性动画的基本用法
- ASO
- 1277 字符串中的最大值 (kmp)
- HDU 6166 Senior Pan (多源多汇最短路+集合的二进制划分 17多校第九场第6题)
- unix网络编程——time 服务器和客户端的实现