07黑马数据结构笔记之队列的顺序存储(简单)
1 思想:使用数组来实现。只需要在插入删除时符合队列的先进先出思想就可以。例如先插入1,2,3.即1->2->3。在尾部插入,1是先进的,那么1就得先出,即在尾部插入,头部删除。
‘代码实现:
1)头文件.h:
#ifndef SEQQUEUE
#define SEQUEUE
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 1024
//维护队列数组结构体
typedef struct QUEUE{
void* data[MAX_SIZE]; //数组
int size;
}Queue;
//初始化
Queue *Init_Queue();
//入队
int Push_Queue(Queue *queue,void* data);
//出队
int Pop_Queue(Queue *queue);
//获取队头元素
void* Top_Queue(Queue *queue);
//获取队尾元素
void* Back_Queue(Queue *queue);
//获取数组大小
int Size_Queue(Queue *queue);
//判断是否为空
int IsEmpty_Queue(Queue *queue);
//清空队列
int Clear_Queue(Queue *queue);
//销毁内存
int Destory_Queue(Queue *queue);
#endif
2).cpp文件:
#include"Seq_queue.h"
//初始化
Queue *Init_Queue(){
Queue *queue=(Queue*)malloc(sizeof(Queue));
//依次为数组元素赋值
for(int i=0;i<MAX_SIZE;i++){
queue->data[i]=NULL;
}
queue->size=0;
return queue;
}
//入队
int Push_Queue(Queue *queue,void* data){
//以数组左边为队头删除,数组右边为队尾插入
if(queue==NULL){
return -1;
}
if(data==NULL){
return -1;
}
if(queue->size==MAX_SIZE){
return -1;
}
//开始入队--队尾插入
queue->data[queue->size]=data; //没赋值!!!
queue->size++;
return 0;
}
//出队
int Pop_Queue(Queue *queue){
if(queue==NULL){
return -1;
}
if(queue->size==0){
return -1;
}
//删除,所有元素往前移
for(int i=0;i<queue->size-1;i++){
queue->data[i] = queue->data[i+1];
}
//最后没移动的元素可处理也可不处理
//queue->data[queue->size-1]=NULL;
queue->size--;
return 0;
}
//获取队头元素
void* Top_Queue(Queue *queue){
if(queue==NULL){
return NULL;
}
if(queue->size==0){
return NULL;
}
return queue->data[0];
}
//获取队尾元素
void* Back_Queue(Queue *queue){
if(queue==NULL){
return NULL;
}
if(queue->size==0){
return NULL;
}
return queue->data[queue->size-1];
}
//获取数组大小
int Size_Queue(Queue *queue){
if(queue==NULL){
return -1;
}
return queue->size;
}
//判断是否为空
int IsEmpty_Queue(Queue *queue){
if(queue==NULL){
return -1;
}
if(queue->size==0){
return 1;
}
return 0;
}
//清空队列
int Clear_Queue(Queue *queue){
if(queue==NULL){
return -1;
}
queue->size=0;
return 0;
}
//销毁内存
int Destory_Queue(Queue *queue){
if(queue==NULL){
return -1;
}
free(queue);
return 0;
}
3)主函数测试:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"Seq_queue.h"
typedef struct PERSON{
char name[64];
int age;
}Person;
void test01(){
//创建队列
Queue *queue=Init_Queue();
//创建数据
Person p1={"aaa",18};
Person p2={"bbb",20};
Person p3={"ccc",21};
Person p4={"ddd",22};
Person p5={"eee",19};
//插入数据
Push_Queue(queue,&p1);
Push_Queue(queue,&p2);
Push_Queue(queue,&p3);
Push_Queue(queue,&p4);
Push_Queue(queue,&p5);
//打印数据
while(queue->size>0){
//只能用删除的一端输出,即队头
Person *p=(Person*)Top_Queue(queue);
printf("名字:%s , 年龄:%d\n",p->name,p->age);
//删除
Pop_Queue(queue);
}
//销毁内存
Destory_Queue(queue);
}
int main(){
test01();
return 0;
}