zoukankan      html  css  js  c++  java
  • 队的顺序存储

    SeqQueue.h文件

    #ifndef SEQQUEUE_H
    #define SEQQUEUE_H
    
    //链表的结构体
    typedef struct _SeqQueue
    {
        void **data;//可以自己动态开辟内存
        int length;//大小
        int capacity;//容量
    }SeqQueue;
    
    //初始化顺序队列
    SeqQueue* Creat_SeqQueue(int capacity);
    //入队
    void Push_SeqQueue(SeqQueue* queue,void* data);
    //出队
    void Pop_SeqQueue(SeqQueue* queue);
    //获得队列的大小
    int Size_SeqQueue(SeqQueue* queue);
    //获取队列的容量
    int Capacity_SeqQueue(SeqQueue* queue);
    //判断是否为空
    int IsEmpty_SeqQueue(SeqQueue* queue);
    //返回队头的元素
    void* Front_SeqQueue(SeqQueue* queue);
    //返回队的尾部元素
    void* Back_SeqQueue(SeqQueue* queue);
    //销毁队列
    void Destroy_SeqQueue(SeqQueue* queue);
    
    
    
    #endif

    SeqQueue.c文件

    #include<stdlib.h>
    #include<stdio.h>
    #include"SeqQueue.h"
    
    //初始化顺序队列
    SeqQueue* Creat_SeqQueue(int capacity)
    {
    
        SeqQueue* queue=(SeqQueue*)malloc(sizeof(SeqQueue));
        queue->data=(void**)malloc(sizeof(void*)*capacity);
               if(queue->data==NULL)
        {
            return NULL;
        }
        queue->length=0;
        queue->capacity=capacity;
        return queue;
    }
    //入队
    void Push_SeqQueue(SeqQueue* queue, void* data)
    {
        if(queue==NULL||data==NULL)
        {
            return;
        }
        //判断是否还有空间
        if(queue->length==queue->capacity)
        {
            return;
        }
        //数组的尾部当做队尾
        queue->data[queue->length]=data;
        queue->length++;
    }
    //出队
    void Pop_SeqQueue(SeqQueue* queue)
    {
        int i=0;
        if(queue==NULL)
        {
            return;
        }
        //从数组头部,
        for(i=0;i<queue->length-1;i++)
        {
            queue->data[i]=queue->data[i+1];
        }
        queue->length--;
    }
    //获得队列的大小
    int Size_SeqQueue(SeqQueue* queue)
    {
        if(queue==NULL)
        {
            return -1;
        }
        return queue->length;
    }
    //获取队列的容量
    int Capacity_SeqQueue(SeqQueue* queue)
    {
        if(queue==NULL)
        {
            return -1;
        }
        return queue->capacity;
    }
    //判断是否为空
    int IsEmpty_SeqQueue(SeqQueue* queue)
    {
        if(queue==NULL)
        {
            return -1;
        }
        if(queue->length==0)
        {
            return 1;
        }
        return 0;
    }
    //返回对头的元素
    void* Front_SeqQueue(SeqQueue* queue)
    {
        if(queue==NULL)
        {
            return NULL;
        }
        if(queue->length==0)
        {
            return NULL;
        }
        return queue->data[0];
    }
    //返回队的尾部元素
    void* Back_SeqQueue(SeqQueue* queue)
    {
        if(queue==NULL)
        {
            return NULL;
        }
        if(queue->length==0)
        {
            return NULL;
        }
        return queue->data[queue->length-1];
    }
    //销毁队列
    void Destroy_SeqQueue(SeqQueue* queue)
    {
        if(queue==NULL)
        {
            return;
        }
        if(queue->data!=NULL)
        {
            free(queue->data);
        }
        free(queue);
        return ;
    }

    testSeqQueue.c文件为了测试队的顺序存储

    #include <stdio.h>
    #include"SeqQueue.h"
    typedef struct _Player
    {
        int age;
        int num;
    }Player;
    
    int main()
    {
        Player* p=NULL;
        //创建队列
        SeqQueue* queue=Creat_SeqQueue(200);
        //创建数据
        Player p1={10,20};
        Player p2={20,30};
        Player p3={30,40};
        //入队列
        Push_SeqQueue(queue,&p1);
        Push_SeqQueue(queue,&p2);
        Push_SeqQueue(queue,&p3);
        p=(Player*)Back_SeqQueue(queue);
        printf("Age:%d Num:%d
    ",p->age,p->num);
        //打印
        while(Size_SeqQueue(queue)>0)
        {
            p=(Player*)Front_SeqQueue(queue);
            printf("Age:%d Num:%d
    ",p->age,p->num);
            Pop_SeqQueue(queue);
        }
        //销毁队列
        Destroy_SeqQueue(queue);
        return 0;
    }
  • 相关阅读:
    Design and Implementation of the Sun Network File System
    Flash: An Efficient and Portable Web Server
    Java集合框架练习-计算表达式的值
    后缀数组专题训练
    经典问题-生产者和消费者问题
    ubuntu14.04下配置Java环境以及安装最新版本的eclipse
    Java多线程之CountDownLatch学习
    ZooKeerper学习之Watcher
    ZooKeeper之FastLeaderElection算法详解
    python获取当天日期进行格式转换
  • 原文地址:https://www.cnblogs.com/jueshi0208/p/5549268.html
Copyright © 2011-2022 走看看