#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_QUEUE_LENGTH 11 // キューに用いる配列の⻑さ #define N 50 //乱数の範囲
typedef struct queue {
int array[MAX_QUEUE_LENGTH]; // キューに用いる配列
int front;
int rear;
} Queue;
Queue *init_queue() {
printf("initialize queue\n");
Queue *queue = malloc(sizeof(Queue));
queue->front = 0;
queue->rear = 0;
return queue;
}
void print_test(char *line) {
printf("-------------\n");
printf("test: %s\n", line);
}
void print_front_and_rear_index(Queue *queue) {
// キューの front と rear を表示する関数
printf("front:%2d, rear:%2d\n", queue->front, queue->rear);
}
void print_queue(Queue *queue) {
}
void enqueue(Queue *queue, int value) {
}
void enqueue_test_items(Queue *queue, int n) {
for (int i = 0; i < n; i++) {
int score = rand() % N;
enqueue(queue, score);
}
}
void test_enqueue(Queue *queue) {
print_test("print empty queue");
print_queue(queue);
print_test("enqueue 10 items");
enqueue_test_items(queue, 10);
print_test("print queue");
print_queue(queue);
print_test("enqueue a item to full queue");
enqueue(queue, -1);
}
int main(void) {
srand((unsigned)time(NULL)); // 乱数の初期化 Queue *queue = init_queue(); // キューの初期化
test_enqueue(queue);
}
initialize queue
-------------
test: print empty queue
queue is empty
-------------
test: enqueue 10 items
enqueue: 8
enqueue: 44
enqueue: 39
enqueue: 34
enqueue: 33
enqueue: 16
enqueue: 32
enqueue: 49
enqueue: 34
enqueue: 36
-------------
test: print queue
queue[ 0]: 8
queue[ 1]: 44
queue[ 2]: 39
queue[ 3]: 34
queue[ 5]: 16
queue[ 6]: 32
queue[ 7]: 49
queue[ 8]: 34
queue[ 9]: 36
-------------
test: enqueue a item to full queue
上の雛形を用いてリングバッファによるキューに対して,エンキューする関数 enqueue を実装せよ.
との問題なのですが自分が書いたプログラミングだと実行結果のqueueとenqueueの値が同じになりません
色々試してみたのですが理由がわからないのでどうすれば良いかを教えてもらいたいです。
自分が書いたプログラミングは下に置いておきます
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_QUEUE_LENGTH 11
#define N 50
typedef struct queue {
int array[MAX_QUEUE_LENGTH];
int front;
int rear;
} Queue;
Queue *init_queue() {
printf("initialize queue\n");
Queue *queue = malloc(sizeof(Queue));
queue->front = 0;
queue->rear = 0;
return queue;
}
void print_test(char *line) {
printf("-------------\n");
printf("test: %s\n", line);
}
void print_front_and_rear_index(Queue *queue) {
printf("front:%2d, rear:%2d\n", queue->front, queue->rear);
}
void print_queue(Queue *queue) {
if (queue->front == queue->rear) {
printf("queue is empty\n");
} else {
for (int i = queue->front; i % MAX_QUEUE_LENGTH != queue->rear; i++) {
printf("queue[%2d]: %2d\n", i % MAX_QUEUE_LENGTH,queue->array[i % MAX_QUEUE_LENGTH]);
}
}
}
void enqueue(Queue *queue, int value) {
for(int i = 0;i < 10; i++) {
queue->array[i] = value;
}
queue->rear = 10;
}
void enqueue_test_items(Queue *queue, int n) {
for (int i = 0; i < n; i++) {
int score = rand() % N;
printf("enqueue: %d\n", score);
enqueue(queue, score);
}
}
void test_enqueue(Queue *queue) {
print_test("print empty queue");
print_queue(queue);
print_test("enqueue 10 items");
enqueue_test_items(queue, 10);
print_test("print queue");
print_queue(queue);
print_test("enqueue a item to full queue");
enqueue(queue, -1);
}
int main(void) {
srand((unsigned)time(NULL));
Queue *queue = init_queue();
test_enqueue(queue);
}