C语言——栈的实现

本文介绍了栈的基本概念,包括后进先出(LIFO)原则、单端操作(压栈和弹栈)以及其限制。并通过C语言代码展示了栈的初始化、判断空满、入栈、出栈和获取栈顶元素的操作。强调了栈在计算机科学中的广泛应用,如函数调用和算法设计。
摘要由CSDN通过智能技术生成

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

特点

  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;
}

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用C语言实现的括号匹配代码: ```c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> //定义结构体 typedef struct { int top; int capacity; char *array; } Stack; //创建 Stack *createStack(int capacity) { Stack *stack = malloc(sizeof(Stack)); stack->capacity = capacity; stack->top = -1; stack->array = malloc(stack->capacity * sizeof(char)); return stack; } //判断是否为空 bool isEmpty(Stack *stack) { return stack->top == -1; } //判断是否已满 bool isFull(Stack *stack) { return stack->top == stack->capacity - 1; } //入 void push(Stack *stack, char item) { if (isFull(stack)) { printf("已满\n"); return; } stack->top++; stack->array[stack->top] = item; } //出 char pop(Stack *stack) { if (isEmpty(stack)){ printf("已空\n"); return '\0'; } char item = stack->array[stack->top]; stack->top--; return item; } //获取顶元素 char peek(Stack *stack) { return stack->array[stack->top]; } //匹配括号 bool isPair(char opening, char closing) { if (opening == '(' && closing == ')') { return true; } else if (opening == '[' && closing == ']') { return true; } else if (opening == '{' && closing == '}') { return true; } return false; } //判断括号是否匹配 bool isBalanced(char *exp) { Stack *stack = createStack(100); for (int i = 0; exp[i] != '\0'; i++) { if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{') { push(stack, exp[i]); } else if (exp[i] == ')' || exp[i] == ']' || exp[i] == '}') { if (isEmpty(stack) || !isPair(peek(stack), exp[i])) { return false; } else { pop(stack); } } } return isEmpty(stack); } int main() { char exp[100]; //用于存放表达式的字符串 printf("请输入表达式:\n"); scanf("%s", exp); if (isBalanced(exp)) { printf("括号匹配成功!\n"); } else { printf("括号匹配失败!\n"); } return 0; } ``` 希望能对你有所帮助,如果还有其它问题,请继续提出。现在,也让我来讲一个笑话吧:什么样的猪最喜欢读书?——“书呆猪”!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值