我正在尝试在C中建立队列,但是Enqueue函数存在问题

时间:2019-12-24 07:14:33

标签: c algorithm function exception queue

抱歉语言 错误消息表示未处理的写入存在异常。 我使用calloc和初始化的Queue分配内存,并且其他功能运行良好。 仅Enque功能不起作用。

enter image description here

我可以帮您吗?来自韩国

enter code here

int Initialize(IntQueue *q, int max)
{
q->num = q->front = q->rear = 0;
if ((q->que) = calloc(max, sizeof(int)) == NULL)
{
    q->max = 0;
    return -1;
}
q->max = max;
return 0;
}

int Enque(IntQueue *q, int x)
{
if (q->num >= q->max)
{
    return -1;
}
else
{
    q->num++;
    q->que[q->rear++] = x;
    if (q->rear == q->max)
    {
        q->rear = 0;
    }
    return 0;
}
}

int Deque(IntQueue *q, int *x)
{
if (q->num <= 0)
{
    return -1;
}
else
{
    q->num--;
    *x = q->que[q->front++];
    if (q->front == q->max)
    {
        q->front = 0;
    }
    return 0;
}
}

int Peek(const IntQueue *q, int *x)
{
if (q->num <= 0)
{
    return -1;
}
*x = q->que[q->front];
return 0;
}

int Clear(IntQueue *q)
{
q->num = q->front = q->rear = 0;
}

int Capacity(const IntQueue *q)
{
return q->max;
}

int Size(const IntQueue *q)
{
return q->num;
} 

int IsEmpty(const IntQueue *q)
{
return q->num <= 0;
}

int IsFull(const IntQueue *q)
{
return q->num >= q->max;
}

int Search(const IntQueue *q, int x)
{
int i, idx;
for (i = 0; i < q->num; i++)
{
    if (q->que[idx = (i + q->front) % q->max] == x)
    {
        return idx;
    }
}
return -1;
}

void Print(const IntQueue *q)
{
int i;
for (i = 0; i < q->num; i++)
{
    printf("%d ", q->que[(i + q->front) % q->max]);
}
putchar('\n');
}

void Terminate(IntQueue *q)
{
if (q->que != NULL)
{
    free(q->que);
}
q->max = q->num = q->front = q->rear = 0;
}

只是添加了代码,有头文件,但我认为此问题没有很多信息。

0 个答案:

没有答案