博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
队列的顺序存储框架
阅读量:6834 次
发布时间:2019-06-26

本文共 5970 字,大约阅读时间需要 19 分钟。

队列的定义

  队列是只允许在一端进行插入操作,另一端进行删除操作的线性表。

  队列是一种先进先出(FIST IN FIRST OUT)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为对头。

队列的顺序存储框架搭建

顺序列队结构体

typedef struct SEQQUEUE {    void* data[MAX_SIZE];    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_SeuQueue(SeqQueue* queue);//返回大小int Size_SeqQueue(SeqQueue* queue);//清空队列void Clear_SeqQueue(SeqQueue* queue);//销毁队void FreeSpace_SeqQueue(SeqQueue* queue);

 

队列的顺序存储框架实现 

初始化

SeqQueue* Init_SeqQueue(){    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* queue, void* data){    //数组的左边(开始位置)当做队头    if (queue == NULL)        return;    if (data == NULL)        return;    if (queue->size == MAX_SIZE)        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_SeuQueue(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);}

 

队列的顺序存储框架测试

测试思路

//创建对列    SeqQueue* queue = Init_SeqQueue();    //创建数据    Person p1 = { "aaa",10 };    Person p2 = { "bbb",20 };    Person p3 = { "ccc",30 };    Person p4 = { "ddd",40 };    Person p5 = { "eee",50 };    //数据入队列    Push_SeqQueue(queue, &p1);    Push_SeqQueue(queue, &p2);    Push_SeqQueue(queue, &p3);    Push_SeqQueue(queue, &p4);    Push_SeqQueue(queue, &p5);    //输出队尾元素    Person* b = (Person*)Back_SeuQueue(queue);    printf("Name:%s Age:%d\n\n", b->name, b->age);    //输出队列    while (Size_SeqQueue(queue) > 0)    {        //取出队头元素        Person* p = (Person*)Front_SeqQueue(queue);        printf("Name:%s Age:%d\n", p->name, p->age);        //从队头弹出元素        Pop_SeqQueue(queue);    }    //销毁队列    FreeSpace_SeqQueue(queue);

 

运行结果

 

源码

SeqQueue.h

1 #pragma once 2 #include
3 #include
4 5 #define MAX_SIZE 1024 6 //顺序列队结构体 7 typedef struct SEQQUEUE { 8 void* data[MAX_SIZE]; 9 int size;10 }SeqQueue;11 12 //初始化13 SeqQueue* Init_SeqQueue();14 //入队15 void Push_SeqQueue(SeqQueue* queue, void* data);16 //返回队头元素17 void* Front_SeqQueue(SeqQueue* queue);18 //出队19 void Pop_SeqQueue(SeqQueue* queue);20 //返回队尾元素21 void* Back_SeuQueue(SeqQueue* queue);22 //返回大小23 int Size_SeqQueue(SeqQueue* queue);24 //清空队列25 void Clear_SeqQueue(SeqQueue* queue);26 //销毁队27 void FreeSpace_SeqQueue(SeqQueue* queue);

 

SeqQueue.c

1 #include"SeqQueue.h" 2  3 //初始化 4 SeqQueue* Init_SeqQueue() 5 { 6     SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue)); 7     for (int i = 0; i < MAX_SIZE; i++) 8         queue->data[i] = NULL; 9     queue->size = 0;10     return queue;11 }12 //入队13 void Push_SeqQueue(SeqQueue* queue, void* data)14 {15     //数组的左边(开始位置)当做队头16     if (queue == NULL)17         return;18     if (data == NULL)19         return;20     if (queue->size == MAX_SIZE)21         return;22     queue->data[queue->size] = data;23     queue->size++;24 }25 //返回队头元素26 void* Front_SeqQueue(SeqQueue* queue)27 {28     if (queue == NULL)29         return NULL;30     if (queue->size == 0)31         return NULL;32     return queue->data[0];33 }34 //出队35 void Pop_SeqQueue(SeqQueue* queue)36 {37     if (queue == NULL)38         return ;39     if (queue->size == 0)40         return ;41     for (int i = 0; i < queue->size - 1; i++)42         queue->data[i] = queue->data[i + 1];43 44     queue->size--;45 }46 //返回队尾元素47 void* Back_SeuQueue(SeqQueue* queue)48 {49     if (queue == NULL)50         return NULL;51     if (queue->size == 0)52         return NULL;53     return queue->data[queue->size-1];54 }55 //返回大小56 int Size_SeqQueue(SeqQueue* queue)57 {58     if (queue == NULL)59         return -1;60     return queue->size;61 }62 //清空队列63 void Clear_SeqQueue(SeqQueue* queue)64 {65     if (queue == NULL)66         return ;67 68     queue->size = 0;69 }70 //销毁队71 void FreeSpace_SeqQueue(SeqQueue* queue)72 {73     if (queue == NULL)74         return;75     free(queue);76 }

 

main.c

1 #define _CRT_SECURE_NO_WARNINGS 2  3 #include
4 #include
5 #include
6 #include"SeqQueue.h" 7 8 //Person类型结构体 9 typedef struct PERSON {10 char name[64];11 int age;12 }Person;13 14 int main()15 {16 //创建对列17 SeqQueue* queue = Init_SeqQueue();18 19 //创建数据20 Person p1 = { "aaa",10 };21 Person p2 = { "bbb",20 };22 Person p3 = { "ccc",30 };23 Person p4 = { "ddd",40 };24 Person p5 = { "eee",50 };25 26 //数据入队列27 Push_SeqQueue(queue, &p1);28 Push_SeqQueue(queue, &p2);29 Push_SeqQueue(queue, &p3);30 Push_SeqQueue(queue, &p4);31 Push_SeqQueue(queue, &p5);32 33 //输出队尾元素34 Person* b = (Person*)Back_SeuQueue(queue);35 printf("Name:%s Age:%d\n\n", b->name, b->age);36 37 //输出队列38 while (Size_SeqQueue(queue) > 0)39 {40 //取出队头元素41 Person* p = (Person*)Front_SeqQueue(queue);42 printf("Name:%s Age:%d\n", p->name, p->age);43 //从队头弹出元素44 Pop_SeqQueue(queue);45 }46 47 //销毁队列48 FreeSpace_SeqQueue(queue);49 50 return 0;51 }

 

转载于:https://www.cnblogs.com/lixuejian/p/10881952.html

你可能感兴趣的文章
资源导入与导出
查看>>
字符串连接
查看>>
Django之学员管理三
查看>>
AC日记——算术天才⑨与等差数列 bzoj 4373
查看>>
PHP之设计模式
查看>>
设计模式学习(九) 装饰模式
查看>>
【Python精华】100个Python练手小程序
查看>>
Mongodb安装配置文档
查看>>
使用swiper插件,隐藏swiper后再显示,不会触发自动播放的解决办法
查看>>
Linux创建和挂载文件系统
查看>>
python 时间处理
查看>>
树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示
查看>>
PowerDesigner使用技巧
查看>>
Spring学习系列(一) Spring简介
查看>>
单例模式、策略模式、模板方法设计模式探究
查看>>
清北学堂培训2019.4.6
查看>>
While 나가는 법
查看>>
c语言操作符的优先级
查看>>
Codeforces Round #420 (Div. 2) A-E
查看>>
分区表工具脚本
查看>>