C语言——栈的实现

栈---类似于实现制的线性表----只能从一端经行插入删除

特点

  1. 后进先出(Last In First Out,LIFO):栈遵循后进先出的原则,即最后一个进入栈的元素将是第一个被移除的元素。
  2. 单端操作:栈只允许在栈顶进行插入和删除操作。这种操作通常被称为压栈(push)和弹栈(pop)。
  3. 受限的随机访问:栈中的元素只能通过栈顶访问,不能直接访问其他元素。
  4. 适用于简单的数据结构:栈只具有插入和删除元素的功能,不支持排序和查找等操作。
  5. 应用广泛:栈在计算机科学中有着广泛的应用,例如在函数调用、递归、深度优先搜索等领域。

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

#define MAX_SIZE 100  // 定义栈的最大容量

typedef struct Stack {
    int data[MAX_SIZE];
    int top;  // 栈顶指针
} Stack;

// 初始化栈
void initStack(Stack* stack) {
    stack->top = -1;
}

// 判断栈是否为空
bool isEmpty(Stack* stack) {
    return stack->top == -1;
}

// 判断栈是否已满
bool isFull(Stack* stack) {
    return stack->top == MAX_SIZE - 1;
}

// 入栈操作
bool push(Stack* stack, int value) {
    if (isFull(stack)) {
        printf("栈已满,无法入栈。\n");
        return false;
    }
    stack->data[++stack->top] = value;
    return true;
}

// 出栈操作
bool pop(Stack* stack, int* value) {
    if (isEmpty(stack)) {
        printf("栈为空,无法出栈。\n");
        return false;
    }
    *value = stack->data[stack->top--];
    return true;
}

// 获取栈顶元素
bool getTop(Stack* stack, int* value) {
    if (isEmpty(stack)) {
        printf("栈为空。\n");
        return false;
    }
    *value = stack->data[stack->top];
    return true;
}

int main() {
    Stack stack;
    initStack(&stack);

    push(&stack, 1);
    push(&stack, 2);
    push(&stack, 3);

    int topValue;
    getTop(&stack, &topValue);
    printf("栈顶元素:%d\n", topValue);

    int popValue;
    pop(&stack, &popValue);
    printf("出栈元素:%d\n", popValue);

    return 0;
}

相关推荐

  1. C语言——实现

    2024-01-26 11:34:04       36 阅读
  2. C/C++】C语言实现顺序

    2024-01-26 11:34:04       11 阅读
  3. C语言中顺序实现与表示

    2024-01-26 11:34:04       33 阅读
  4. C语言中链表示和实现

    2024-01-26 11:34:04       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 11:34:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 11:34:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 11:34:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 11:34:04       20 阅读

热门阅读

  1. Nginx location 使用正则匹配路径

    2024-01-26 11:34:04       35 阅读
  2. 前端学习-0125

    2024-01-26 11:34:04       33 阅读
  3. 服务器宝塔安全需要修改的设置

    2024-01-26 11:34:04       37 阅读
  4. UnityUI看向相机

    2024-01-26 11:34:04       33 阅读
  5. mysql更新charset

    2024-01-26 11:34:04       29 阅读
  6. sealos apt&&yum安装 && sealos 部署k8s

    2024-01-26 11:34:04       37 阅读
  7. GET基于报错的sql注入利用-脱库

    2024-01-26 11:34:04       36 阅读
  8. 优雅的控制协程(goroutine)的并发数量

    2024-01-26 11:34:04       33 阅读