6-1 循环队列入队出队


               6-1 循环队列入队出队 

本题要求实现队列的顺序存储表示,包括入队、出队和取队头操作

函数接口定义:
void EnQueue_seq(SeqQueue squeue, DataType x) ;
void DeQueue_seq(SeqQueue squeue) ;
DataType FrontQueue_seq(SeqQueue squeue) ;
其中,squeue 是操作的队列,x是入队的元素

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
typedef char DataType;
struct Queue
{
int Max;
int f;
int r;
DataType *elem;
};
typedef struct Queue *SeqQueue;

SeqQueue SetNullQueue_seq(int m)
{
SeqQueue squeue;
squeue = (SeqQueue)malloc(sizeof(struct Queue));
if (squeue == NULL)
{
printf(“Alloc failure\n”);
return NULL;
}
squeue->elem = (char*)malloc(sizeof(DataType)*m);
if (squeue->elem != NULL)
{
squeue->Max = m;
squeue->f = 0;
squeue->r = 0;
return squeue;
}
}

int IsNullQueue_seq(SeqQueue squeue)
{
return (squeue->f == squeue->r);
}
void EnQueue_seq(SeqQueue squeue, DataType x)
{
@@
}
void DeQueue_seq(SeqQueue squeue)
{
@@
}
DataType FrontQueue_seq(SeqQueue squeue)
{
@@
}

int main()
{
char ch;
SeqQueue queueA = SetNullQueue_seq(5);
ch = getchar();
while (ch != ‘#’)
{
EnQueue_seq(queueA, ch);
ch = getchar();
}
DeQueue_seq(queueA);
printf("%c" ,FrontQueue_seq(queueA));
return 0;
}
输入样例:
ABCD#
输出样例:
B
输入样例:
A#
输出样例:
It is empty queue!
输入样例:
ABCDEF#
输出样例:
It is FULL Queue!It is FULL Queue!B

代码:
//本题其实是很简单的函数题,刚开始做的时候由于粗心,没有注意到样例中队列空还是满时的输出语句。

void EnQueue_seq(SeqQueue squeue, DataType x) {
    
    if((squeue->r+1)%squeue->Max!=squeue->f){
        
        squeue->r=(squeue->r+1)%squeue->Max;
        
        squeue->elem[squeue->r]=x;
  
    }
    
    else printf("It is FULL Queue!");

}

void DeQueue_seq(SeqQueue squeue){
    
    if(squeue->r!=squeue->f){
        
        squeue->f=(squeue->f+1)%squeue->Max;
    
    }

}

DataType FrontQueue_seq(SeqQueue squeue){
   
    if(squeue->r==squeue->f)printf("It is empty queue!");
    
    return squeue->elem[(squeue->f+1)%squeue->Max];

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值