您现在的位置是:首页 > 正文

栈基础操作1--顺序栈的实现

2024-02-01 03:01:31阅读 1
//top指针指的是一个空格
#include<iostream>
#define MaxSize 200//顺序栈最大长度
using namespace std;
typedef  int SElemType;//数据类型
typedef struct {
	SElemType *base;//栈底
	SElemType *top;//栈顶
	int stackSize;//栈最大容量
}SqStack;
//顺序栈顶留空
//1.初始化
bool InitStack(SqStack &S) {
	//空栈
	S.base = new SElemType[MaxSize];
	if (!S.base)	return false;
	S.top = S.base;
	S.stackSize = MaxSize;
	return true;
}
//2.入栈
bool Push(SqStack &S, SElemType e) {//栈顶插入e
	if (S.top - S.base == MaxSize)
		return false;//栈满
	*S.top++ = e;//top指针指的是一个空格
	return true;
}
//3.出栈
bool Pop(SqStack &S, SElemType &e) {//栈顶出栈
	if (S.top != S.base) {//栈非空
		e = *--S.top;
		return true;
	}
	else
		return false;
}
//4.取栈顶元素,不出栈
SElemType GetTop(SqStack S) {
	if (S.top != S.base) {//栈非空
		return *(--S.top);//return *(S.top - 1);
	}
	else return NULL;
}
//5.遍历栈
void GetAll(SqStack S) {
	int time = 0;
	while (S.top != S.base) {//栈非空,判空的条件
		cout << *(--S.top) << " ";
		++time;
	}
	cout << "\n栈元素数量" << time << endl;
}
int main() {
	SqStack S; SElemType e;
	if (InitStack(S))cout << "Succeed" << endl;
	else cout << "Failed" << endl;
	//入栈
	cout << "input e:\t";
	while (cin >> e) {//按"ctrl+z"结束输入
		Push(S, e);
		cout << "input e:\t";
	}
	cout << "栈顶元素为" << GetTop(S) << endl;
	cout << "栈所有元素为" << endl;
	GetAll(S);
	//出栈
	if (Pop(S, e))
		cout << "移除的元素是" << e << endl;
	else cout << "栈空" << endl;
	cout << "栈剩下所有元素为" << endl;
	GetAll(S);
	return 0;
}

网站文章

  • Solr配置停止词/排除词 stopwords(mmseg版)

    Solr配置停止词/排除词 stopwords(mmseg版)

    停止词是无功能意义的词,比如is 、a 、are 、”的”,“得”,“我” 等,这些词会在句子中多次出现却无意义,所以在分词的时候需要把这些词过滤掉。 测试于:Solr 4.5.1, mmseg4j 1.9.1, Jdk 1.6.0_45, Tomcat 6.0.37 | CentOS 5.7 我这里拿名为test的core做例子。 准备停止词 在solr home下建dic目录,

    2024-02-01 03:01:24
  • Flutter路由跳转父级页面向子页面传参及子页面向父级页面传参

    Flutter路由跳转父级页面向子页面传参及子页面向父级页面传参

    Flutter中页面通过路由跳转传参主要分两种,一种是通过push()跳转时根据设定的参数进行传参,另一种是通过pop()返回时进行传参。父级页面向子页面push()传参假设从A页面跳到B页面可能需要携带参数userName和userAge这两个参数,那么需要在B页面先设置这两个参数名;假设userName必须填而userAge非必需,那么可以通过设置@required其为必填选项:...

    2024-02-01 03:01:19
  • 具体说一下Python编码的来源和使用方法

    Python编码来源于Guido van Rossum,是一种高级编程语言,可以用来开发网站、网络服务、后台应用程序和软件等。使用Python编码的方法是先安装Python编程环境,然后使用编译器和解释器来编写、编译、执行和调试Python代码,最后在Python解释器中运行程序。...

    2024-02-01 03:00:52
  • STM32常见错误

    一、 在“Debug选项卡”下设置好仿真器的类型后,下载程序时却提示“No ULINK Device found.”    解决办法: Keil MDK默认使用ULINK仿真器下载程序,在“Utilities选项卡”下把编程所使用的仿真器改为相应的类型即可。 二、 编译工程时提示如下信息: main.axf: Error: L6218E: Undefined symbol

    2024-02-01 03:00:44
  • sql server中的存储过程调试

    调试: 在SQL QUERY中—》对象浏览器—》存储过程—》选择要调试的存储过程—》右击—》选择调试(debug)—》输入参数—》--设置完你的参数值后--点击执行,就是出现一个浮动工具条,上面有单步执行,断点设置等 ---跟踪 : 开始-&gt;程序-&gt;MS SQLSERVER-&gt;事件探查器(SQL Profiler)--&gt;文件--&gt;新建--&gt;跟踪就可以...

    2024-02-01 03:00:39
  • error LNK2005: 找到一个或多个多重定义的符号已经在xxxx.obj中定义的解决方法

    总结一下,当我们在进行C/C++编程时,如果出现error LNK2005错误提示&quot;找到一个或多个多重定义的符号已经在xxxx.obj中定义&quot;时,通常表示在多个源文件中定义了相同的...

    2024-02-01 02:59:52
  • 【题解】UVA1252:Twenty Questions

    @vjudge 状压 可以这样设计状态 dfs(s,a)dfs(s,a)dfs(s,a)表示当前已经猜测的集合,目前还没有确定的数在sss集合里面的共同特征为aaa,还要猜几次 枚举下一次猜的位为kk...

    2024-02-01 02:59:43
  • 什么是loadsh

    什么是loadsh这个概念真不知道?但是如果你说防抖和节流那是必须知道,用别的名字我反而不知是何东东。js call、apply、bind_如花菇凉的博客-CSDN博客================...

    2024-02-01 02:59:34
  • 防止表单重复提交

    比如在购物网站支付的时候,就要避免表单重复提交。解决这个问题,可以从两个方面考虑。(1)前端a.提交之后,利用js将提交按钮禁用掉。b.提交之后,在一个新标签页打开一个页面,也就是用户的当前页面已经不再是提交页面了。(2)后端a。在提交页中隐藏一个字段值,然后在后端页面中,根据这个值来判断是否已经提交过了。b。利用数据库来防止重复提交。例如,购物账单,付款之后,会往数据

    2024-02-01 02:59:00
  • LeetCode爬楼梯

    LeetCode爬楼梯

    2024-02-01 02:58:47