顺序栈及应用

2024-08-23 13:08
文章标签 应用 顺序 栈及

本文主要是介绍顺序栈及应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考的李春葆老师的数据结构教程
#ifndef __STACK_H_
#define __STACK_H_#include <iostream>using namespace std;const int MaxSize = 100;template<class T>
class SeqStack
{
public:SeqStack();~SeqStack();bool StackEmpty();bool Pop(T &e);bool Push(T e);bool GetTop(T &e);
private:T *data;int top;
};
//
template<class T>
SeqStack<T>::SeqStack()
{data = new T[MaxSize];top = -1;
}
//
template<class T>
SeqStack<T>::~SeqStack(){}
//
template<class T>
bool SeqStack<T>::StackEmpty()
{if(top == -1)return true;elsereturn false;
}
//
template<class T>
bool SeqStack<T>::Push(T e)
{if(top == MaxSize-1)return false;else{++top;data[top] = e;return true;}
}
//
template<class T>
bool SeqStack<T>::Pop(T &e)
{if(StackEmpty())return false;else{e = data[top];top--;return true;}
}
//
template<class T>
bool SeqStack<T>::GetTop(T &e)
{if(StackEmpty())return false;else{e = data[top];return true;}
}
//
bool isSerial(int str[], int n) //判断序列str是否为一个合适的出栈序列
{int i, j ,e;int a[MaxSize];SeqStack<int> st;   //建立一个顺序栈for(i = 0; i<n; ++i)a[i] = i+1;i = 0;j = 0;while(i<n&&j<n){if(st.StackEmpty()||(st.GetTop(e)&&e!=str[j])){st.Push(a[i]);cout<<"元素"<<a[i]<<"进栈"<<endl;++i;}else{st.Pop(e);cout<<"元素"<<e<<"出栈"<<endl;++j;}}while(!st.StackEmpty()&&st.GetTop(e)&&e==str[j]){st.Pop(e);cout<<"元素 "<<e<<"出栈"<<endl;++j;}if(j == n)return true;elsereturn false;
}
void Disp(int str[],int n)      //输出str
{int i;for(i = 0;i<n; ++i)cout<<str[i];
}
//
bool isPalindrome(char str[],int n)     //判断一个字符串是否是回文串
{int i;char e;SeqStack<char> st;while(i<n)                      //将字符串入栈{st.Push(str[i]);++i;}i = 0;while(i<n){st.Pop(e);              //得到栈顶元素,并出栈if(e =! str[i])         //判断首尾是否一样return false;++i;}return true;
}
//检查输入的表达式中的括号是否匹配
bool isMatch(char str[],int n)
{int i = 0;char e;SeqStack<char> st;while(i<n){if(str[i] == '('||str[i] == '{'||str[i] == '[')//如果是左括号则入栈st.Push(str[i]);else{if(str[i] == ')'){if(!st.Pop(e))      //得到栈顶元素并出栈return false;if(e != '(')return false;   //如果左右不一样,则返回错误}if(str[i] == ']'){if(!st.Pop(e))return false;if(e != '[')return false;}if(str[i] == '}'){if(!st.Pop(e))return false;if(e != '{')return false;}}++i;}if(!st.StackEmpty())            //最后栈不为空则也不是正确的匹配return false;elsereturn true;
}
#endif // __STACK_H_#include "Stack.h"int main()
{//测试是否是合理的出栈顺序int n = 4;int str[] = {3,4,2,1};cout<<"由1~"<<n<<"产生";Disp(str,n);cout<<"的操作序列"<<endl;if(isSerial(str,n)){Disp(str,n);cout<<"是合适的出栈序列"<<endl;}else{Disp(str,n);cout<<"不是合适的出栈序列"<<endl;}//判断是否是回文串char str1[]= "abcba";if(isPalindrome(str1,5))cout<<"是回文串"<<endl;elsecout<<"不是回文串"<<endl;//判断括号是否匹配char str3[]="{【)}";if(isMatch(str3,4))cout<<str3<<"中的括号匹配"<<endl;elsecout<<str3<<"中的括号不匹配"<<endl;return 0;
}
//

这篇关于顺序栈及应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099470

相关文章

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2