队列顺序存储

代码示例:

队列顺序存储.c

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"SeqQueue.h"
typedef struct PERSON
{
   
        char name[64];
        int age;
}Person;
void test01()
{
   
        //创建队列
        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\n", backPerson->name, backPerson->age);
        //输出
        while (Size_SeqQueue(queue)>0)
        {
   
               //取出队头元素
               Person*p = (Person*)Front_SeqQueue(queue);
               printf("Name:%s Age:%d\n", p->name, p->age);
               //从队头弹出元素
               Pop_SeqQueue(queue);
        }
 //销毁队列
        FreeSpace_SeqQueue(queue);
}
int main()
{
   
        test01();
        return EXIT_SUCCESS;
}

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;
        }
        return queue->size;
}
//清空队列
void Clear_SeqQueue(SeqQueue*queue)
{
   
        if (queue == NULL)
        {
   
               return;
        }
        queue->size = 0;
}
//销毁
void FreeSpace_SeqQueue(SeqQueue*queue)
{
   
        if (queue == NULL)
        {
   
               return;
        }
        free(queue);
}

SeqQueue.h

#ifndef SEQQUEUE_H
#define SEQQUEUE_H
#define MAX_SIZE 1024
#include<stdio.h>
#include<stdlib.h>
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 FreeSpace_SeqQueue(SeqQueue*queue);
#endif // !SEQQUEUE_H