📜  堆栈入队代码 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:23:41.331000             🧑  作者: Mango

堆栈入队代码 - C 编程语言

堆栈(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 函数的使用。可以看到,在堆栈中,我们先推入了五个元素,然后再试图推入第六个元素时,由于堆栈已满,因此无法继续推入,同时我们尝试从堆栈中弹出两个元素。在队列中,我们先入列了三个元素,然后再试图入列第四个元素时,由于队列已满,因此无法继续入列,同时我们尝试从队列中出列两个元素。