顺序队的基本操作(C语言/C++)

1、入队
2、出队
3、判断队空
4、清空队
5、销毁队
6、取对头

用开关语句进行操作选择

//顺序队
#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0
#define MAXSIZE 100

typedef int QElemType;
typedef int Status;

typedef struct
{
	QElemType *base;
	int front;
	int rear;
}SqQueue;

//初始化
Status InitQueue(SqQueue *Q)
{
	Q->base=(QElemType*)malloc(MAXSIZE*sizeof(QElemType));
	if(!Q->base) return ERROR;
	Q->front=Q->rear=0;
	return OK;
}

//求顺序队的长度
Status Queuelength(SqQueue Q)
{
		return ((Q.rear-Q.front+MAXSIZE)%MAXSIZE);
}

//队的插入
Status Creat_Q(SqQueue *Q)
{
	int i,length;
	QElemType e;
	if(!Q->base||(Q->rear+1)%MAXSIZE==Q->front) return ERROR;
	printf("输入要入队的个数:");
	scanf("%d",&length);
	for(i=0;i<length;i++)
	{scanf("%d",&e);
	Q->base[Q->rear]=e;
	Q->rear=(Q->rear+1)%MAXSIZE;
	}
	return OK;
}

//删除
Status Delete_Q(SqQueue *Q)
{
    QElemType e;
	if(Q->rear==Q->front||!Q->base) return ERROR;
	while(Q->front!=Q->rear)
    {
	e=Q->base[Q->front];
	Q->front=(Q->front+1)%MAXSIZE;
	printf("%d ",e);
    }
	return OK;
}

//判断是否为空
Status QueueEmpty(SqQueue Q)
{
	if(Q.rear==Q.front) printf("队为空!\n");
	else printf("队不为空!\n");
}


//清空队
Status Clear_Q(SqQueue *Q)
{
    if(Q->rear!=Q->front)
    {Q->front=Q->rear=NULL;
    free(Q->base);}
	return OK;
}
void Desktop()
{
    printf("****************************\n");
    printf("1、初始化\t2、元素入队\n3、元素出队\t4、判断队是否为空\n5、清空队\t6、取队头元素\n7、求队长度\t8、清屏\n0、退出\n");
    printf("****************************\n");
}
//取队头元素
Status Get_Head(SqQueue Q)
{
    if(Q.front!=Q.rear)
        return Q.base[Q.front];
}
int main()
{
    SqQueue Q;
    int i,j,k;
    Desktop();
    while(1)
    {
        printf("请输入选择:");
        scanf("%d",&k);
        if(k==0) break;
        switch(k)
        {
        case 1://1、初始化
            {
                i=InitQueue(&Q);
                if(i==1) printf("分配成功!\n");
                else if(i==0) printf("分配失败!\n");
            }break;
        case 2://2、元素入队
            {
                i=Creat_Q(&Q);
                if(i==1) printf("入队成功!\n");
            }break;
        case 3://3、元素出队
            {
                i=Delete_Q(&Q);
                if(i==i) printf("出队成功!\n");
            }break;
        case 4://4、判断队是否为空
            {
                QueueEmpty(Q);
            }break;
        case 5://5、清空队
            {
                i=Clear_Q(&Q);
                if(i==1) printf("清空成功\n");
            }break;
        case 6://6、取队头元素
            {
                i=Get_Head(Q);
                printf("对头元素为:%d\n",i);
            }break;
        case 7://7、求队长度
            {
                i=Queuelength(Q);
                printf("队的长度为:%d\n",i);
            }break;
        case 8:
            {
                system("cls");
                Desktop();
            }break;
        }
}
system(“pause”);
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值