【每日算法】AB1 基于数组的栈的实现

简介: AB1 基于数组的栈的实现

一、代码

#include <iostream>
#include <string.h>
using namespace std;

struct stack {
    long data[100001];
    int top;
} stack;

void init(struct stack& stack) {
    stack.top = 0;
}

void push(struct stack& stack, int a) {
    stack.data[stack.top] = a;
    stack.top ++;
}

int pop(struct stack& stack) {
    if (stack.top == 0) {
        return -1;
    } else {
        stack.top --;
        return stack.data[stack.top];
    }
}

int top(struct stack& stack) {
    if (stack.top == 0) {
        return -1;
    } else {
        return stack.data[stack.top - 1];
    }
}

int main() {
    int cnt;
    cin >> cnt;
    int data;
    string op;
    struct stack stack_;
    init(stack_);
    while (cnt--) { // 注意 while 处理多个 case
        cin >> op;
        if (op == "push") {
            cin >> data;
            push(stack_, data);
        } else if (op == "pop") {
            if (stack_.top == 0) {
                cout << "error" << endl;
            } else {
                int ret = pop(stack_);
                cout << ret << endl;
            }
        } else if (op == "top") {
            if (stack_.top == 0) {
                cout << "error" << endl;
            } else {
                int ret = top(stack_);
                cout << ret << endl;
            }
        }
    }
}

二、问题总结:

  1. 起初发现调用函数后栈成员的值并没有改变,才想起来形参和实参的区别:

C程序函数参数会出现在两个地方:函数定义处(形参)、函数调用处(实参),进行函数调用时,形参入栈,实参赋值给形参,函数返回时,形参出栈。因此,如果想要改变main函数中定义的stack_的成员变量,仅把结构体赋值给形参是不够的,应该:
①将结构体的地址赋值给形参,这样函数才可以修改对应地址的变量的值。
②或者,传引用(如以上代码),把对实参的引用传入函数,不会新建变量

  1. 段错误:又是它,这次是因为数组设太小了,好说,设大点就好了

三、复习知识点

  1. 函数传参:传值、传址、传引用
  2. 形参和实参
目录
相关文章
|
1月前
|
算法 测试技术
【算法】二分算法——寻找旋转排序数组中的最小值
【算法】二分算法——寻找旋转排序数组中的最小值
|
1月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
3月前
|
算法 C语言
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
|
1月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
1月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
1月前
|
算法
【算法】模拟算法——外观数组(medium)
【算法】模拟算法——外观数组(medium)
|
1月前
|
算法
【算法】栈算法——逆波兰表达式求值
【算法】栈算法——逆波兰表达式求值
|
1月前
|
存储 算法
【算法】栈算法——最小栈
【算法】栈算法——最小栈
|
1月前
|
算法
【算法】栈算法——栈的压入、弹出序列
【算法】栈算法——栈的压入、弹出序列
|
1月前
|
算法
【算法】前缀和——除自身以外数组的乘积
【算法】前缀和——除自身以外数组的乘积