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\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);
    }

    


    //销毁队列
    Free_SeqQueue(queue);

    printf("\n");
    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运行结果:

 

posted @ 2018-09-08 09:53  乱丶心  阅读(187)  评论(0编辑  收藏  举报