zoukankan      html  css  js  c++  java
  • 队列queue的C实现

    头文件——————————————————————————————
    #ifndef _QUEUE_H_
    #define _QUEUE_H_
    #include <stdlib.h>
    #define Element int
    struct node
    {
         Element data;
         struct node *next;
    };
    typedef struct node *PtrToNode;
    typedef struct _Queue
    {
         PtrToNode head;
         PtrToNode rear;
    } *Queue;
    //头进尾出
    int IsEmpty(Queue q);
    Queue CreateQueue();
    void DestroyQueue(Queue q);
    void MakeEmpty(Queue q);
    void Enqueue(Element x, Queue q);
    Element Front(Queue q);
    Element Rear(Queue q);
    void Dequeue(Queue q);
    #endif
    源文件————————————————————————————
    #include <iostream>
    #include "./Queue.h"
    
    int IsEmpty(Queue q)
    {
         return q->head == q->rear && q->head == NULL;
    }
    Queue CreateQueue()
    {
         Queue q = (Queue)malloc(sizeof(struct _Queue));
         if(NULL == q) return NULL;
         q->head = q->rear = NULL;
         return q;
    }
    void DestroyQueue(Queue q)
    {
         MakeEmpty(q);
         free(q);
    }
    void MakeEmpty(Queue q)
    {
         while(!IsEmpty(q))
              Dequeue(q);
    }
    void Enqueue(Element x, Queue q)//头进尾出
    {
         if(NULL == q) return ;
         PtrToNode p = (PtrToNode)malloc(sizeof(struct node));
         if(NULL == p) return ;
         p->data = x;
         if(IsEmpty(q))
              q->rear = p;
         p->next = q->head;
         q->head = p;
    }
    Element Front(Queue q)
    {
         return q->head->data;
    }
    Element Rear(Queue q)
    {
         return q->rear->data;
    }
    void Dequeue(Queue q)//头进尾出
    {
         if(NULL == q || IsEmpty(q)) return ;
         PtrToNode prev = q->head;
         while(NULL != prev && prev != q->rear && prev->next != q->rear)
              prev = prev->next;
         if(NULL == prev) return ;
         if(prev == q->rear)
         {
              q->head = q->rear = NULL;
              free(prev);
         }
         PtrToNode tmp = prev->next;
         prev->next = NULL;
         q->rear = prev;
         free(tmp);
         /*if(q->head == q->rear)
         {
              PtrToNode tmp = q->head;
              free(tmp);
              q->head = q->rear = NULL;
         }
         PtrToNode prev = q->head;
         while(NULL != prev && prev->next->data != q->rear->data)
              prev = prev->next;
         PtrToNode tmp = prev->next;
         prev->next = NULL;
         q->rear = prev;
         free(tmp);
         */
    }
    

      

  • 相关阅读:
    E
    D
    Npp ChangeLog
    c++ 书籍(zz)
    再好的工作是为了更好的生活
    如何将JPG格式的图片转换成PNG格式
    点分治
    团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法
    团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误
    团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
  • 原文地址:https://www.cnblogs.com/zxh1210603696/p/3203043.html
Copyright © 2011-2022 走看看