1.队列,和现实生活中的规则类似,先进先出
2.队尾只允许元素进入,队头只允许元素退出
3.用数组来实现队列的顺序存储,无论哪一段都可以作为队头或者队尾
SeqQueue.h头文件
#ifndef SEQQUEUE_H 
#define SEQQUEUE_H
#include<stdlib.h>
#include<stdio.h>
typedef struct SeqQueue{
	void* data[1024];
	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 FreeSpace_SeqQueue(SeqQueue* queue);
#endif  
SeqQueue.c源文件
初始化队列
SeqQueue* Init_SeqQueue(){
	
	SeqQueue* queue =(SeqQueue*)malloc(sizeof(SeqQueue));
	for(int i=0;i<=1024-1;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==1024)
		return; 
	queue->data[queue->size]=data;
	//关键步骤:直接将容量作为数组最后一个元素的下标 
	queue->size++;	 
} 
返回队头元素
void* Front_SeqQueue(SeqQueue* queue){
	if(queue==NULL)
		return NULL;
	if(queue->size==0)
		return NULL;
	return queue->data[0];
} 
出队
void Pop_SeqQueue(SeqQueue* 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* Back_SeqQueue(SeqQueue* queue){
	if(queue==NULL)
		return NULL;
	if(queue->size==0)
		return NULL;
	return queue->data[queue->size-1];
} 
返回大小
int Size_SeqQueue(SeqQueue* queue){
	if(queue==NULL)
		return -1;
	return queue->size;
} 
清空队列
void Clear_SeqQueue(SeqQueue* queue){
	
	if(queue==NULL)
		return;
	queue->size=0;
} 
销毁队列
void FreeSpace_SeqQueue(SeqQueue* queue){
	if(queue==NULL)
		return;
	free(queue);
} 
main.cpp主函数测试文件
#include <iostream>
#include <string.h>
#include "SeqQueue.h"
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct goal{
	string name;
	int date;	
}goal;
int main(int argc, char** argv) {
	
	goal g1,g2;
	g1.date=20010927;
	g1.name="JSL";
	g2.date=20011228;
	g2.name="HYH";
	
	SeqQueue* queue=Init_SeqQueue();
	Push_SeqQueue(queue,&g1);
	Push_SeqQueue(queue,&g2);
	//指针类型取地址,别忘了 
	cout<<"这是关于"<<(Size_SeqQueue(queue))<<"个人的故事~"<<endl;
	while(queue->size!=0)
	{
		goal* temp=(goal*)Front_SeqQueue(queue);
		//取出指针并且强转
		cout<<(temp->name)<<":"<<(temp->date)<<endl;
		Pop_SeqQueue(queue);
		//每输出一次即刻将队头元素弹出 
		//注意:Pop_SeqQueue方法中已经包含了size--的操作,此时如果再加一条,就会一次性减2次 
	}
	FreeSpace_SeqQueue(queue); 
	return 0;
} 
测试截图:



















