原文链接:点击打开链接
用栈实现下列队列操作:
- push(x) 在队列末尾添加元素x
- pop() 删除队列首的元素
- peek() 返回队列首元素但不删除它
- empty() 判断队列是否为空
struct Queue { int data; struct Queue* next; }; typedef struct Queue Queue; /* Create a queue */ void queueCreate(Queue *queue, int maxSize) { queue = (Queue*)malloc(sizeof(Queue)); queue->next = NULL; Queue* end_of_queue = queue; while (maxSize--) { int data_in_node; Queue* q = (Queue*)malloc(sizeof(Queue)); if (NULL == q) break; printf("Please input the data of this node: "); scanf("%d", &data_in_node); q->next = end_of_queue->next; q->data = data_in_node; end_of_queue->next = q; end_of_queue = q; } } /* Push element x to the back of queue */ void queuePush(Queue *queue, int element) { Queue* q = (Queue*)malloc(sizeof(Queue)); if (NULL == q) return ; Queue* end = queue->next; while (NULL != end->next) end = end->next; q->next = end->next; end->next = q; } /* Removes the element from front of queue */ void queuePop(Queue *queue) { if (NULL == queue->next) return; Queue* top = queue->next; queue->next = top->next; free(top); } /* Get the front element */ int queuePeek(Queue *queue) { if (NULL == queue->next) return -1; return (queue->next->data); } /* Return whether the queue is empty */ bool queueEmpty(Queue *queue) { return (NULL == queue->next); } /* Destroy the queue */ void queueDestroy(Queue *queue) { if (NULL == queue->next) return ; Queue* ds = queue->next; Queue* dsNext = ds->next; while (NULL != dsNext->next) { free(ds); ds = dsNext; dsNext = dsNext->next; } free(dsNext); queue->next = NULL; }