当前位置:   article > 正文

实现队列的各种基本运算的算法(数据结构)

实现队列的各种基本运算的算法(数据结构)

队列的特点就是先进先出,后进后出。

(1)创建队列

  1. typedef int QueueDataType;
  2. typedef struct queue {
  3. QueueDataType val;
  4. struct queue* next;
  5. }Qnode;
  6. typedef struct Queue {
  7. Qnode* phead;//队头
  8. Qnode* ptail;//队尾
  9. int size;//队列中的有效数据
  10. }Queue;

(2)初始化队列

  1. //初始化队
  2. void QueueInit(Queue* pq)
  3. {
  4. assert(pq);
  5. pq->phead = pq->ptail = NULL;
  6. pq->size = 0;
  7. }

(3)入队

  1. //入队
  2. void QueuePush(Queue* pq, QueueDataType x)
  3. {
  4. assert(pq);
  5. Qnode* newnode = (Qnode*)malloc(sizeof(Qnode));
  6. if (newnode == NULL)
  7. {
  8. printf("malloc fail\n");
  9. exit(-1);
  10. }
  11. pq->size++;
  12. newnode->val = x;
  13. newnode->next = NULL;
  14. if (pq->phead == NULL)
  15. {
  16. pq->phead = pq->ptail = newnode;
  17. }
  18. else
  19. {
  20. pq->ptail->next = newnode;
  21. pq->ptail = newnode;
  22. }
  23. }

(4)出队

  1. //出队
  2. void QueuePop(Queue* pq) {
  3. assert(pq);
  4. Qnode* next = pq->phead->next;
  5. free(pq->phead);
  6. pq->size--;
  7. pq->phead = next;
  8. }

(5) 获取队首元素

  1. //获取队首元素
  2. QueueDataType QueueFront(Queue* pq) {
  3. assert(pq);
  4. assert(pq->size > 0);
  5. assert(pq->phead);
  6. return pq->phead->val;
  7. }

(6)获取队尾元素

  1. //获取队尾元素
  2. QueueDataType QueueBack(Queue* pq) {
  3. assert(pq);
  4. assert(pq->ptail);
  5. assert(pq->size > 0);
  6. return pq->ptail->val;
  7. }

(7)获取队列有效个数

  1. //获取队列有效个数
  2. int QueueSize(Queue* pq) {
  3. assert(pq);
  4. return pq->size;
  5. }

(8)判断队列是否为空

  1. //判断队列是否为空,为空返回1,非空返回0
  2. bool QueueEmpty(Queue* pq) {
  3. assert(pq);
  4. return pq->size == 0 ? 1 : 0;
  5. }

(9)打印队列

  1. //打印队列
  2. void QueuePrint(Queue* pq) {
  3. assert(pq);
  4. assert(pq->phead);
  5. while (!QueueEmpty(pq))
  6. {
  7. printf("%d\n", pq->phead->val);
  8. QueuePop(pq);
  9. }
  10. }

(10)销毁队列

  1. //销毁队列
  2. void QueueDestory(Queue* pq) {
  3. assert(pq);
  4. Qnode* cur = pq->phead;
  5. while (cur) {
  6. Qnode* next = cur->next;
  7. free(cur);
  8. cur = next;
  9. }
  10. pq->phead = pq->ptail = NULL;
  11. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/454464
推荐阅读
相关标签
  

闽ICP备14008679号