(蒟蒻第一篇博客)

磕了蛮久一道题。

描述

请你实现一个栈。

操作:

push x:将 加x\x 入栈,保证 x\x 为 int 型整数。

pop:输出栈顶,并让栈顶出栈

top:输出栈顶,栈顶不出栈

输入描述:

第一行为一个正整数 n\n ,代表操作次数。(1 \leq n \leq 100000)(1≤n≤100000)

接下来的 n\n ,每行为一个字符串,代表一个操作。保证操作是题目描述中三种中的一种。

输出描述:

如果操作为push,则不输出任何东西。

如果为另外两种,若栈为空,则输出 "error“

否则按对应操作输出。

按照数据结构书上编写了基本操作函数,遇到了很多问题,大多数是在将思路转换为C语言的过程中出现的问题:

1、使用bool类型,出现的false,true在C语言中需要声明库函数<stdbool.h>,否则会报错,将源文件改为.cpp文件后,不声明库函数也不会报错。

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>//使用bool型
#include<string.h>
#define MAXSIZE 100000
#define Elemtype int//进栈
bool Push(SqStack* S, int x)
{if (S->top == MAXSIZE - 1)return false;elseS->data[++S->top] = x;return true;
}

2、在C语言中,函数参数无法使用&符,类似数据结构书上pop函数的写法无法通过,只能通过*,指针来带回数据

//出栈
int Pop(SqStack* S) {if (S->top == -1)return -1;else{return S->data[S->top--];}return 0;
}

3、我原本使用的出栈函数对测试数据无法全部通过,数据太多(100000),无法一一排查,只能看了题解进行改编。原本的pop函数如下:

//出栈
bool Pop(SqStack* S, int *x) {if (S->top == -1)return false;else{*x=S->data[S->top--];}return true;
}

识别pop功能的代码:

else if (strcmp(str, "pop") == 0){if (S->top == -1)printf("error\n");else {int* x = (int*)malloc(sizeof(int));Pop(S, x);printf( "%d\n",*x );}}

不知何处出了问题,改了pop函数之后,所有测试数据能全部通过。

4、通过的代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
//栈的练习01#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>//使用bool型
#include<string.h>
#include<ctype.h>
#define MAXSIZE 100000
#define Elemtype inttypedef struct SqStack
{int data[MAXSIZE];//存放栈中元素int top;//栈顶指针
}SqStack;//初始化函数
void InitStack(SqStack *S) //*S表示栈的什么呢?
{S->top= -1;
}//进栈
bool Push(SqStack* S, int x)
{if (S->top == MAXSIZE - 1)return false;elseS->data[++S->top] = x;return true;
}//出栈
int Pop(SqStack* S) {if (S->top == -1)return -1;else{return S->data[S->top--];}return 0;
}int main()
{int n=0;//操作次数SqStack *S=(SqStack *)malloc(sizeof(SqStack));InitStack(S);//初始化栈scanf("%d", &n);for (int i = 0; i < n; i++){char str[5] = { 0 };int e;scanf("%s", str);if (strcmp(str, "push") == 0){          scanf("%d", &e);Push(S, e);}else if (strcmp(str, "pop") == 0){if (S->top == -1)printf("error\n");else {printf( "%d\n",Pop(S) );}}else if (strcmp(str, "top") == 0){if (S->top == -1)printf("error\n");elseprintf("%d\n", S->data[S->top]);}}return 0;
}

牛客算法入门-AB1【模板】 栈相关推荐

  1. 2020年牛客算法入门课练习赛1

    第k小数 链接:https://ac.nowcoder.com/acm/contest/12144/A 来源:牛客网 题目描述 给你一个长度为n的序列,求序列中第k小数的多少. 输入描述: 多组输入, ...

  2. 2020年牛客算法入门课练习赛1【完结】

    感觉题挺不错的,自己也觉得做过很多题了,但是做这一套题还是有的题有些许不会. 目录 第k小数[难度: 简单 / 快排] 不平行的直线[难度: 简单 / 数学] 丢手绢[难度: 一般 / 取尺法 双指针 ...

  3. 牛客算法周周练2 B Music Problem(DP,抽屉原理,二进制拆分)

    链接:https://ac.nowcoder.com/acm/contest/5203/B 来源:牛客网 题目描述 Listening to the music is relax, but for o ...

  4. 牛客算法竞赛入门笔记1

    2021-10-20:昨天开的新坑,看了前几集感觉还可以,后悔为什么没早点跟着学,以前就感觉到了自己的知识体系太散了,这个课好像是11月还是12月结束,她说能达到icpc铜牌水平,我姑且相信好吧,希望 ...

  5. 牛客算法竞赛入门笔记2

    优先队列.并查集 Running Median (nowcoder.com) 题意:给你n个数,算出前i个数的中位数. 这题挺善良的,只让输出奇数个的时候的中位数,不然可太麻烦了,我们维护两个优先队列 ...

  6. 仿牛客网社区项目 全栈总结

    学习仿牛客网社区项目 代码&资源 各章节总结 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 争取让每个知识点都有链接可点 项目总结 网站架构图 常见面试题 MySQL Red ...

  7. 牛客算法周周练11 A.切题之路 签到题

    链接:https://ac.nowcoder.com/acm/contest/6046/A 来源:牛客网 题目描述 众所周知,SD省有一个可爱的妹子,叫做rqy(rqy天下第一可爱!不接受反驳,抱走r ...

  8. 牛客算法周周练11A - 切题之路(阅读理解)

    链接:https://ac.nowcoder.com/acm/contest/6046/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...

  9. [牛客算法总结]:青蛙跳台阶

    标签: 递归.记忆化搜索.动态规划 题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果). 数据范围:1 \leq n \l ...

最新文章

  1. matlab心电图诊断系统,ECG-diag MATLAB心电图自动诊断程序 联合开发网 - pudn.com
  2. php教程源码分享,php教程|php源码|php学习
  3. 利物浦大学comp313课程第一节课
  4. spring-boot使用spring-security进行身份认证(1)
  5. Linux如何搭建服务器eb,Linux下CRMEB环境搭建
  6. python基于opencv的手势识别_怎么在Python3.5 中利用OpenCV实现一个手势识别功能
  7. 值得玩味儿的14个Python编程小技巧
  8. (26)VHDL实现或(数据流描述)
  9. idea 快捷删除移动_21个极大提高开发效率的VS Code快捷键
  10. 清除子节点、创建子节点函数
  11. Child returned status 1问题解决
  12. 灵动ICPC冬令营基础-5
  13. 阿里天池比赛——食物声音识别
  14. (纪录片)光的故事 BBC Light Fantastic (2004)
  15. 利用python画分形图_「分形」python简单的分形图片 - seo实验室
  16. python ln()怎么实现_python循序渐进_python简介
  17. 数据结构《顺序栈》知识点详解+C语言完整代码-超详细
  18. 宅男福利!我用Python做了一个B站跳舞的小姐姐,满屏的美腿!
  19. 关于因和数据库库断开数据源没有自动重连变无效的问题
  20. 假装自己是“黑客”二

热门文章

  1. Java数据结构和算法(第二版)
  2. 移动支付代理有前途吗
  3. 市场调研报告-全球与中国便携式LCR表市场现状及未来发展趋势
  4. 如何统计项目代码(比如微信小程序等等)
  5. Java之I/O流小结
  6. 爸爸说我学不好数学,干不了程序员。
  7. aspose-words轻松使用
  8. #systemverilog# $time,$stime,$realtime的使用
  9. 京东CSS初始化及理解
  10. 01、Java基础知识