Помогите с выводом очереди
Написал очередь на массиве.Функция вывода не работает, но ошибок нет.
#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<time.h>
#define N 10
typedef struct queue
{
int qu[N];
int tail, head;
}queue;
void init(queue *q);
queue *createQueue(queue *q);
void enqueue(queue *q ,int value);
int isEmpty(queue *q);
void printOut(queue *q);
int dequeue(struct queue *q);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
queue *q;
int test[N];
//createQueue(q);
q = (queue*)malloc(sizeof(queue));
init(q);
printOut(q);
for (int i = 0; i < N; i++)
{
enqueue(q, test[i]);
}
printOut(q);
getchar();
return 0;
}
void init(queue *q)
{
q->head = 1;
q->tail = 0;
}
queue *createQueue(queue *q)
{
q = (queue*)malloc(sizeof(queue));
init(q);
return q;
}
void enqueue(queue *q, int value)
{
if (q->tail < N - 1)
{
q->tail++;
q->qu[q->tail] = value;
}
else
printf("Очередь полная");
//return;
}
int isEmpty(queue *q)
{
if (q->tail < q->head)
return 1;
else
return 0;
}
void printOut(queue *q)
{
int temp;
if (isEmpty(q))
{
printf("Очередь пуста!\n");
return;
}
for (temp = q->head; q <= q->tail; temp++)
{
printf("%d ", q->qu[temp]);
}
return;
}
int dequeue(struct queue *q) {
int temp1, temp2;
if (isEmpty(q)) {
printf("Очередь пуста!\n");
return 0;
}
temp1 = q->qu[q->head];
for (temp2 = q->head; temp2 < q->tail; temp2++) {
q->qu[temp2] = q->qu[temp2 + 1];
}
q->tail--;
return temp1;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ошибок нет? Вы уверены?
А сравнение в цикле?
for (temp = q->head; q <= q->tail; temp++)
Что с чем вы сравниваете, и что надо бы сравнивать?
Кстати, компилятор должен был ругнуться на то, что вы сравниваете указатель на queue с int, если только вы не выключили вывод всех предупреждений...