📅  最后修改于: 2023-12-03 15:23:41.331000             🧑  作者: Mango
堆栈(stack)和队列(queue)是常用的数据结构,它们可以用数组或链表来实现。堆栈是先进后出(Last In First Out,LIFO)的,而队列是先进先出(First In First Out,FIFO)的。
当我们需要实现在一段时间内保存多个数据的功能时,堆栈和队列都可以派上用场。那么堆栈入队代码在 C 编程语言中如何实现呢?
以下为堆栈入队代码的 C 语言实现:
#include <stdio.h>
#define SIZE 5
int stack[SIZE];
int top = -1;
int queue[SIZE];
int front = -1;
int rear = -1;
void push(int x) {
if(top == SIZE-1) {
printf("Stack is full\n");
} else {
top++;
stack[top] = x;
printf("%d has been pushed into stack\n", x);
}
}
int pop() {
int x = -1;
if(top == -1) {
printf("Stack is empty\n");
} else {
x = stack[top];
top--;
}
return x;
}
void enqueue(int x) {
if(rear == SIZE-1) {
printf("Queue is full\n");
} else {
if(front == -1) {
front = 0;
}
rear++;
queue[rear] = x;
printf("%d has been enqueued into queue\n", x);
}
}
int dequeue() {
int x = -1;
if(front == -1 || front > rear) {
printf("Queue is empty\n");
} else {
x = queue[front];
front++;
}
return x;
}
int main() {
push(10);
push(20);
push(30);
push(40);
push(50);
push(60);
printf("%d has been popped from stack\n", pop());
printf("%d has been popped from stack\n", pop());
enqueue(70);
enqueue(80);
enqueue(90);
printf("%d has been dequeued from queue\n", dequeue());
printf("%d has been dequeued from queue\n", dequeue());
return 0;
}
上述代码中,我们定义了两个数组 stack 和 queue 分别用于存储堆栈和队列的元素。在堆栈中,top 表示栈的顶部元素的下标,它的初值为 -1。在队列中,front 和 rear 分别表示队列的前端和后端的元素下标。当队列为空时,front 和 rear 的值为 -1。
我们使用 push() 函数将元素推入堆栈中,使用 pop() 函数将元素弹出堆栈。在 push() 函数中,我们首先判断堆栈是否已满,若未满,则将 top 加 1,然后将元素存入 stack[top] 中。在 pop() 函数中,我们首先判断堆栈是否为空,若为空,则返回 -1;否则将 top 减 1,并返回 stack[top] 中的元素。
我们还使用 enqueue() 函数将元素加入队列,使用 dequeue() 函数将元素从队列中弹出。在 enqueue() 函数中,我们首先判断队列是否已满,若未满,则将 rear 加 1,并将元素存入 queue[rear] 中。此外,在第一次向队列中加入元素时,我们需要将 front 的值设为 0。在 dequeue() 函数中,我们首先判断队列是否为空或已经出队完毕,若是,则返回 -1;否则将 front 加 1,并返回 queue[front] 中的元素。
最后,在 main() 函数中,我们演示了 push, pop, enqueue 和 dequeue 函数的使用。可以看到,在堆栈中,我们先推入了五个元素,然后再试图推入第六个元素时,由于堆栈已满,因此无法继续推入,同时我们尝试从堆栈中弹出两个元素。在队列中,我们先入列了三个元素,然后再试图入列第四个元素时,由于队列已满,因此无法继续入列,同时我们尝试从队列中出列两个元素。