zoukankan      html  css  js  c++  java
  • 数据结构 线性表链式队列

    //线性表链表队列函数声明
    #ifndef _MY_LinkQueue_H_
    #define _MY_LinkQueue_H_
    
    typedef void LinkQueue;
    
    //创建线性表链表队列
    LinkQueue* LinkQueue_Create();
    
    //销毁线性表链表队列
    int LinkQueue_Destroy(LinkQueue* queue);
    
    //清空线性表链表队列
    int LinkQueue_Clear(LinkQueue* queue);
    
    //线性表链表队列队尾添加元素
    int LinkQueue_Append(LinkQueue* queue, void* item);
    
    //线性表链表队列队头删除元素
    void* LinkQueue_Retrieve(LinkQueue* queue);
    
    //获取线性表链表队列队头元素
    void* LinkQueue_Header(LinkQueue* queue);
    
    //获取线性表链表队列长度
    int LinkQueue_Length(LinkQueue* queue);
    
    #endif //_MY_LinkQueue_H_
    //链表队列代码实现
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"LinkList.h"
    #include"LinkQueue.h"
    
    typedef struct _TLinkQueue{
        LinkNode node;
        void * item;
    }TLinkQueue;
    
    
    //创建线性表链表队列
    LinkQueue* LinkQueue_Create(){
        return LinkList_Create();
    }
    
    //销毁线性表链表队列
    int LinkQueue_Destroy(LinkQueue** queue){
        if (queue!=NULL)
        {
            //清空链表
            LinkQueue_Clear(*queue);
        }
        //销毁链表
        return LinkList_Destroy(queue);
    }
    
    //清空线性表链表队列
    int LinkQueue_Clear(LinkQueue* queue){
        //弹出链表中的所有元素
        while (LinkQueue_Length(queue) > 0){
            LinkQueue_Retrieve(queue);
        }
        //清空链表
        return LinkList_Clear(queue);
    }
    
    //线性表链表队列队尾添加元素
    int LinkQueue_Append(LinkQueue* queue, void* item){
        int ERRO_MSG = 0;
        //构建链表节点对象
        TLinkQueue * tqueue = (TLinkQueue *)malloc(sizeof(TLinkQueue));
        if (tqueue==NULL)
        {
            ERRO_MSG = -1;
            printf("分配内存失败!
    ");
    
        }
        tqueue->item = item;
        //队尾添加一个元素
        ERRO_MSG=LinkList_Insert(queue, (LinkNode *)tqueue, LinkList_Length(queue));
        return ERRO_MSG;
    
    }
    
    //线性表链表队列队头删除元素
    void* LinkQueue_Retrieve(LinkQueue* queue){
        void *res = NULL;
        //从队头删除元素
        TLinkQueue * tqueue = (TLinkQueue *)LinkList_Delete(queue, 0);
        if (tqueue==NULL)
        {
            return NULL;
        }
        res = tqueue->item;
        //释放内存
        free(tqueue);
        tqueue = NULL;
        return res;
    }
    
    //获取线性表链表队列队头元素
    void* LinkQueue_Header(LinkQueue* queue){
        TLinkQueue * tqueue = (TLinkQueue *)LinkList_Get(queue,0);
        if (tqueue==NULL)
        {
            return NULL;
        }
        return tqueue->item;
    }
    
    //获取线性表链表队列长度
    int LinkQueue_Length(LinkQueue* queue){
        return LinkList_Length(queue);
    }
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"LinkQueue.h"
    
    void Test(){
        int i = 0;
        //创建队列句柄
        LinkQueue *queue = LinkQueue_Create();
        //添加队列元素
        for ( i = 0; i < 10; i++)
        {
            LinkQueue_Append(queue, (void *)(i + 1));
        }
        //获取队列长度
        printf("队列的长度是%d
    ", LinkQueue_Length(queue));
        //删除一个元素
        printf("被删除的元素是%d
    ", (int)LinkQueue_Retrieve(queue));
        //获取队列长度
        printf("队列的长度是%d
    ", LinkQueue_Length(queue));
        //清空队列
        LinkQueue_Clear(queue);
        //获取队列长度
        printf("清空队列的长度是%d
    ", LinkQueue_Length(queue));
        //销毁队列
        LinkQueue_Destroy(&queue);
    }
    
    void main(){
        Test();
        system("pause");
    }

  • 相关阅读:
    9-3 deepsort在win10配置
    多目标跟踪MOT综述
    OpenCV 学习笔记(11)【OpenCV】光流场方法标出前景(运动)和背景(静止)
    25 读取配置文件
    25树莓派硬件信息
    24 目标识别MobileNet
    23 人脸识别
    24 Home Assistant
    23 打包软件
    22-1 web传输视频 Opencv+usb摄像头 树莓派+Flask实现视频流媒体WEB服务器
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5717388.html
Copyright © 2011-2022 走看看