队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。
接下来是具体的代码实现:
.h文件,定义队列结构体,声明操作函数。
//队列,队尾进,对头出
//用数组作为队列,数组的开始端(0)作为队列的头端
#ifndef SEQQUEUE_H
#define SEQQUEUE_H
#include<stdio.h>
#include<string.h>
#include<stdlib.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
.c文件,对操作函数做具体代码实现。
#include"SeqQueue.h"
//初始化
SeqQueue* Init_SeqQueue(){
SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue));
int i;
for(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 || queue->size == 0){
return NULL;
}
return queue->data[0];
}
//出队
void Pop_SeqQueue(SeqQueue* queue){
if(queue == NULL || queue->size == 0){
return ;
}
int i;
for(i = 0;i < queue->size - 1 ;i++){
queue->data[i] = queue->data[i + 1];
}
queue->size --;
}
//返回队尾元素
void* Back_SeqQueue(SeqQueue* queue){
if(queue == NULL || queue->size == 0){
return NULL;
}
return queue->data[queue->size];
}
//返回大小
int Size_SeqQueue(SeqQueue* queue){
if(queue == NULL || queue->size == 0){
return -1;
}
return queue->size - 1;
}
//清空队列
void Clear_SeqQueue(SeqQueue* queue){
if(queue == NULL || queue->size == 0){
return;
}
queue->size = 0;
}
//销毁
void Free_SeqQueue(SeqQueue* queue){
if(queue == NULL || queue->size == 0){
return ;
}
free(queue);
}
main函数。
#include <stdio.h>
#include <stdlib.h>
#include"SeqQueue.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct PERSON{
char name[64];
int age;
}Person;
int main(int argc, char *argv[]) {
//创建队列
SeqQueue* queue = Init_SeqQueue();
//创建数据
Person p1 = {"aa",10};
Person p2 = {"bb",20};
Person p3 = {"cc",30};
Person p4 = {"dd",40};
//插入对列
Push_SeqQueue(queue,&p1);
Push_SeqQueue(queue,&p2);
Push_SeqQueue(queue,&p3);
Push_SeqQueue(queue,&p4);
//打印
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);
return 0;
}
执行结果。