• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

环形队列为啥从尾进,头出?

huihui163 2019-04-11 浏览量:1024

环形队列为啥从尾进,头出?,不是先进先出吗?

#define MAX_SIZE  12               //缓冲区大小

 

typedef struct 

{

  unsigned char head;        //缓冲区头部位置

  unsigned char tail;         //缓冲区尾部位置

  unsigned char ringBuf[MAX_SIZE]; //缓冲区数组

} ringBuffer_t;

 

ringBuffer_t buffer;                 //定义一个结构体

 

定义一个结构头体则表示新的消息队列已经创建完成。新建创建的队列,头指针head和尾指针tail都是指向数组的元素0


这个头和尾变量默认是0?


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这样有两个好处,可以检测环形队列内是否还有数据,是否已经满。

    因为两个指针都只是向后移动,如果头指针移动到尾指针,则表明环形表已经空啦(出完了)

    如果尾指针移动到头指针,则表明环形表已经满啦。

    初始化时头和尾指针都是0,填充数据时,尾指针向后移动,取出数据时头指针移动,它们的移动规律都是

    C1=(C0+Len)%MAX_SIZE一般都是一个一个的存入数据,即Len=1,其中C0是当前指针位置,C1是移动后位置。

    • 发布于 2019-04-11
    • 举报
    • 评论 4
    • 0
    • 0
huihui163 回复了 xdsnet:unsigned char head; 怎么知道是0 回复
xdsnet 回复了 xdsnet:环形队列其实没有0的概念,只有空、满,头指针,尾指针的概念,而且是要依据情况动态判断,及如果是头指针变化来和尾指针相等,则队列是空的,如果是尾指针变化来和头指针相等,则队列是满的。初始化时是空的。 回复
huihui163 回复了 xdsnet:初始化这个头尾变量肯定也得0.问题是没看到哪里把这两个变量变0 回复
xdsnet 回复了 xdsnet:在环形队列中,初始化时不一定一定置头和尾为0,只需要而值相等,且为范围内值就可以,比如依据你的例子,你可以在初始化时都置为11,不影响以后的操作的(注意这个值最好还是显式置一下,而不要依赖与编译器默认值——一般是0)。 回复

其他答案 数量:5
  • 第一个的头指针和最后一个尾指针肯定是空也就是0,你可以看下链表就明白了,如果空的缓存那么头尾指针都是空
    • 发布于2019-04-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 环形没有头尾,你理解有误。有头尾的就是一个简单的顺序队列。
    • 发布于2019-04-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 不管什么队列中,都是从尾进头出,头是先进去的要先出来,没有啥问题呀
    • 发布于2019-04-11
    • 举报
    • 评论 3
    • 0
    • 0
xdsnet 回复了 robe_zhang :不一定的,堆栈这样的队列一般的用法是后进先住 回复
robe_zhang 回复了 robe_zhang :堆栈不算队列吧,你去排队,后面排的先买到火车票,你愿意么? 回复
robe_zhang 回复了 xdsnet :堆栈,和 队列是两个概念,不要搞混 回复

  • 说是0也不完全准确

    循环队列为空的判断条件是头指针的数=尾指针的数,为慢就尾指针+1=头指针

    但初始建立的时候就是0.

    • 发布于2019-04-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 环形队列一般会有两个指针的,一个指示当前出队列的位置,一个指示入队列的位置,然后这两个指针都是到了最后的位置又从头继续开始,所以才叫做环形

    像你这里给出的这种定义方式,那个缓冲区头部位置变量应该就是用来指示当前入队列的位置,缓冲区尾部变量用来指示出队列的位置,这样就能指示当前存在数据的头尾

    • 发布于2019-04-13
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 chen0000009 :主要是没看到这两个头尾变量为0 回复

相关问题

问题达人换一批

环形队列为啥从尾进,头出?