队的顺序存储

Posted on 2016-06-01 13:11  洪爵士  阅读(157)  评论(0编辑  收藏  举报

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\n",p->age,p->num);
    //打印
    while(Size_SeqQueue(queue)>0)
    {
        p=(Player*)Front_SeqQueue(queue);
        printf("Age:%d Num:%d\n",p->age,p->num);
        Pop_SeqQueue(queue);
    }
    //销毁队列
    Destroy_SeqQueue(queue);
    return 0;
}