【每日算法】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. 形参和实参
目录
相关文章
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
40 0
|
4月前
|
算法 测试技术
【算法】二分算法——寻找旋转排序数组中的最小值
【算法】二分算法——寻找旋转排序数组中的最小值
|
4月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
72 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
2月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
33 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
29天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
算法
数据结构与算法二:栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式
这篇文章讲解了栈的基本概念及其应用,并详细介绍了中缀表达式转换为后缀表达式的算法和实现步骤。
52 3
|
2月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
23 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
2月前
|
算法 C++
【算法单调栈】 矩形牛棚(C/C++)
【算法单调栈】 矩形牛棚(C/C++)
|
4月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组