循环队列中的数组未初始化

时间:2013-04-17 13:35:35

标签: c data-structures queue

我在循环队列的c实现中遇到问题。入队操作无法正常工作。该值未在数组中初始化。

队列的结构是:

typedef struct
{   
    int a[5];
    int tail;
    int head;
    int cap;
 }Que;

入队功能:

    int enque(Que *q,int num) 
 {
    if((q->head)==(q->tail ))
        return -1;
    if(q->head==-1)
        q->head=0;
    q->a[q->tail]=num;
    (q->tail) ++;
    if(q->tail ==q->cap)
    q->tail=0;
    return 0;
}

出队功能:

    int deque(Que *q)
{
    if((q->head)==-1)
     return -1;

    int b= q->a[q->head];
    (q->head)++;
    if(q->head==q->cap)
        q->head=0;
    if(q->head==q->tail)
        q->head=-1;

    return b;
}

head是要出列的索引的位置,tail是必须添加元素的索引。 head的初始值为-1,tail为0,cap为5.这些值已由另一个函数设置。

@KlasLindbäck 这是完整的代码:

#include <stdlib.h>
#include <stdio.h>
typedef struct
{   
int a[5];
    int tail;
    int head;
    int cap;
}Que;
int deque(Que *q)
{
    if((q->head)==-1)
     return -1;

    int b= q->a[q->head];
    (q->head)++;
    if(q->head==q->cap)
        q->head=0;
    if(q->head==q->tail)
        q->head=-1;

    return b;
}
void initialize(Que *q)
{
    q->head=-1;
    q->tail=0;
    q->cap=5;
}
int enque(Que *q,int num) 
{
    if((q->head)==(q->tail ))
        return -1;
    if(q->head==-1)
        q->head=0;
    q->a[q->tail]=num;
    printf("%d \n",q->a[q->tail]);
    (q->tail) ++;
    if(q->tail ==q->cap)
    q->tail=0;
    return 0;
}
int main()
{
    Que q;
    initialize(&q);
    int i=1;
    for(;i<=5;i++)
    {
        int num;
        printf("input a number: ");
        scanf("%d",num);
        enque(&q,num);
    }
    int c=q.a[0];
    printf("%d  %d  %d\n",q.a[2],c,q.a[3]);

}

1 个答案:

答案 0 :(得分:1)

我在enque / deque函数中找不到任何错误。 问题出在其他地方。

我使用以下主要测试您的代码:

int main(int argc, char**argv) {
  int var = 7456;
  Que q;
  q.head=-1; q.tail=0; q.cap=5;

  enque(&q, 12);
  enque(&q, 6);
  printf("First queue value =%d\n", deque(&q));
  return 0;
}

,输出

First queue value =12

修改

错误在这里:

    scanf("%d",num);

将其更改为:

    scanf("%d", &num);