首页 > 其他分享 >用顺序栈判断输入的字符串是否有效 (笔试题)

用顺序栈判断输入的字符串是否有效 (笔试题)

时间:2024-04-25 16:47:00浏览次数:27  
标签:字符 顺序 当前 Top 笔试 Manager str 字符串

image

思想:

  • 1、先对Manager的Top(栈中有效数据的下标)备份,用循环对字符串进行遍历
    a.当前字符不为'('和‘)’则进行下一次循环
    b.当前字符为'('则将'('入栈,并将Manager中的Top(下标)加1
    c.当前字符为')'则判断当前Top是否与备份的数值相等,如不相等,则')'前面没有'('与之配对,既字符串无效,直接返回;如不相等,则对栈进行出栈,TOP(下标)减一
  • 2、结束循环后,对Top(下标)和备份的数据进行对比
    a.如相等,则所有的'('都有')'与之配对,即字符串有效
    b.如不相等,则有多余 的'(没有')'与之配对,即字符串无效

下面是我的代码:

/******************************************************
 *
 *  name      : IsStrValid
 *
 * function : 通过键盘输入一个包括  '(' 和 ')' 的字符串string ,判断字符
 *             串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串
 *             需满足以下条件:
 *               A.	左括号必须用相同类型的右括号闭合。
 *               B.	左括号必须以正确的顺序闭合。
 *               C.	每个右括号都有一个对应的相同类型的左括号。
 *  argument
 *              @Manager : 顺序栈的地址
 *              @str     :需要判断是否有效的字符串
 *
 *  retval    : 有效返回1,否则返回0
 *  author    : Dazz
 *  date      : 2024/4/25
 *  note      : None
 *
 * *******************************************************/
bool IsStrValid(SeqStack_t *Manager, char *str)
{
    // 对栈的顶部做备份
    int temp = Manager->Top;

    // 用循环对字符串做遍历,将'('入栈
    for (int i = 0;; i++)
    {
        // 循环退出条件为当前字符等于字符串尾部的'\0'
        if ('\0' == *(str + i))
            break;

        // 如果当前字符不为'('和')'则进行下一次循环
        if ('(' != *(str + i) && ')' != *(str + i))
            continue;
        // 当前字符为'('的情况
        else if ('(' == *(str + i))
        {
            SeqStack_Push(Manager, *(str + i));
        }
        // 当前字符为')'的情况
        else
        {
            // 如果栈的底部与初始相等,则当前字符的')'的前面没有'('与之匹配,字符串无效
            if (temp == Manager->Top)
            {
                printf("字符串无效\n");
                return false;
            }
            // 字符')'前面有'('的情况,则将前面的'('出栈
            else
            {
                SeqStack_Pop(Manager);
            }
        }
    }

标签:字符,顺序,当前,Top,笔试,Manager,str,字符串
From: https://www.cnblogs.com/Dazz24/p/18158006

相关文章

  • 利用顺序栈进行进制转换程序
    数据结构顺序栈笔试题:设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。/***************************************************************************************file......
  • 答案篇——PTA——顺序表
    读入n值及n个整数,建立顺序表并遍历输出。输入格式:读入n及n个整数输出格式:输出n个整数,以空格分隔(最后一个数的后面没有空格)。输入样例:在这里给出一组输入。例如:4-3102078输出样例:在这里给出相应的输出。例如:-3102078点击查看代码#include<bits/stdc++.h>#......
  • 顺序栈的接口程序
    顺序栈的接口程序头文件#include<stdio.h>#include<stdbool.h>#include<stdlib.h>创建顺序栈//指的是顺序栈中的元素的数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造记录顺序栈SequenceStack各项参数(栈底地址+栈容量+栈顶元素的下标)的结构体ty......
  • 顺序栈的接口设计
    /***********************************************************************************************************该程序实现顺序栈元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以顺序栈中元素的*数据类型为DataType_t,用户可以根据实际情况修改顺序......
  • 顺序栈————遍历、出栈、入栈
    以数组作为基础实现栈空间(顺序栈)数组在内存中占用一块连续的空间,也就是数组元素的内存地址是连续的。为了实现栈,一般是把数组头作为栈底,数组头部到数组尾部作为栈的增长方向,也就是用户只在数组尾部对数据进行插入和删除。为了方便管理顺序栈所以需要构造管理顺序栈信息的结构体......
  • 栈笔试题1
    设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。#include<stdio.h>#include<stdbool.h>#include<stdlib.h>//定义错误码#defineERROR_STACK_FULL-1//定义顺序栈元......
  • MyBatis Plus 按指定顺序查询对象列表
    场景定义了一个字段,存储了一个json数组比如:[41,38,42],它的含义是一个线性的流程定义,所以保证顺序至关重要现在使用MyBatisPlus的API方法去通过ID数组查询得到对象数组List<ProcessNodePO>processNodeList=processNodeMapper.selectList(newLambdaQueryWrapper<Pro......
  • 输入‘(’和‘)’判断字符串有效的函数算法
    ``//设置一个函数,通过输入键盘中的‘(’和‘)’判断字符串是否有效//顺序表中的元素数据类型是char类型typedefcharDataType_t;//创建顺序栈SequenceStack各项数据(栈底地址栈容量栈顶元素下标)的结构体typedefstructSequenceStack{DataType_t*Bottom;//记录栈......
  • 第三章 字符串、向量和数组
    当用+连接string对象和字符串字面值的时候,必须确保有一个操作数是string对象。头文件包含字符处理相关函数使用范围for循环实际上是在使用迭代器循环,所以不能再循环里改变容易容量或执行让迭代器失效的操作。数组的名字在很多情况下会转换成指针,auto会推导出指针,但是decltype还......
  • golang工具函数,把一个金额整型,单位为分,转成"1,231,111.00"格式的字符串
    这个函数首先将整数除以100来获取代表元的浮点数,然后格式化此数值为两位小数的字符串。接下来,函数将字符串分成整数和小数部分,并且为整数部分添加千位分隔符。最后,如果存在小数部分,它会将这两部分重新组合并返回正确格式化的金额字符串。为了正确地处理负数,我们需要先检查金额是......