当前位置: 首页 > article >正文

栈和队列经典例题

1.将两个栈S1和S2共享一组数组a[0,1…MAX],为了最大限度地利用数组空间,两个栈应该如何共享?给出入栈,出栈,判断栈满和判断栈空的算法。
 #include <stdio.h>
#include <stdbool.h>

#define MAX 10 // 假设最大值为10

int a[MAX + 1]; // 数组存储栈数据
int top1 = 0;   // 栈S1的栈顶指针
int top2 = MAX; // 栈S2的栈顶指针

// S1入栈
bool push1(int x) {
    if (top1 < top2) { // 检查栈是否已满
        a[top1++] = x;
        return true;
    }
    return false; // 栈已满
}

// S2入栈
bool push2(int x) {
    if (top1 < top2) { // 检查栈是否已满
        a[--top2] = x;
        return true;
    }
    return false; // 栈已满
}

// S1出栈
int pop1() {
    if (top1 > 0) { // 检查栈是否为空
        return a[--top1];
    }
    printf("Stack S1 is empty.\n");
    return -1; // 栈为空
}

// S2出栈
int pop2() {
    if (top2 <= MAX) { // 检查栈是否为空
        return a[top2++];
    }
    printf("Stack S2 is empty.\n");
    return -1; // 栈为空
}

// 判断S1是否为空
bool isEmpty1() {
    return top1 == 0;
}

// 判断S2是否为空
bool isEmpty2() {
    return top2 == MAX;
}

// 判断栈是否已满
bool isFull() {
    return top1 == top2;
}
2.已知递归函数F(m),其中div表示整除。 

 写出F(m)的递归算法。 写出F(m)的非递归算法。
#include <stdio.h>

// 递归函数 F(m)
int F_recursive(int m) {
    if (m == 0) {
        return 1;
    } else {
        return m * F_recursive(m / 2);
    }
}

int main() {
    int m;
    printf("Enter a non-negative integer m: ");
    scanf("%d", &m);
    printf("F(%d) = %d\n", m, F_recursive(m));
    return 0;
}
#include <stdio.h>

// 非递归函数 F(m)
int F_non_recursive(int m) {
    int result = 1;
    while (m > 0) {
        result *= m;
        m /= 2;
    }
    return result;
}

int main() {
    int m;
    printf("Enter a non-negative integer m: ");
    scanf("%d", &m);
    printf("F(%d) = %d\n", m, F_non_recursive(m));
    return 0;
}

http://www.kler.cn/a/510657.html

相关文章:

  • 华为HuaweiCloudStack(一)介绍与架构
  • 八大排序--冒泡排序
  • PHP 8.4 安装和升级指南
  • 网上订餐系统 javaweb项目 (完整源码)
  • Java 8 Optional类
  • QT 使用QTableView读取数据库数据,表格分页,跳转,导出,过滤功能
  • Git版本控制 – 创建和维护项目Repository
  • 数据结构漫游记:队列的动态模拟实现(C语言)
  • Python基础06(字符串格式化/操作方法)
  • Node.js 到底是什么
  • 微服务学习-OpenFeign 简化服务间调用
  • 【第二十周】U-Net:用于生物图像分割的卷积神经网络
  • ARM GCC编译器
  • LeRobot安装教程
  • [实现Rpc] 环境搭建 | JsonCpp | Mudou库 | callBack()
  • VUE学习笔记(入门)17__小黑记事本综合案例
  • Oracle 深入学习 Part12: Managing Indexes (管理索引)
  • A Dual-Module Denoising Approach 解读
  • ES6是什么
  • Agentic AI 和 AI Agent 之间的区别(ChatGPT回答)
  • 【2024年华为OD机试】(B卷,100分)- 计算最接近的数 (Java JS PythonC/C++)
  • 【专题二 二叉树中的深搜】230. 二叉搜索树中第K小的元素
  • 微软宣布Win11 24H2进入新阶段!设备将自动下载更新
  • pycharm python pyqt5
  • 豪越科技消防一体化安全管控平台:推动消防作训模式智慧转型
  • Liunx搭建KVM私有虚拟主机