• 练队列的实现


    queue.h 文件

    #pragma once

    typedef struct QNode {

    int data;
    struct QNode *next;

    }QNode,*QueuePtr;


    typedef struct {
    QueuePtr front;
    QueuePtr rear;

    }LinkQueue;

    typedef int Status;

    //初始化队列
    Status InitQueue(LinkQueue *Q);

    //销毁队列
    Status DestroyQueue(LinkQueue *Q);

    //清空队列
    Status ClearQueue(LinkQueue *Q);

    //判断队列是否为空
    Status QueueEmpty(LinkQueue Q);

    //获取队头元素
    Status GetHead(LinkQueue Q);

    //插入队尾元素
    Status EnQueue(LinkQueue *Q,int e);

    //删除队头元素
    Status DeQueue(LinkQueue *Q,int *e);

    //获取队列中的所有的元素

    Status QueueTraverse(LinkQueue Q);

    -------------------------------------------------------------------------------------------------- 

    Queue.c 文件内容

    #include "stdio.h"
    #include "stdlib.h"
    #include "queue.h"
    #define ERROR 0
    #define OK 1

    void main() {

    LinkQueue Q;

    //初始化队列
    InitQueue(&Q);

    //向队列中插入元素
    EnQueue(&Q,1);
    EnQueue(&Q,2);
    EnQueue(&Q,3);

    QueueTraverse(Q);

    int e;

    DeQueue(&Q,&e);
    DeQueue(&Q, &e);

    QueueTraverse(Q);

    GetHead(Q,&e);

    printf("%d ",e);


    }

    //队列元素的删除在队头

    //初始化一个队列
    Status InitQueue(LinkQueue *Q) {

    //队列中的每个元素看作一个节点
    //Q->front 看作
    Q->front = Q->rear = (QNode *)malloc(sizeof(QNode));//开辟出节点
    if (!Q->front)return ERROR;
    Q->front->next = NULL;

    return OK;


    }
    //销毁队列
    Status DestroyQueue(LinkQueue *Q) {

    //将队列空间置为空(从队头)
    while (Q->front)
    {
    Q->rear = Q->front->next;

    free(Q->front);

    Q->front = Q->rear;
    }

    return OK;

    }
    //插入队列
    Status EnQueue(LinkQueue *Q, int e) {

    QNode *node = (QNode *)malloc(sizeof(QNode));

    if (!node) return ERROR;

    node->data = e;
    node->next = NULL;

    //队列头节点不会存放元素值
    Q->rear->next = node;
    Q->rear = node;

    return OK;

    }

    //删除队列元素
    Status DeQueue(LinkQueue *Q, int *e) {

    if (Q->front==Q->rear)return ERROR;

    QNode *p;

    p = Q->front->next;
    *e = p->data;
    Q->front->next = p->next;
    if (p == Q->rear) {
    Q->rear = Q->front;
    }
    free(p);

    return OK;

    }

    //访问结点中的元素
    Status QueueTraverse(LinkQueue Q) {

    printf("输出队列中的元素值 ");

    if (Q.front == Q.rear) return ERROR;//判断队列是否为空队列

    Q.front = Q.front->next;

    while (Q.front!=NULL)
    {
    printf("%d ", Q.front->data);

    Q.front = Q.front->next;

    }

    }


    //获取队头元素
    Status GetHead(LinkQueue Q,int *e) {

    if (Q.front == Q.rear) return ERROR;

    Q.front = Q.front->next;

    *e=Q.front->data;

    return OK;


    }

  • 相关阅读:
    Docker网络简介
    Dockerfile数据管理
    Dockerfile指令详解下
    Dockerfile指令详解上
    设计模式之装饰器模式
    设计模式之适配器模式
    Java NIO的工作方式
    使用Dockerfile定制镜像
    jquery+asp.net 调用百度geocoder手机浏览器定位--Api介绍及Html定位方法
    js 取父级 页面上的元素
  • 原文地址:https://www.cnblogs.com/paulversion/p/7662008.html
Copyright © 2020-2023  润新知