线性表(List)---队列的顺序存储

来源:互联网 发布:淘宝手机壳销量 编辑:程序博客网 时间:2024/05/17 16:14

队列的顺序存储结构的设计与实现


栈的介绍

定义: 队列是一种特殊的线性表,队列仅在线性表的两端进行操作。
队头(Front): 取出数据元素的一端。*
队尾(Rear): 插入数据元素的一端。

队列模型

队列的常用操作
(1)创建队列
(2)销毁队列
(3)进队列
(4)出队列
(5)获取队列头部元素
(6)获取队列的长度


队列顺序存储结构的设计

队列的顺序存储模型
队列的顺序存储模型


队列顺序存储结构的实现

  因为队列是一种特殊的线性表,所以我们可以重复利用顺序表的顺序存储中的代码,在此基础上实现队列的顺序存储。
- SeqQueue.h

#ifndef _SEQQUEUE_H_#define _SEQQUEUE_H_typedef void SeqQueue;typedef void SeqQueueNode;//创建队列SeqQueue *SeqQueue_Create(int capacity);//销毁队列void SeqQueue_Destroy(SeqQueue *queue);//清空队列void SeqQueue_Clear(SeqQueue *queue);//进队列int  SeqQueue_Append(SeqQueue *queue, SeqQueueNode *item);//出队列SeqQueueNode *SeqQueue_Retrieve(SeqQueue *queue);//获取对头元素SeqQueueNode *SeqQueue_Header(SeqQueue *queue);//获取队列长度int SeqQueue_Lenght(SeqQueue *queue);//获取队列容量int SeqQueue_Capacity(SeqQueue *queue);#endif // !_SEQQUEUE_H_
  • SeqQueue.c
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "SeqQueue.h"#include "seqlist.h"//队列是一中特殊的线性表//创建队列 相当于创建一个顺序存储的线性表SeqQueue *SeqQueue_Create(int capacity){    return (SeqlistNode *)SeqList_Create(capacity);}//销毁队列 相当于销毁一个线性表void SeqQueue_Destroy(SeqQueue *queue){    SeqList_Destroy(queue);    return ;}//清空队列 相当于清空线性表void SeqQueue_Clear(SeqQueue *queue){    SeqList_Clear(queue);    return ;}//进队列 相当于向线性表末尾添加一个元素int  SeqQueue_Append(SeqQueue *queue, SeqQueueNode *item){    return SeqList_Insert(queue, item, SeqList_Length(queue));}//出队列  相当于从线性表中删除0号位置元素SeqQueueNode *SeqQueue_Retrieve(SeqQueue *queue){    return (SeqlistNode *)SeqList_Delete(queue,0);}//获取对头元素 相当于获取线性表中0号位置元素SeqQueueNode *SeqQueue_Header(SeqQueue *queue){    return (SeqlistNode *)SeqList_Get(queue, 0);}//获取队列长度 相当于获取线性表的长度int SeqQueue_Lenght(SeqQueue *queue){    return SeqList_Length(queue);}//获取队列容量 相当于获取线性表的容量int SeqQueue_Capacity(SeqQueue *queue){    return SeqList_Capacity(queue);}
  • SeqQueue集成测试框架
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "SeqQueue.h"void main(){    int i = 0, ret = 0;    int a[10];    SeqQueue *queue = SeqQueue_Create(10);    if (queue == NULL)    {        printf("func SeqQueue_Create() (queue == NULL) err\n");        return;    }    //入队列    for (; i < 5; i++)    {        a[i] = i + 1;        ret = SeqQueue_Append(queue, (SeqQueueNode *)&a[i]);        if (ret != 0)        {            printf("func SeqQueue_Append() (ret != 0) err:%d\n", ret);            return;        }    }    //打印队列的属性    printf("len:%d\n", SeqQueue_Lenght(queue));    printf("capacity:%d\n", SeqQueue_Capacity(queue));    printf("header:%d\n", *((int *)SeqQueue_Header(queue)));    //出队列    while (SeqQueue_Lenght(queue))    {        int *tmp = (int *)SeqQueue_Retrieve(queue);        if (tmp == NULL)        {            printf("func SeqQueue_Retrieve() (tmp == NULL) err\n");            return;        }        printf("tmp: %d\n", *tmp);    }    SeqQueue_Destroy(queue);    return;}
  • 结果截图
    队列的顺序存储
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 剃了发际线后悔怎么办 在外面遇到坏人抢劫怎么办 请事假单位不批怎么办 捷普请假不批怎么办 钉钉请假不审批怎么办 钉钉请假未审批怎么办 员工事假+工作履责怎么办 员工请事假不批怎么办 哺乳起员工一直请事假怎么办 请公休公司不批怎么办 辞职信交了不批怎么办 辞职年假没有休完怎么办 病假算旷工我该怎么办 辞职信领导不批怎么办 软顶帽子踏顶了怎么办 戴草帽总往下掉怎么办 白鞋子低帮发黄怎么办 跳伞的时候降落伞打不开怎么办 收腹裤穿着总是往下卷怎么办? 结婚打了黑伞怎么办 酷派x7开不了机怎么办 脸书账号被禁用怎么办 文档变成了d盘怎么办? 派派背包满了怎么办 黑裤子掉颜色了怎么办 快递被别人领走怎么办 绒面靴子长霉了怎么办 新买的鞋子开胶怎么办 白色的皮鞋边发黄怎么办 新鞋大拇指顶脚怎么办 耐克标志开胶了怎么办 鞋开胶了怎么办不用胶 gta按home没反应怎么办 gta5线上车没了怎么办 吃了粘壳的鸡蛋怎么办 gta5短信删错了怎么办 电风扇2档3档开好关不管用怎么办 gta5把车替换了怎么办 gta5任务完成后卡了怎么办 gta5车被扣押了怎么办 侠盗猎车手5卡怎么办