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
  • 相关阅读:
    三级联动下拉菜单1
    IP地址查询接口及调用方法
    实现简单的网页拖拽效果
    [转载]PHP如何获取客户端真实IP
    mysql(二)连接查询
    php exec 执行php脚本
    PHP-将某一目录下文件压缩成zip格式
    从读书时代想我的程序之路
    Github上建立自己的网站
    小米手机购买程序,如果是我,我会怎么写
  • 原文地址:https://www.cnblogs.com/ifan/p/4228018.html
Copyright © 2011-2022 走看看