首页 > 其他分享 >顺序栈功能函数(包括判断回文、数值转化、括号匹配)

顺序栈功能函数(包括判断回文、数值转化、括号匹配)

时间:2024-04-07 14:59:23浏览次数:16  
标签:case return cout Sqstack break 括号 匹配 OK 回文

一,具体代码

#include<iostream>
#include<stdlib.h>
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int ElemType;
typedef int Status;
typedef struct 
{
    ElemType *elem;
    int top;
}Sqstack;
Status InitStack(Sqstack &S);
Status Push(Sqstack &S,ElemType e);
Status Pop(Sqstack &S,ElemType &e);
Status GetPop(Sqstack S,ElemType &e);
Status StackEmpty(Sqstack S);
void Show(Sqstack S);
//初始化
Status InitStack(Sqstack &S)
{
    S.elem=new ElemType[MAXSIZE];
    if(!S.elem) return ERROR;
    S.top =-1;
    return OK;
 } 
//入栈
Status Push(Sqstack &S,ElemType e)
{
    if(S.top ==MAXSIZE-1)  return ERROR;
    S.top++;
    S.elem[S.top]=e;
    return OK; 
 } 
//出栈
Status Pop(Sqstack &S,ElemType &e)
{
    if(S.top==-1) return ERROR;
    e=S.elem[S.top];
    S.top--;
    return OK;

//取栈顶元素
Status GetPop(Sqstack S,ElemType &e)
{
    if(S.top==-1) return ERROR;
    e=S.elem [S.top];
    return OK;
 } 
//判断栈是否为空 
Status StackEmpty(Sqstack S)
{
    if(S.top==-1)
    return OK;
    else
    return ERROR;
}
//输出元素
void Show(Sqstack S)
{
    if(S.top==-1)
    {
        cout<<"没有数据"<<endl;
        return ;
    }
    while(S.top!=-1)
    {
        cout<<S.elem[S.top]<<" ";
        S.top--;
    }
    cout<<endl;
 } 

//数值转换
void Conversion(int N,int r)
{
    Sqstack S;
    ElemType e;
    InitStack(S);
    while(N)
    {
        Push(S,N%r);
        N=N/r;
    }    
    while(StackEmpty(S)==ERROR)
    {
        Pop(S,e);
        if(e>9){
            switch(e)
            {
                case 10:printf("A");break;
                case 11:printf("B");break;
                case 12:printf("C");break;
                case 13:printf("D");break;
                case 14:printf("E");break;
                case 15:printf("F");break;
            }
        }
        else 
        cout<<e;
    }
    cout<<endl;

//回文判断
Status Huiwen(char str[ ])
{
    Sqstack S;
    int i;
    ElemType e;
    InitStack(S);
    for(i=0;str[i]!='\0';i++)
    {
        Push(S,str[i]);
    }
    for(i=0;str[i]!='\0';i++)
    {
        Pop(S,e);
        if(e!=str[i])
        return ERROR;
    }
    return OK;
 } 

//括号匹配
Status March(char ch[])
{
    Sqstack S;
    ElemType e;
    int i=0;
    int flag=1;
    InitStack(S);
    while(ch[i]!='\0'&&flag==1)
    {
        if(ch[i]=='(') Push(S,ch[i]);
        if(ch[i]==')')  
        {
            if(GetPop(S,e)==OK&&e=='(')
             Pop(S,e);
             else flag=0;
        }
        i++;    
    }    
    if(StackEmpty(S)==OK&&flag==1) 
    return OK;
    else
    return ERROR;

int main()
{
    Sqstack S;
    ElemType e;
    int choice;
    char ch[MAXSIZE];
    char str[MAXSIZE];
    int n,N,r,i;
    while(1)
    {
        cout<<"1、初始化  2、入栈  3、出栈  4、显示"<<endl;
        cout<<"5、判断栈空  6、取栈顶元素  0、退出"<<endl;
        cout<<"7,、数值转换  8、判断回文   9、括号匹配"<<endl;
        cout<<"输入选项=";
        cin>>choice;
        switch(choice)
        {
        case 1:
            InitStack(S);
            cout<<"初始化成功!"<<endl;
            break;
        case 2:
            cout<<"入栈数据=";
            cin>>e;
            if(Push(S,e)==OK)
            cout<<"输入成功!"<<endl;
            else 
            cout<<"输入失败!"<<endl;
            break;
        case 3:
               if(Pop(S,e)==OK)
               {
                   cout<<"出栈成功!"<<endl;
                   cout<<"出栈数据="<<e<<endl;
               }
            else
            cout<<"出栈失败!"<<endl;
            break;
        case 4:
            Show(S);
            break;
        case 5:
             if(StackEmpty(S)==OK)
                 cout<<"栈空!"<<endl;
            else 
                cout<<"栈非空!"<<endl;
            Show(S);
            break;
        case 6:
            if(GetPop(S,e)==OK)
            {
                cout<<"栈顶元素="<<e<<endl; 
            }
            else
            cout<<"栈空!"<<endl;
            break;
        case 7:
            cout<<"转换的数=";
            cin>>N;
            cout<<"转换进制=";
            cin>>r;
            Conversion(N,r);
            break;
        case 8:
            cout<<"字符长度=";
            cin>>n;
            cout<<"输入字符:";
            cin>>str;
            if(Huiwen(str)==OK)
            cout<<"是回文"<<endl;
            else
            cout<<"不是回文"<<endl;
            break;
        case 9:
            cout<<"字符长度=";
            cin>>n;
            cout<<"输入括号:";
            cin>>ch;
             if(March(ch)==OK)
             cout<<"括号匹配"<<endl;
             else 
             cout<<"括号不匹配"<<endl;
             break; 
        case 0:
            return 0;
        default:
            cout<<"选项输入错误!"<<endl;
        } 
        system("pause");
        system("cls");
    }
    return 0;
}

标签:case,return,cout,Sqstack,break,括号,匹配,OK,回文
From: https://blog.csdn.net/2301_80750659/article/details/137464073

相关文章

  • 【三十五】【算法分析与设计】综合练习(2),22。 括号生成,77。 组合,494。 目标和,模拟树递
    22.括号生成数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]提示:1<=n<=8【三十五】【算法分析与设计】综合练习(2),......
  • rust 面向对象编程特性、模式与模式匹配、高级特征
    面向对象编程OOP学习了结构体、枚举,它们可以包含自定义数据字段,也可以定义内部方法,它们提供了与对象相同的功能。面向对象的四大特征:封装、继承、多态通过pub标记为公有的结构体,在其他模块中可以访问使用这个结构体。但是对于结构体内部字段,如果不用pub,则仍是私有的,则可以通过......
  • P1435 [IOI2000] 回文字串
    题目:链接:https://www.luogu.com.cn/problem/P1435观察到:在里面插入字符不会影响外面的配对所以以dp[i][j]记录字符串s下标从i到j变化到回文串步数,那么递推公式:if(s[i]==s[j])dp[i][j]=dp[i+1][j-1];elsedp[i][j]=min(dp[i+1][j],dp[i][j-1])+1;就是说如果最外面能......
  • 最长回文子串
    letcode最长回文子串给你一个字符串s,找到s中最长的回文子串如果字符串的反序与原始字符串相同,则该字符串称为回文字串。示例1输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"解题思路此题可以用动态规划的思想去解决......
  • 回文素数----函数
    题目题目描述如果一个数即是回文数又是素数(质数)的话,则称这个数为回文素数。其中回文数的定义为,如果一个数从左边看和从右边看一样,则该数称为回文数。如数字12321就是个回文数。请输出从100~n的所有回文素数。输入格式一个整数n。输出格式从100~n的所有回文素数,空格......
  • Offer必备算法21_回文串dp_六道力扣题详解(由易到难)
    目录①力扣647.回文子串解析代码②力扣5.最长回文子串解析代码③力扣1745.分割回文串IV解析代码④力扣132.分割回文串II解析代码⑤力扣516.最长回文子序列解析代码⑥力扣1312.让字符串成为回文串的最少插入次数解析代码本篇完。①力扣647.回文子串64......
  • 艾科瑞特科技:计算机视觉-行人图像特征相似度匹配模型
    艾科瑞特科技:计算机视觉-行人图像特征相似度匹配模型关键词:目标检测、目标跟踪、图像识别、图像分类、视频分析、自然语言处理、自然语言分析、计算机视觉、人工智能、AIGC、AI、大模型、多模态大模型、API、Docker、镜像、API市场、云市场、国产软件、信创内容摘要:行人图像......
  • Java | Leetcode Java题解之第10题正则表达式匹配
    题目:题解:classSolution{publicbooleanisMatch(Strings,Stringp){intm=s.length();intn=p.length();boolean[][]f=newboolean[m+1][n+1];f[0][0]=true;for(inti=0;i<=m;++i){......
  • Java | Leetcode Java题解之第9题回文数
    题目:题解:classSolution{publicbooleanisPalindrome(intx){//特殊情况://如上所述,当x<0时,x不是回文数。//同样地,如果数字的最后一位是0,为了使该数字为回文,//则其第一位数字也应该是0//只有0满足这一属......
  • 将字符串转化为回文串,并记录方案
    #include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#include<string.h>#defineR(x)x=read()#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;inline......