SEQQueue.h
#ifndef UNTITLED5_SEQQUEUE_H
#define UNTITLED5_SEQQUEUE_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 1024
//顺序队列结构体
typedef struct SEQQUEUE{
void* data[MAXSIZE];
int size;
}Sequeue;
//初始化
Sequeue * InitSequeue();
//入队
void Pushseqqueue(Sequeue* queue,void* data);
//返回队头元素
void* Frontseqqueue(Sequeue* queue);
//出队
void Popsequeue(Sequeue* queue);
//返回队尾元素
void* Backsequeue(Sequeue* queue);
//返回大小
int Sizeseqqueue(Sequeue* queue);
//清空
void Clearsequeue(Sequeue* queue);
//销毁
void Freesequeue(Sequeue* queue);
#endif //UNTITLED5_SEQQUEUE_H
SEQQueue.cpp
#include "SEQQueue.h"
//初始化
Sequeue * InitSequeue(){
Sequeue * queue = (Sequeue*) malloc(sizeof (Sequeue));
for(int i = 0;i<MAXSIZE;i++){
queue->data[i]=NULL;
}
queue->size=0;
return queue;
}
//入队
void Pushseqqueue(Sequeue* queue,void* data){
//数组的左边是队头 0位置插入
if(queue == NULL){
return;
}
if(data == NULL){
return;
}
if(queue->size==MAXSIZE){
return;
}
queue->data[queue->size]=data;
queue->size++;
}
//返回队头元素
void* Frontseqqueue(Sequeue* queue){
if(queue == NULL){
return NULL;
}
if(queue->size==0){
return NULL;
}
return queue->data[0];
}
//出队
void Popsequeue(Sequeue* 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* Backsequeue(Sequeue* queue){
if(queue == NULL){
return NULL;
}
if(queue->size==0){
return NULL;
}
return queue->data[queue->size-1];
}
//返回大小
int Sizeseqqueue(Sequeue* queue){
if(queue == NULL){
return -1;
}
return queue->size;
}
//清空:下次数据重新覆盖
void Clearsequeue(Sequeue* queue){
if(queue == NULL){
return;
}
queue->size=0;
}
//销毁
void Freesequeue(Sequeue* queue){
if(queue == NULL){
return;
}
free(queue);
}
main.cpp
#include "SEQQueue.h"
//顺序存储 一段连续的内存空间
//链式存储 非连续的内存空间
typedef struct PERSON{
char name[64];
int age;
}Person;
int main() {
//创建队列
Sequeue *queue = InitSequeue();
//创建数据
Person p1 = {"aaa",10};
Person p2 = {"bbb",20};
Person p3 = {"ccc",30};
Person p4 = {"ddd",40};
Person p5 = {"eee",50};
Pushseqqueue(queue,&p1);
Pushseqqueue(queue,&p2);
Pushseqqueue(queue,&p3);
Pushseqqueue(queue,&p4);
Pushseqqueue(queue,&p5);
//输出队尾元素
Person *backPerson = (Person*) Backsequeue(queue);
printf("name:%s age:%d\n",backPerson->name,backPerson->age);
//输出
while (Sizeseqqueue(queue)>0){
//取出队头元素
Person *p = (Person*) Frontseqqueue(queue);
printf("name:%s age:%d\n",p->name,p->age);
//从队头弹出元素
Popsequeue(queue);
}
//销毁
Freesequeue(queue);
return 0;
}