循环队列

#include <iostream>
using namespace std;
#define MAXSIZE 5			//定义数组长度,限制元素个数
//定义结构体
struct Queue
{
    int a[MAXSIZE];
    int front;		//前指针,指向队首
    int rear;		//后指针,指向对尾
  
};
//初始化
void InitQuene(struct Queue* p)
{
    p->front = p->rear = 0;			//初始化前后指针都指向0
}
//求长度
int QueueLength(struct Queue* p)
{
    return (p->rear - p->front + MAXSIZE) % MAXSIZE;	//求元素个数
}
//判断是否为空
short IsEmpty(struct Queue* p)
{
    if (p->front == p->rear)		//若前后指针指向同一个节点,则判断为空
    {
        cout << "此时循环队列已队空,无数字输出" << endl;
        return 1;
    }
    else
        return 0;
}
//判断是否为满
short IsFull(struct Queue* p)
{
    if (p->front == (p->rear + 1) % MAXSIZE)		//若前指针等于(后指针+1)%数组大小,则判断为满
    {
        cout << "队满,此数不予进队" << endl;
        return 1;
    }
    else
        
        return 0;
}
//进队
short EnQueue(struct Queue* p,int key)
{
  
    if (IsFull(p))				//若队列为满,则进队失败
        return 0;
    p->a[p->rear] = key;			//否则将进队元素赋值给后指针所指的位置,后指针往后移动一格
    p->rear = (p->rear + 1) % MAXSIZE;

    return 1;
}
//出队
short DeQueue(struct Queue* p, int* value)
{
    if (IsEmpty(p))				//若队列为空,则出队失败
    {
        return 0;
    }
    else
    {
        *value = p->a[p->front];			//传入一个指针保留出队元素,然后队首指向下一个元素
        p->front = (p->front + 1) % MAXSIZE;
        cout << "出队数:" << *value << endl;
        return 1;
    }
}
int main()
{
        struct Queue c;         //定义结构体
        InitQuene(&c);          //调用初始化函数,初始队列
        int choice = 1;
        
        while (choice)
        {
        
            cout<<"选项:1(入队) or 2(出队):"<<endl;
            cin >> choice;
            switch (choice)
            {
            case 1:
                int n;
                cout<<"请输入你要入队的数:"<<endl;
                scanf_s("%d", &n);
                EnQueue(&c, n);
                cout << endl;
                break;

            case 2:
                int value;              //出队,输出
                DeQueue(&c, &value);               
                //cout<<"---%d出队---还有%个在队列---\n", value, QueueLength(&c);
                
                cout << endl;
                
                
                break;


            }

        }
        
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值