zoukankan      html  css  js  c++  java
  • 数据结构:用单链表实现的队列(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
  • 相关阅读:
    Codeforces Round #277 (Div. 2)
    Topcoder SRM 637 (Div.2)
    【转】大素数判断和素因子分解【miller-rabin和Pollard_rho算法】
    【网络流#5】UVA 11082 最大流
    【网络流#4】UVA 753 最大流
    Codeforces Round #274 (Div. 2)
    【网络流#3】hdu 1532
    【网络流#2】hdu 1533
    【网络流#1】hdu 3549
    Codeforces Round #273 (Div. 2)
  • 原文地址:https://www.cnblogs.com/ifan/p/4228018.html
Copyright © 2011-2022 走看看