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运行结果:

  • 相关阅读:
    CnSharp代码生成器。
    C#后台调用前台javascript的五种方法
    winfrom如何做一个语法着色控件
    Delphi AdvStringGrid表格保存和TClientDataSet发生关系的构想。
    Oracle 修改数据库字段的类型的语句
    structs 标签库(html)(转帖)
    Android Unable to resolve target 'android8'
    Android SDL_app: emulatorarm.exe 应用程序错误
    如何MyEclipse中显示WEBINF文件夹下的classes目录以及目录中的class文件
    Android conversion to dalvik format failed with error 1的解决办法
  • 原文地址:https://www.cnblogs.com/luanxin/p/9607975.html
Copyright © 2011-2022 走看看