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

【PTA数据结构 | C语言版】链式栈的3个操作

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

    • 题目
    • 代码

题目

请编写程序,将 n 个整数顺序压入容量无限制的(链式)栈,随后执行 n+1 次取顶并出栈的操作。

输入格式:
输入首先在第一行给出正整数 n;随后一行给出 n 个 int 范围内的整数,数字间以空格分隔。题目保证有 n 个元素的(链式)栈不会超过题目的空间限制。

输出格式:
将输入的 n 个整数顺序压入栈,随后执行 n+1 次取顶并出栈的操作,输出取出的元素的值,每行一个。
注意:当栈为空时,取顶和出栈操作应该不执行,并在一行中输出错误信息 错误:栈为空。。空栈取顶应返回 -1。

输入样例:
5
1 2 3 4 5

输出样例:
5
4
3
2
1
错误:栈为空。
-1
错误:栈为空。

代码

#include <stdio.h>
#include <stdlib.h>// 定义栈节点结构
typedef struct StackNode {int data;struct StackNode* next;
} StackNode;// 定义栈结构
typedef struct {StackNode* top;
} Stack;// 初始化栈
void initStack(Stack* s) {s->top = NULL;
}// 判断栈是否为空
int isEmpty(Stack* s) {return s->top == NULL;
}// 入栈操作
void push(Stack* s, int value) {StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));newNode->data = value;newNode->next = s->top;s->top = newNode;
}// 出栈操作
int pop(Stack* s) {if (isEmpty(s)) {printf("错误:栈为空。\n");return -1;}StackNode* temp = s->top;int data = temp->data;s->top = temp->next;free(temp);return data;
}// 获取栈顶元素
int peek(Stack* s) {if (isEmpty(s)) {printf("错误:栈为空。\n");return -1;}return s->top->data;
}int main() {Stack s;initStack(&s);int n;scanf("%d", &n);// 压入n个元素for (int i = 0; i < n; i++) {int num;scanf("%d", &num);push(&s, num);}// 执行n+1次取顶和出栈for (int i = 0; i < n + 1; i++) {int top_val = peek(&s);if (top_val != -1) {printf("%d\n", top_val);} else {printf("%d\n", -1);}pop(&s);}return 0;
}    
http://www.dtcms.com/a/272272.html

相关文章:

  • linux 4.14 kernel屏蔽arm arch timer的方法
  • 网络编程与自动化
  • 高亚科技签约奕源金属,助力打造高效智能化采购管理体系
  • Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用
  • 在 Ubuntu 上安装和配置 Kafka
  • 下一代防火墙-终端安全防护
  • 普林斯顿大学DPPO机器人学习突破:Diffusion Policy Policy Optimization 全新优化扩散策略
  • Eigen 几何模块深拆:Isometry3d vs Affine3d + 变换矩阵本质详解
  • OSPF协议:核心概念与配置要点解析
  • 虚拟项目[3D物体测量]
  • 从真人到数字分身:3D人脸扫描设备在高校数字人建模教学中的应用
  • 强化学习 MDP
  • Selenium 4 教程:自动化 WebDriver 管理与 Cookie 提取 || 用于解决chromedriver版本不匹配问题
  • 《PyQt6-3D:开启Python 3D开发新世界》
  • Windows Edge 播放 H.265 视频指南
  • OpenAI正准备推出一款搭载人工智能功能的网络浏览器,试图直接挑战Alphabet旗下
  • 前端面试专栏-算法篇:21. 链表、栈、队列的实现与应用
  • NAT技术(网络地址转换)
  • 【实战】使用 ELK 搭建 Spring Boot Docker 容器日志监控系统
  • OSPF实验以及核心原理全解
  • 【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知
  • HP EVA SAN 数据恢复利器:Data recovery plugin for HP StorageWorks EVA
  • 前端项目集成husky + lint-staged + commitlint
  • Web-Bench:基于web标准和框架的benchmark
  • Fiddler中文版全面评测:功能亮点、使用场景与中文网资源整合指南
  • 什么是强化学习(RL)--2
  • 如何在VMware里的飞牛OS访问主机里面图片文件夹
  • 【运维实战】解决 K8s 节点无法拉取 pause:3.6 镜像导致 API Server 启动失败的问题
  • 【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(三)
  • 华为昇腾NPU与NVIDIA CUDA生态兼容层开发实录:手写算子自动转换工具链(AST级代码迁移方案)