队列
队列是先进先出
用数组去模拟队列的内存空间
俩端都可以作为队头
#ifndef SEQQUEUE_H
#define SEQQUEUE_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//栈的精髓就是在于用数组模拟栈
//数组去模拟栈的顺序存储
#define MAX_SIZE 1024
#define SEQQUEUE_TURE 1
#define SEQQUEUE_FLASE 0
typedef struct SEQQUEUE
{
void *data[MAX_SIZE];
int size;
}SeqQueue;
//初始化栈
SeqQueue *InitStack();
//入队,即添加数据
void Push_SeqQueue(SeqQueue *stack,void *data);
//返回队尾元素
void* Front_SeqQueue(SeqQueue *stack);
//出队,即删除元素
void Pop_SeqQueue(SeqQueue *stack);
//判断是否为空
int IsEmpty(SeqQueue *stack);
//返回队中元素的个数
int Size_SeqQueue(SeqQueue *stack);
//清空队
void Clear_SeqQueue(SeqQueue *stack);
//销毁队列
void FreeSpace(SeqQueue *stack);
#endif
实现代码
#include "SeqQueue.h"
//初始化栈
SeqQueue *InitStack()
{
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 *stack,void *data)
{
//把数组左边当成队头
if(stack==NULL)
{
return;
}
if(data==NULL)
{
return;
}
stack->data[stack->size]=data;
stack->size++;
}
//返回队尾元素
void* Front_SeqQueue(SeqQueue *stack)
{
return stack->data[0];
}
//出队,即删除元素
void Pop_SeqQueue(SeqQueue *stack)
{
if(stack==NULL)
{
return;
}
for(int i=0;i<stack->size-1;i++)
{
stack->data[i]=stack->data[i+1];
}
stack->size--;
}
//判断是否为空
int IsEmpty(SeqQueue *stack)
{
if(stack->size==0)
{
return SEQQUEUE_FLASE;
}
return SEQQUEUE_TURE;
}
//返回队中元素的个数
int Size_SeqQueue(SeqQueue *stack)
{
return stack->size;
}
//清空队
void Clear_SeqQueue(SeqQueue *stack)
{
for(int i=0;i<stack->size;i++)
{
stack->data[i]=NULL;
}
}
//销毁队列
void FreeSpace(SeqQueue *stack)
{
free(stack);
}