数据结构之队列的顺序存储

队列(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;
}

执行结果。
在这里插入图片描述

发布了5 篇原创文章 · 获赞 2 · 访问量 74

猜你喜欢

转载自blog.csdn.net/weixin_44809329/article/details/104376743
今日推荐