实现一个顺序存储的队列2020-12-01

Educator错题

实现一个顺序存储的队列

为了操作去思考
#首先,我得定义一个顺序存储的队列

struct SeqQueue {
    T* data; // 指向数据元素数组的指针
    int front; // 下一个出队元素的数组下标
    int rear; // 下一个入队元素应该存放的单元的数组下标
    int max;  // 队列中最多可放max-1个数据元素,留一个空数据单元以区分空和满
};

这个图也许可以帮助我理解???不过现在完全没感觉!

在此基础上,我需要定义对于队列的操作,如出队、进队、判断是否为满、是否为空。(这里对于队列的定义和对于操作的定义需不需要放在一个文件里,我还有点迷糊)

SeqQueue* SQ_Create(int maxlen)void SQ_Free(SeqQueue* sq)void SQ_MakeEmpty(SeqQueue* sq);
bool SQ_IsEmpty(SeqQueue* sq);
bool SQ_IsFull(SeqQueue* sq)int SQ_Length(SeqQueue* sq);
bool SQ_In(SeqQueue* sq, T x);
bool SQ_Out(SeqQueue* sq, T& item);
bool SQ_Head(SeqQueue* sq, T& head)void SQ_Print(SeqQueue* sq)//这操作多的我哭了

具体的每个操作如何做
在每个内部进行定义

bool SQ_IsEmpty(SeqQueue* sq)
// 判断队列是否为空,为空返回true,否则返回false。
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    
    /********** End **********/
}
bool SQ_IsFull(SeqQueue* sq)
// 判断队列是否为满。为满返回true,否则返回false。
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    
    /********** End **********/
}
int SQ_Length(SeqQueue* sq)
// 队列长度
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    原:return sq->rear;
    对:return (sq->rear-sq->front+sq->max)%sq->max;
    /********** End **********/
}
bool SQ_In(SeqQueue* sq, T x)
// 将x入队。若入队失败(队列满),则返回false,否则返回true。
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    我的: if(SQ_IsFull(sq)) 
      {
      return false; 
         }
      else
      {
        sq->rear++;
        if(sq->rear>sq->max-1)
        {sq->rear=0;}
        return true; }
    /********** End **********/
    正确:
     if(SQ_IsFull(sq)) 
 {
  return false; 
 }
    else
 {
        T* head=sq->data;
        head[sq->rear]=x;
        sq->rear=(sq->rear+1)%sq->max;
        return true;
    }
}
bool SQ_Out(SeqQueue* sq, T& item)
// 从队列sq出队一个元素,返回时item为出队的元素的值。若出队成功(队列不为空),则返回true,否则(队列空),返回false,此时item不会返回有效值。
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    我的:
    if(SQ_IsEmpty(sq)) 
 {
  return false;
 }
    else
 {
        sq->front++;
        if(sq->front>sq->max-1)
        sq->front=0;
        return true;
    }
    正确的:
    if(SQ_IsEmpty(sq)) 
 {
  return false;
 }
    else
 {
        T* head=sq->data;
        item=head[sq->front];
        sq->front=(sq->front+1)%sq->max;//记得加sq->不要疏忽大意
        return true;
    }
    /********** End **********/
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值