首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构|队列的实现[6]

数据结构|队列的实现[6]

作者头像
福贵
发布2020-06-05 16:20:15
2790
发布2020-06-05 16:20:15
举报
文章被收录于专栏:菜鸟致敬菜鸟致敬

队列

队列的特性是先进先出。每次数据出去只能的队列的头部,每次数据进来只能加在队列的尾部。 队列实现一般有两种方式,线性队列,链表队列。

链表队列

链表队列的实现可以参考单向链表。先建立一个普通的单向链表,然后设置三个属性。队列头,用来标识当前队列头的地址;队列尾,用来标识队列尾的地址;队列长,记录当前的队列长,理论上不给队列设置长度可以无限扩展。 每次删除数据,就把队列头的标识移到下一个node的地址。每次增加数据则就把队列尾的指针指向的node加上下一个node的地址,同时把队列尾的标识移过去即可。

线性队列

超简单的,基于数组实现,每次删除数据则把数组第一个删除,把后续的往前面移动,最后一个直接置空;添加数据只需要在最后继续添加即可;数组会有定长,删除和添加数据一定要检验。下面是一个简单地线性队列。

#include <iostream>
using namespace std;
typedef struct queue
{
    int data[10];
    int length;
    int rear;
} queue;
queue add_num(queue q, int num)
{
    if (q.length + 1 <= 10)
    {
        q.data[q.length] = num;
        q.length += 1;
    }
    else if (q.length + 1 > 10)
    {
        cout << "error";
    }

    return q;
};
queue rm_head(queue q)
{
    if (q.length - 1 >= 0)
    {
        for (int i = 0; i < q.length - 1; i++)
        {
            q.data[i] = q.data[i + 1];
        }
        q.data[q.length - 1] = -1;
        q.length -= 1;
    }
    else if (q.length - 1 < 0)
    {
        cout << "error";
    }
    return q;
};

int main()
{
    queue q;
    q.length = 0;
    q = add_num(q, 10);
    q = add_num(q, 9);
    q = add_num(q, 8);
    q = add_num(q, 7);
    for (int i = 0; i < q.length; i++)
    {
        cout << q.data[i] << endl;
    };
    q = rm_head(q);
    q = rm_head(q);
    for (int i = 0; i < q.length; i++)
    {
        cout << q.data[i] << endl;
    };
    q = add_num(q, 10);
    q = add_num(q, 9);
    for (int i = 0; i < q.length; i++)
    {
        cout << q.data[i] << endl;
    };
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与MySQL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 队列
    • 链表队列
      • 线性队列
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档