From e41b0a3156a2fa81a4935593cb338c6b4fad243a Mon Sep 17 00:00:00 2001 From: pzpz Date: Wed, 4 Dec 2024 19:38:30 +0800 Subject: [PATCH] Fix the function for printing the queue (#1573) * renfined! * Add toArray() function to array_queue.c and array_deque.c --------- Co-authored-by: Xi-Row Co-authored-by: krahets --- codes/c/chapter_stack_and_queue/array_deque.c | 25 ++++++++++++++----- codes/c/chapter_stack_and_queue/array_queue.c | 21 +++++++++++++--- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/codes/c/chapter_stack_and_queue/array_deque.c b/codes/c/chapter_stack_and_queue/array_deque.c index a17d1c755..07adcbbfd 100644 --- a/codes/c/chapter_stack_and_queue/array_deque.c +++ b/codes/c/chapter_stack_and_queue/array_deque.c @@ -111,16 +111,29 @@ int popLast(ArrayDeque *deque) { return num; } +/* 返回数组用于打印 */ +int *toArray(ArrayDeque *deque, int *queSize) { + *queSize = deque->queSize; + int *res = (int *)calloc(deque->queSize, sizeof(int)); + int j = deque->front; + for (int i = 0; i < deque->queSize; i++) { + res[i] = deque->nums[j % deque->queCapacity]; + j++; + } + return res; +} + /* Driver Code */ int main() { /* 初始化队列 */ int capacity = 10; + int queSize; ArrayDeque *deque = newArrayDeque(capacity); pushLast(deque, 3); pushLast(deque, 2); pushLast(deque, 5); printf("双向队列 deque = "); - printArray(deque->nums, deque->queSize); + printArray(toArray(deque, &queSize), queSize); /* 访问元素 */ int peekFirstNum = peekFirst(deque); @@ -131,18 +144,18 @@ int main() { /* 元素入队 */ pushLast(deque, 4); printf("元素 4 队尾入队后 deque = "); - printArray(deque->nums, deque->queSize); + printArray(toArray(deque, &queSize), queSize); pushFirst(deque, 1); printf("元素 1 队首入队后 deque = "); - printArray(deque->nums, deque->queSize); + printArray(toArray(deque, &queSize), queSize); /* 元素出队 */ int popLastNum = popLast(deque); printf("队尾出队元素 = %d ,队尾出队后 deque= ", popLastNum); - printArray(deque->nums, deque->queSize); + printArray(toArray(deque, &queSize), queSize); int popFirstNum = popFirst(deque); printf("队首出队元素 = %d ,队首出队后 deque= ", popFirstNum); - printArray(deque->nums, deque->queSize); + printArray(toArray(deque, &queSize), queSize); /* 获取队列的长度 */ int dequeSize = size(deque); @@ -156,4 +169,4 @@ int main() { delArrayDeque(deque); return 0; -} +} \ No newline at end of file diff --git a/codes/c/chapter_stack_and_queue/array_queue.c b/codes/c/chapter_stack_and_queue/array_queue.c index 84b3eae6d..ad6f4fb27 100644 --- a/codes/c/chapter_stack_and_queue/array_queue.c +++ b/codes/c/chapter_stack_and_queue/array_queue.c @@ -74,10 +74,23 @@ int pop(ArrayQueue *queue) { return num; } +/* 返回数组用于打印 */ +int *toArray(ArrayQueue *queue, int *queSize) { + *queSize = queue->queSize; + int *res = (int *)calloc(queue->queSize, sizeof(int)); + int j = queue->front; + for (int i = 0; i < queue->queSize; i++) { + res[i] = queue->nums[j % queue->queCapacity]; + j++; + } + return res; +} + /* Driver Code */ int main() { /* 初始化队列 */ int capacity = 10; + int queSize; ArrayQueue *queue = newArrayQueue(capacity); /* 元素入队 */ @@ -87,7 +100,7 @@ int main() { push(queue, 5); push(queue, 4); printf("队列 queue = "); - printArray(queue->nums, queue->queSize); + printArray(toArray(queue, &queSize), queSize); /* 访问队首元素 */ int peekNum = peek(queue); @@ -96,7 +109,7 @@ int main() { /* 元素出队 */ peekNum = pop(queue); printf("出队元素 pop = %d ,出队后 queue = ", peekNum); - printArray(queue->nums, queue->queSize); + printArray(toArray(queue, &queSize), queSize); /* 获取队列的长度 */ int queueSize = size(queue); @@ -111,11 +124,11 @@ int main() { push(queue, i); pop(queue); printf("第 %d 轮入队 + 出队后 queue = ", i); - printArray(queue->nums, queue->queSize); + printArray(toArray(queue, &queSize), queSize); } // 释放内存 delArrayQueue(queue); return 0; -} +} \ No newline at end of file