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

    main.c

    #define _CRT_SECURE_NO_WARNING
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"SeqQueue.h"
    
    typedef struct PERSON {
        char name[64];
        int age;
    }Person;
    
    int main() {
    
        //创建队列
        SeqQueue* queue = Init_SeqQueue();
    
        //创建数据
        Person p1 = { "aaa",10 };
        Person p2 = { "bbb",20 };
        Person p3 = { "ccc",30 };
        Person p4 = { "ddd",40 };
        Person p5 = { "eee",50 };
    
        //数据入队列
        Push_SeqQueue(queue, &p1);
        Push_SeqQueue(queue, &p2);
        Push_SeqQueue(queue, &p3);
        Push_SeqQueue(queue, &p4);
        Push_SeqQueue(queue, &p5);
    
        //输出队尾元素
        Person* backPerson = (Person*)Back_SeqQueue(queue);
        printf("队尾元素:Name:%s  Age:%d
    ", backPerson->name, backPerson->age);
    
        //输出
        while (Size_SeqQueue(queue) > 0) {
            //取出队头元素
            Person* p=(Person*)Front_SeqQueue(queue);
            printf("Name:%s  Age:%d
    ", p->name, p->age);
            //从队头弹出元素
            Pop_SeqQueue(queue);
        }
    
        
    
    
        //销毁队列
        Free_SeqQueue(queue);
    
        printf("
    ");
        system("pause");
        return 0;
    }

    SeqQueue.h

    #ifndef SEQQUEUE_H
    #define SEQQUEUE_H
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    #define MAX_SIZE 1024
    
    //顺序队列结构体
    typedef struct SEQQUEUE {
        void* data[MAX_SIZE];//无类型指针
        int size;
    }SeqQueue;
    
    //初始化
    SeqQueue* Init_SeqQueue();
    //入队
    void Push_SeqQueue(SeqQueue* queue, void* data);
    //返回队头元素
    void* Front_SeqQueue(SeqQueue* queue);
    //出队
    void Pop_SeqQueue(SeqQueue* queue);
    //返回队尾元素
    void* Back_SeqQueue(SeqQueue* queue);
    //返回大小
    int Size_SeqQueue(SeqQueue* queue);
    //清空队列
    void Clear_SeqQueue(SeqQueue* queue);
    //销毁
    void Free_SeqQueue(SeqQueue* queue);
    
    #endif

    SeqQueue.c

    #include"SeqQueue.h"
    
    //初始化
    SeqQueue* Init_SeqQueue() {
        SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue));
        for (int i = 0; i < MAX_SIZE; i++) {
            queue->data[i] = NULL;
        }
        queue->size = 0;
        return queue;
    }
    //入队
    void Push_SeqQueue(SeqQueue* queue, void* data) {
        
        //数组左边当做队头
        if (queue == NULL) {
            return;
        }
        if (data == NULL) {
            return;
        }
    
        if (queue->size == MAX_SIZE) {
            return;
        }
    
        queue->data[queue->size] = data;
        queue->size++;
    
    }
    //返回队头元素
    void* Front_SeqQueue(SeqQueue* queue) {
        
        if (queue == NULL) {
            return NULL;
        }
        if (queue->size == 0) {
            return NULL;
        }
        return queue->data[0];
    }
    //出队
    void Pop_SeqQueue(SeqQueue* queue) {
    
        //需要移动元素
        if (queue == NULL) {
            return;
        }
        if (queue->size == 0) {
            return;
        }
    
        for (int i = 0; i < queue->size - 1; i++) {
            queue->data[i] = queue->data[i + 1];
        }
        queue->size--;
    }
    //返回队尾元素
    void* Back_SeqQueue(SeqQueue* queue) {
        if (queue == NULL) {
            return NULL;
        }
        if (queue->size == 0) {
            return NULL;
        }
    
        return queue->data[queue->size - 1];
    
    }
    //返回大小
    int Size_SeqQueue(SeqQueue* queue) {
        if (queue == NULL) {
            return -1;
        }
    
        return queue->size;
    }
    //清空队列
    void Clear_SeqQueue(SeqQueue* queue) {
        if (queue == NULL) {
            return;
        }
        
        queue->size = 0;
    
    }
    //销毁
    void Free_SeqQueue(SeqQueue* queue) {
        if (queue == NULL) {
            return;
        }
    
        free(queue);
    
    }

    VS2015运行结果:

  • 相关阅读:
    合并排序二
    合并排序
    理解Windows消息循环机制
    直接插入排序
    关于typedef的用法总结
    迭代器的抽象
    C++基础--malloc和new的区别
    C++基础--sizeof和strlen的区别
    C++ VS编译问题--LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    SSL--Windows下生成OpenSSL自签证书
  • 原文地址:https://www.cnblogs.com/luanxin/p/9607975.html
Copyright © 2011-2022 走看看