• 数据结构:用单链表实现的队列(2)


    这是《大话数据结构》里面的,跟我自己写的不同的是,这里有个单独的头元素,指向队列中真正的第一个元素。而队列的头指针又指向这个头元素。

    个人觉得这个更复杂一点,特别是对于没有很好理解C语言指针的同学(例如我)来说。

    #ifndef LINK_QUEUE_HEAD
    #define LINK_QUEUE_HEAD
    #include <stdio.h>
    #include <stdlib.h>
    #define Status int
    #define OVERFLOW -1
    #define OK 0
    #define ERROR 1
    typedef int ElemType;
    
    typedef struct _Queue_Node {
        ElemType data;
        struct _Queue_Node *next;
    } Node;
    
    typedef struct {
        Node *front;//头指针
        Node *rear;//尾指针
    } LinkQueue;
    
    //初始化
    Status init(LinkQueue *q)
    {
        q->front = (Node *)malloc(sizeof(Node));
        if (q->front == NULL) return OVERFLOW;
        q->front->data = 0;
        q->rear = q->front;
        return OK;
    }
    
    //销毁队列,注意把队列中的元素全部销毁
    Status destroy(LinkQueue *q)
    {
        q->rear = q->front;
        while (q->rear != NULL){
            q->rear = q->rear->next;
            free(q->front);
            q->front = q->rear;
        }
        q->front = NULL;
        q->rear  = NULL;
        return OK;
    }
    
    //压入队列
    Status push(LinkQueue *q, ElemType e)
    {
        Node *p = (Node *)malloc(sizeof(Node));
        if (p == NULL) return OVERFLOW;
    
        p->data = e;
        p->next = NULL;
    
        q->rear->next = p;
        q->rear = p;
    
        return OK;
    }
    
    //出队
    Status pop(LinkQueue *q, ElemType *e)
    {
        Node *p;
        if (q->front == q->rear) return OVERFLOW;
        p = q->front->next;//指向第一个元素
        *e = p->data;
    
        q->front->next = p->next;//front指针后移
        if (q->rear == p) q->rear = q->front;   //如果出队的是最后一个元素,则需要重置尾指针
        free(p);//已出队的元素需要销毁
        p = NULL;
        return OK;
    }

    #endif
  • 相关阅读:
    C++调试帮助
    C++中的前置(后置)++与--
    C++11 使用using定义类型别名
    C++11 尾置返回类型
    [BUUCTF]PWN——pwnable_hacknote
    [BUUCTF]PWN——ciscn_2019_es_7[详解]
    [BUUCTF]PWN——mrctf2020_easyoverflow
    [BUUCTF]PWN——wustctf2020_closed
    [BUUCTF]PWN——0ctf_2017_babyheap
    [BUUCTF]PWN——ciscn_2019_s_4
  • 原文地址:https://www.cnblogs.com/ifan/p/4228018.html
Copyright © 2020-2023  润新知