SeqQueue.h文件
#ifndef SEQQUEUE_H #define SEQQUEUE_H //链表的结构体 typedef struct _SeqQueue { void **data;//可以自己动态开辟内存 int length;//大小 int capacity;//容量 }SeqQueue; //初始化顺序队列 SeqQueue* Creat_SeqQueue(int capacity); //入队 void Push_SeqQueue(SeqQueue* queue,void* data); //出队 void Pop_SeqQueue(SeqQueue* queue); //获得队列的大小 int Size_SeqQueue(SeqQueue* queue); //获取队列的容量 int Capacity_SeqQueue(SeqQueue* queue); //判断是否为空 int IsEmpty_SeqQueue(SeqQueue* queue); //返回队头的元素 void* Front_SeqQueue(SeqQueue* queue); //返回队的尾部元素 void* Back_SeqQueue(SeqQueue* queue); //销毁队列 void Destroy_SeqQueue(SeqQueue* queue); #endif
SeqQueue.c文件
#include<stdlib.h> #include<stdio.h> #include"SeqQueue.h" //初始化顺序队列 SeqQueue* Creat_SeqQueue(int capacity) { SeqQueue* queue=(SeqQueue*)malloc(sizeof(SeqQueue)); queue->data=(void**)malloc(sizeof(void*)*capacity); if(queue->data==NULL) { return NULL; } queue->length=0; queue->capacity=capacity; return queue; } //入队 void Push_SeqQueue(SeqQueue* queue, void* data) { if(queue==NULL||data==NULL) { return; } //判断是否还有空间 if(queue->length==queue->capacity) { return; } //数组的尾部当做队尾 queue->data[queue->length]=data; queue->length++; } //出队 void Pop_SeqQueue(SeqQueue* queue) { int i=0; if(queue==NULL) { return; } //从数组头部, for(i=0;i<queue->length-1;i++) { queue->data[i]=queue->data[i+1]; } queue->length--; } //获得队列的大小 int Size_SeqQueue(SeqQueue* queue) { if(queue==NULL) { return -1; } return queue->length; } //获取队列的容量 int Capacity_SeqQueue(SeqQueue* queue) { if(queue==NULL) { return -1; } return queue->capacity; } //判断是否为空 int IsEmpty_SeqQueue(SeqQueue* queue) { if(queue==NULL) { return -1; } if(queue->length==0) { return 1; } return 0; } //返回对头的元素 void* Front_SeqQueue(SeqQueue* queue) { if(queue==NULL) { return NULL; } if(queue->length==0) { return NULL; } return queue->data[0]; } //返回队的尾部元素 void* Back_SeqQueue(SeqQueue* queue) { if(queue==NULL) { return NULL; } if(queue->length==0) { return NULL; } return queue->data[queue->length-1]; } //销毁队列 void Destroy_SeqQueue(SeqQueue* queue) { if(queue==NULL) { return; } if(queue->data!=NULL) { free(queue->data); } free(queue); return ; }
testSeqQueue.c文件为了测试队的顺序存储
#include <stdio.h> #include"SeqQueue.h" typedef struct _Player { int age; int num; }Player; int main() { Player* p=NULL; //创建队列 SeqQueue* queue=Creat_SeqQueue(200); //创建数据 Player p1={10,20}; Player p2={20,30}; Player p3={30,40}; //入队列 Push_SeqQueue(queue,&p1); Push_SeqQueue(queue,&p2); Push_SeqQueue(queue,&p3); p=(Player*)Back_SeqQueue(queue); printf("Age:%d Num:%d ",p->age,p->num); //打印 while(Size_SeqQueue(queue)>0) { p=(Player*)Front_SeqQueue(queue); printf("Age:%d Num:%d ",p->age,p->num); Pop_SeqQueue(queue); } //销毁队列 Destroy_SeqQueue(queue); return 0; }