Skip to content

Commit f56190e

Browse files
add use queue impl stack.
1 parent 51dc8c8 commit f56190e

File tree

3 files changed

+107
-1
lines changed

3 files changed

+107
-1
lines changed

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"C_Cpp.errorSquiggles": "disabled"
3+
}

main

1.86 KB
Binary file not shown.

stack-queue.c

Lines changed: 104 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,10 @@ int linkQueueDequeue(LinkQueue *link_queue, int *value) {
171171
return 0;
172172
}
173173

174+
int linkQueueIsEmpty(LinkQueue *link_queue) {
175+
return LINK_QUEUE_IS_EMPTY(link_queue);
176+
}
177+
174178
void linkQueueDump(LinkQueue *link_queue) {
175179
LinkQueueNode *node = link_queue->head;
176180
int index = 0;
@@ -224,8 +228,107 @@ void testLinkQueue() {
224228
linkQueueDestroy(link_queue);
225229
}
226230

231+
typedef struct {
232+
LinkQueue *main_queue;
233+
LinkQueue *temp_queue;
234+
} QueueStack;
235+
236+
QueueStack *queueStackCreate() {
237+
QueueStack *queue_stack = (QueueStack *)malloc(sizeof(QueueStack));
238+
if (queue_stack == NULL) {
239+
return NULL;
240+
}
241+
242+
queue_stack->main_queue = linkQueueCreate();
243+
queue_stack->temp_queue = linkQueueCreate();
244+
245+
return queue_stack;
246+
}
247+
248+
int queueStackPush(QueueStack *queue_stack, int value) {
249+
int main_dequeue_value;
250+
while(!LINK_QUEUE_IS_EMPTY(queue_stack->main_queue)) {
251+
int res = linkQueueDequeue(queue_stack->main_queue, &main_dequeue_value);
252+
if (res == 0) {
253+
linkQueueEnqueue(queue_stack->temp_queue, main_dequeue_value);
254+
}
255+
}
256+
257+
int res = linkQueueEnqueue(queue_stack->main_queue, value);
258+
259+
int temp_dequeue_value;
260+
while(!LINK_QUEUE_IS_EMPTY(queue_stack->temp_queue)) {
261+
int res = linkQueueDequeue(queue_stack->temp_queue, &temp_dequeue_value);
262+
if (res == 0) {
263+
linkQueueEnqueue(queue_stack->main_queue, temp_dequeue_value);
264+
}
265+
}
266+
267+
return res;
268+
}
269+
270+
int queueStackPop(QueueStack *queue_stack, int *value) {
271+
return linkQueueDequeue(queue_stack->main_queue, value);
272+
}
273+
274+
int queueStackPeek(QueueStack *queue_stack) {
275+
return queue_stack->main_queue->head->data;
276+
}
277+
278+
int queueStackIsEmpty(QueueStack *queue_stack) {
279+
return linkQueueIsEmpty(queue_stack->main_queue);
280+
}
281+
282+
void queueStackDump(QueueStack *queue_stack) {
283+
linkQueueDump(queue_stack->main_queue);
284+
}
285+
286+
void queueStackDestroy(QueueStack *queue_stack) {
287+
linkQueueDestroy(queue_stack->main_queue);
288+
linkQueueDestroy(queue_stack->temp_queue);
289+
free(queue_stack);
290+
}
291+
292+
void testStackUseQueue() {
293+
QueueStack *queue_stack = queueStackCreate();
294+
if (queue_stack == NULL) {
295+
printf("queue stack create failed\n");
296+
return;
297+
}
298+
299+
for (int i = 0; i < 4; i++) {
300+
int res = queueStackPush(queue_stack, i);
301+
if (res < 0) {
302+
printf("queue stack push value failed\n");
303+
}
304+
}
305+
queueStackDump(queue_stack);
306+
307+
int value;
308+
int res = queueStackPop(queue_stack, &value);
309+
if (res < 0) {
310+
printf("queue stack pop failed\n");
311+
} else {
312+
printf("queue stack pop value = %d\n", value);
313+
}
314+
queueStackDump(queue_stack);
315+
316+
value = queueStackPeek(queue_stack);
317+
printf("queue stack top value = %d\n", value);
318+
319+
int is_empty = queueStackIsEmpty(queue_stack);
320+
printf("queue stack is empty %d\n", is_empty);
321+
322+
queueStackDestroy(queue_stack);
323+
}
324+
325+
void testQueueUseStack() {
326+
327+
}
328+
227329
int main() {
228330
// testLinkStack();
229-
testLinkQueue();
331+
// testLinkQueue();
332+
testStackUseQueue();
230333
return 0;
231334
}

0 commit comments

Comments
 (0)