zoukankan      html  css  js  c++  java
  • 队列(顺序)

    顺序队列是一段连续的地址,但是存在假溢出情况,所以要用循环队列来实现,具体操作像钟表

    下面是顺序队列的表示与实现:

    #include <iostream>
    using namespace std;
    //顺序循环队列的基本表示和实现
    
    const int MAX_SIZE = 100;//定义队列长度
    struct SqQueue
    {
        int * base;
        int front ;
        int rear;
    };
    //初始化队列 注意队尾队首指针的初始化
    bool InitQueue(SqQueue &sq)
    {
        sq.base=(int*)malloc(sizeof(int));
        if (!sq.base)
        {
            return false;
        }
        sq.front=sq.rear=0;
        cout<<"Initial Queue Successfully!"<<endl;
        return true;
    }
    //返回队列的长度
    int QueueLength(SqQueue &sq)
    {
        return (sq.rear-sq.front+MAX_SIZE)%(MAX_SIZE);
    }
    
    //插入元素e为 队列的队尾元素
    bool EnQueue(SqQueue &sq,int e)
    {
        if ((sq.rear+1)%(MAX_SIZE)==sq.front)//循环队列 判断队列是否满了
        {
            cout<<"sorry ,overflow"<<endl;
            return false;
        }
        sq.base[sq.rear]=e;
        sq.rear=(sq.rear+1)%MAX_SIZE;//如果钟表走到12点 下一个将走到1点
        return true;
    }
    
    //删除队首元素 用e返回
    bool DeQueue(SqQueue &sq,int &e)
    {
        if (sq.front==sq.rear)//判断队列是否为空
        {
            cout<<"Sorry,the queue is empty"<<endl;
            return false;
        }
        e=sq.base[sq.front];
        sq.front=(sq.front+1)%MAX_SIZE;
        return true;
    }
    
    //打印队列
    void PrintQueue(const SqQueue sq)
    {
        if (sq.rear==sq.front)
        {
            cout<<"Sorry,the queue is empty"<<endl;
            return;
        }
        cout<<"Now print the new queue:"<<endl;
        int index=0;
        index=sq.front;
        while (index!=sq.rear)
        {
            cout<<sq.base[index]<<endl;
            index=(index+1)%MAX_SIZE;
        }
    }
    
    void main()
    {
        SqQueue sq={0};
        InitQueue(sq);
        int ElemNum=0;
        cout<<"请输入要插入元素的个数:";
        cin>>ElemNum;
        int Elem=0;
        for (int i=0;i<ElemNum;i++)
        {
            cout<<"请输入要插入第 "<<i+1<<" 个元素:";
            cin>>Elem;
            if (EnQueue(sq,Elem))
            {
                cout<<"插入成功"<<endl;;
            }
        }
        PrintQueue(sq);//打印队列
        int delnum;
        DeQueue(sq,delnum);//删除第一个元素
        cout<<"the delete num is :"<<delnum<<endl;
        PrintQueue(sq);//打印队列
        DeQueue(sq,delnum);
        DeQueue(sq,delnum);
        PrintQueue(sq);//打印队列
    }

    结果如下图所示:

  • 相关阅读:
    精简菜单和完整菜单之间进行切换
    QBC运算符含义
    STL源代码剖析——STL算法stl_algo.h
    TI_DSP_corePac_带宽管理
    scrapy-redis源代码分析
    SVG 贝塞尔曲线控制【方便设置】:贝塞尔曲线
    Zoj 2100 Seeding
    快慢指针和链表原地反转
    Gradle 编译多个project(包括多Library库project依赖)指导
    供应商地点信息更新
  • 原文地址:https://www.cnblogs.com/mu-tou-man/p/3899763.html
Copyright © 2011-2022 走看看