重学数据结构:队列的顺序实现的各种操作(C语言)

本文介绍了一种使用顺序表实现队列的方法,并详细解释了队列的基本操作,包括初始化、判断队满与队空、创建队列、打印队列、入队与退队等。通过具体的代码示例展示了如何在C语言中实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列的顺序实现定义

队列的定义和顺序表、顺序栈其实差不多,只不过有两个变量来记录队列头,尾,操作不尽相同,队列只能在尾部插入,头部退列

typedef struct 
{
    int data[MaxSize];
	int front,rear; //队头队尾
}SqQueue;

队列初始化

void InitSqQueue(SqQueue *Q)
{
    Q->front=0;
	Q->rear=0;
}

判断队满

bool IsQueueFull(SqQueue Q)
{
    if((Q.rear+1)%MaxSize==Q.front)
		return true;
	else 
		return false;
}

判断队空

bool IsQueueEmpty(SqQueue Q)
{
   if(Q.front==Q.rear)
	   return true;
   else
	   return false;
}

创建队列

bool CreateSqQueue(SqQueue *Q)
{
    int data;
	printf("请输入整数:");
	scanf("%d",&data);
	Q->front=9; //从中间开始队列
	Q->rear=9;
	int i=Q->front;
    while(data!=9999&&!IsQueueFull(*Q))
	{
	    Q->data[i]=data;
		Q->rear=(Q->rear+1)%MaxSize;
		i=(i+1)%MaxSize;
		printf("请输入整数:");
		scanf("%d",&data);
	}
	return true;
}

打印队列


void PrintSqQueue(SqQueue Q)
{
    int startid=Q.front;
	int endid=Q.rear;
	
    while(startid!=endid)
	{
        printf("Q.data[%d]=%d\n",startid,Q.data[startid]);
        startid=(startid+1)%MaxSize;
	}
    
}

入队

bool EnQueue(SqQueue *Q,int e)
{
   if(IsQueueFull(*Q))return false;
   Q->data[Q->rear]=e;
   Q->rear=(Q->rear+1)%MaxSize;
   return true;
}

退队

int DeQueue(SqQueue *Q)
{
   if(IsQueueEmpty(*Q))return false;
   int e=Q->data[Q->front];
   Q->front=(Q->front+1)%MaxSize;
   return e;
}

测试代码

int main(int argc, char* argv[])
{
    SqQueue Q;
	InitSqQueue(&Q);
    CreateSqQueue(&Q);
	PrintSqQueue(Q);

	printf("EnQueue(&Q,999)\n");
	EnQueue(&Q,999);
    PrintSqQueue(Q);

    
	int e=DeQueue(&Q);
	printf("DeQueue(&Q)=%d\n",e);

    PrintSqQueue(Q);

   //printf("11求余10=%d",11%10);
}

测试结果

请输入整数:11
请输入整数:22
请输入整数:33
请输入整数:44
请输入整数:55
请输入整数:66
请输入整数:9999
Q.data[9]=11
Q.data[0]=22
Q.data[1]=33
Q.data[2]=44
Q.data[3]=55
Q.data[4]=66
EnQueue(&Q,999)
Q.data[9]=11
Q.data[0]=22
Q.data[1]=33
Q.data[2]=44
Q.data[3]=55
Q.data[4]=66
Q.data[5]=999
DeQueue(&Q)=11
Q.data[0]=22
Q.data[1]=33
Q.data[2]=44
Q.data[3]=55
Q.data[4]=66
Q.data[5]=999
Press any key to continue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值