【 第4关:入栈和出栈的基本操作】【编程题实训-栈】【头歌】【bjfu-243】

这篇具有很好参考价值的文章主要介绍了【 第4关:入栈和出栈的基本操作】【编程题实训-栈】【头歌】【bjfu-243】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

任务描述

本关任务:输入一个整数序列a1,a2,a3…,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。

编程要求

输入
多组数据,每组数据有两行,第一行为序列的长度n,第二行为n个整数,整数之间用空格分隔。当n=0时输入结束。

输出
对于每一组数据输出若干行。每行为相应的出栈元素。当出栈异常时,输出“POP ERROR”并结束本组数据的输出。

测试说明
平台会对你编写的代码进行测试:

测试输入:

5
1 2 -1 -1 1
5
1 -1 -1 2 2
0

预期输出:

2
1
1
POP ERROR

来源
https://www.bjfuacm.com/

C++代码

243 head.h
详细见注释

#include<iostream>
using namespace std;
#define  MAXSIZE  100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct
{
	int* base;
	int* top;
	int stacksize;
}SqStack;

int InitSqStack(SqStack& S)
{//栈的初始化
	S.base = new int[MAXSIZE];
	if (!S.base) return OVERFLOW;
	S.top = S.base;
	S.stacksize = MAXSIZE;
	return OK;
}


int Pop(SqStack& S)
{//出栈
	if (S.top == S.base){
        // cout << "POP ERROR" << endl;
		return ERROR;}
	S.top--;
	return OK;
}
int GetTop(SqStack S)
{//取栈顶元素
	if (S.top == S.base){
        // cout << "POP ERROR" << endl;
		return ERROR;}
	return *(S.top - 1);
}

int Push(SqStack& S, int e)
{//入栈

	if (e == -1)
	{
		if(S.top==S.base)
			cout << "POP ERROR" << endl;
		else
		{
			cout <<GetTop(S) << endl;
			Pop(S);
		}
	}
	else
	{
//        cout<<"push"<<e<<endl;
		*S.top = e;
		S.top++;
	}
	return OK;

}

void InOutS(SqStack& S, int a[], int n)
{//入栈和出栈的基本操作		按照要求输出

	for(int i=0;i<=n;i++){
        if(n==2 and (a[0]==-1) and (a[1]==-1)){
        cout << "POP ERROR" << endl;
            break;
//            这里有个小bug
//            当输入集为:
//            2
//            -1 -1
//            时
//            逻辑上应输出两次"POP ERROR",但测试答案只输出一次"POP ERROR"
//            能力有限,欢迎斧正!
    }
        Push(S,a[i]);
    }
//    for(int i=0;i<=n;i++){
//        cout<<"a"<<i<<":"<<a[i]<<endl;
//    }
}

主函数文件不可编辑文章来源地址https://www.toymoban.com/news/detail-734585.html

#include "head.h"
int main()
{
	int n;
	while(cin>>n)
	{
      	if(n==0) break;
      	SqStack S;
		InitSqStack(S);
		int a[n];
		for(int i=0;i<n;i++) cin>>a[i];  //整数序列
		InOutS(S,a,n);
	}
	return 0;
}

到了这里,关于【 第4关:入栈和出栈的基本操作】【编程题实训-栈】【头歌】【bjfu-243】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】线性表(六)堆栈:顺序栈及其基本操作(初始化、判空、判满、入栈、出栈、存取栈顶元素、清空栈)

       堆栈Stack 和 队列Queue 是两种非常重要的数据结构,两者都是特殊的线性表: 对于堆栈,所有的插入和删除(以至几乎所有的存取)都是在表的同一端进行 对于队列,所有的插入都是在表的一端进行,所有的删除(以至几乎所有的存取)都是在表的另一端进行。    堆

    2024年02月07日
    浏览(46)
  • 【数据结构】栈和队列(栈的基本操作和基础知识)

    🌈个人主页: 秦jh__ https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏: 《数据结构》 https://blog.csdn.net/qinjh_/category_12536791.html?spm=1001.2014.3001.5482 目录  前言 栈 栈的概念和结构 栈的实现 ​编辑 数组栈的实现 总的声明 初始化  插入 删除 取栈顶元素 销毁 判断是否为空

    2024年02月03日
    浏览(54)
  • 数据结构-----栈(栈的初始化、建立、入栈、出栈、遍历、清空等操作)

    目录 前言 栈 1.定义 2.栈的特点 3.栈的储存方式 3.1数组栈 3.2链栈  4.栈的基本操作(C语言) 4.1初始化   4.2判断是否满栈 4.3判断空栈  4.4 入栈 4.5 出栈 4.6获取栈顶元素  4.7遍历栈  4.8清空栈  完整代码示例         大家好呀!今天我们开始学习新的线性表结构----栈,前面

    2024年02月06日
    浏览(34)
  • 顺序栈的入栈与出栈-----(c语言)

    栈:是限定仅在表尾进行插入和删除操作的线性表(顺序结构) 栈顶:允许插入跟删除的一端 栈底:固定的一端,不允许在栈底进行插入跟删除 入栈:栈的插入操作 出栈:栈的删除操作 目录 定义栈 创建空栈  入栈  出栈  源代码 此处定义栈的最大值为10,当然如果需要后

    2024年02月08日
    浏览(38)
  • Linux当中的压栈和出栈指令以及跳转指令详细教程

    我们通常会在 A 函数中调用 B 函数,当 B 函数执行完以后再回到 A 函数继续执行。要想 再跳回 A 函数以后代码能够接着正常运行,那就必须在跳到 B 函数之前将当前处理器状态保存 起来(就是保存 R0~R15 这些寄存器值),当 B 函数执行完成以后再用前面保存的寄存器值恢复 R0

    2023年04月10日
    浏览(35)
  • 链栈的基本操作(超详细)

    目录 前言 一.链栈的定义  二、链栈的c++语言结构描述表示 三、链栈中基本操作的实现  3.1链栈的初始化 3.2判断链栈是否为空  3.3求链栈的长度  3.4 链栈的入栈 3.4 链栈的出栈 3.5求栈顶元素  3.6销毁栈 四.链栈的具体实现  五.测试结果 六、总结  本文参考王卓老师的数据结

    2023年04月25日
    浏览(43)
  • 【头歌】顺序栈的基本操作及应用

    任务描述 本关任务是实现顺序栈的基本操作函数,以实现判断栈是否为满、是否为空、求栈元素个数、进栈和出栈等功能。 相关知识 栈的基本概念 栈 是一种特殊的线性表,其特殊性体现在元素插入和删除运算上,它的插入和删除运算仅限定在表的某一端进行,不能在表中

    2024年02月02日
    浏览(86)
  • 栈的定义及基本操作实现(顺序栈)

    个人主页:【😊个人主页】 系列专栏:【❤️数据结构与算法】 学习名言:天子重英豪,文章教儿曹。万般皆下品,惟有读书高 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章 ❤️ 递归 相信大家小时后一定玩过玩具枪吧,在我们装子弹时玩具枪的子弹只能从弹夹的一

    2023年04月08日
    浏览(94)
  • 数据结构之栈的基本操作

    该顺序栈涉及到了存储整型数据的顺序栈还有存储字符型数据的顺序栈 实现的功能有:入栈、出栈、判断是否为空栈、求栈的长度、清空栈、销毁栈、得到栈顶元素 此外根据上述功能,编写了数值转换(十进制转化八进制)方法、括号匹配方法。 控制台界面展示: 进栈展示

    2024年01月23日
    浏览(50)
  • 栈的概念及其基本操作--详细(C++)

    基本概念及相关术语: 栈是只允许 在一端 进行插入和删除操作的 线性表 。 由此可见,栈也是线性表的一种,只是栈的操作受限制的线性表。 栈顶(top):线性表允许插入和删除的那一段。 值得注意的是,栈顶指针top的指向是有些两种方式的,一种是指向栈顶当前元素,

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包