首页 > 编程语言 >输入‘(’和‘)’判断字符串有效的函数算法

输入‘(’和‘)’判断字符串有效的函数算法

时间:2024-04-25 10:00:46浏览次数:36  
标签:SeqStack 函数 Bottom Top 元素 算法 calloc Manager 字符串


``
// 设置一个函数,通过输入键盘中的‘(’和‘)’判断字符串是否有效

// 顺序表中的元素数据类型是char类型
typedef char DataType_t;

// 创建顺序栈SequenceStack各项数据(栈底地址 栈容量 栈顶元素下标)的结构体
typedef struct SequenceStack
{
DataType_t *Bottom; // 记录栈底地址
unsigned char Size; // 栈的容量
int Top; // 栈顶元素的下标
} SeqStack_t;

// 创建一个空顺序栈空间用于储存和运算字符串是否有效,并初始化
SeqStack_t *SeqStack_Create(unsigned char Size)
{
// 1.l利用calloc为顺序栈管理结构体申请一块内存
SeqStack_t *Manager = (SeqStack_t *)calloc(1, sizeof(SeqStack_t));

if (Manager = NULL)
{
    perror("calloc memory failed");
    exit(-1); // 退出程序
}
// 2.利用calloc为所有元素申请内存
Manager->Bottom = (DataType_t *)calloc(Size, sizeof(DataType_t));
if (Manager->Bottom == NULL)
{
    perror("calloc memory failed");
    free(Manager); // 申请成功元素的内存释放上个申请成功的Manager
    exit(-1);
}
// 3.对管理顺序的结构体进行初始化(元素容量 最后元素下标)
Manager->Size = size; // 对顺序栈中的容量进行初始化
Manager->Top = -1;    // 由于顺序栈为空,则栈顶元素下标初值为-1

return Manager;

}

// 把输入的元素传入到判定函数当中
bool Str_determine(Strings)
{
if (Top % 2 == 1 && DataType_t * Strings != ')') // 如果对输入进来的字符是奇数或第一个字符是‘)’退出函数
{
return fales;
}
for (i = 0; i <= size; i++) // 备份输入的的字符串的大小进行操作循环
{
if (strings[i] == '(') // 对第一个字符串进行判断
{
Manager->Bottom[++Manager->Top] = Strings[i]; // 入栈
}
else if (strings[i] == ')')
{
Manager->Bottom[Manager->Top - 2] = Strings[i]; // 结合为()出栈
}
else
{
if (Manager->Bottom[Manager->Top] != -1) // 当字符串全部出栈
{
printf("is't right!!\n") return true;
}
else // 但不符合规则
{
printf("is't fault!\n") return fales;
}
}
}
}
int main()
{
scanf("%s", Manager);
Str_determine(Manager);
}
``

标签:SeqStack,函数,Bottom,Top,元素,算法,calloc,Manager,字符串
From: https://www.cnblogs.com/ikunkunkun/p/18156956

相关文章

  • 第三章 字符串、向量和数组
    当用+连接string对象和字符串字面值的时候,必须确保有一个操作数是string对象。头文件包含字符处理相关函数使用范围for循环实际上是在使用迭代器循环,所以不能再循环里改变容易容量或执行让迭代器失效的操作。数组的名字在很多情况下会转换成指针,auto会推导出指针,但是decltype还......
  • golang工具函数,把一个金额整型,单位为分,转成"1,231,111.00"格式的字符串
    这个函数首先将整数除以100来获取代表元的浮点数,然后格式化此数值为两位小数的字符串。接下来,函数将字符串分成整数和小数部分,并且为整数部分添加千位分隔符。最后,如果存在小数部分,它会将这两部分重新组合并返回正确格式化的金额字符串。为了正确地处理负数,我们需要先检查金额是......
  • 力扣-396. 旋转函数
    1.题目介绍题目地址(396.旋转函数-力扣(LeetCode))https://leetcode.cn/problems/rotate-function/题目描述给定一个长度为n的整数数组 nums 。假设 arrk 是数组 nums 顺时针旋转k个位置后的数组,我们定义 nums 的旋转函数  F 为:F(k)=0*arrk[0]+1*......
  • C++多态与虚拟:函数重载(Function Overloading)
    重载(Overloading):所谓重载是指不同的函数实体共用一个函数名称。例如以下代码所提到的CPoint之中,有两个memberfunctions的名称同为x():1classCPoint{23public:4floatx();5voidx(floatxval);67};  其两个memberfunctions实现代码如下:1f......
  • [算法学习笔记] 并查集
    提示:本文并非并查集模板讲解,是在模板基础上的进一步理解以及拓展。Review并查集可以用来维护集合问题。例如,已知\(a,b\)同属一个集合,\(b,c\)同属一个集合。那么\(a,b,c\)都属一个集合。并查集分为合并,查询操作。定义\(fa_i\)表示点\(i\)的父亲。为了降低复杂度,在fi......
  • AWS S3 Lambda Python脚本函数执行时报错AttributeError: module ‘PIL‘ has no attr
    背景代码示例如下importPILdefadd_image(self,tag,img,step):summary=Summary()bio=BytesIO()iftype(img)==str:img=PIL.Image.open(img)eliftype(img)==PIL.Image.Image:passelse:img=scipy.misc.......
  • 用一个尽可能高效的算法,查找单向链表(有头结点)中倒数第k个位置上的结点
    思路  定义两个指向链表首结点的指针变量,第一个指针变量向后移动k个位置后,第二个指针变量也开始跟着一起向后移动,直到第一个指针变量指向尾结点为止,第二个指针变量指向的位置结点就是倒数第k个结点。实现步骤及参考代码(C语言)intLList_FindLK(LList_t*Head,DataType_tda......
  • 自定义双向循环链表基本函数接口
    自定义双向循环链表的函数接口/********************************************************************* 文件名称: 双向循环链表的函数接口* 文件作者:[email protected]* 创建日期:2024/04/24* 文件功能:对双向链表的增删改查功能的定义* 注意事项:No......
  • python函数递归
    【递归】递归:是函数嵌套调用的一种特殊形式,也就是在调用一个函数的过程中右直接或是间接的调用到本身,然后一直循环deff1():print('一直是我')f1()f1()#调用本身,会死循环============================上述是直接调用间接调用  ================......
  • 双向循环链表及各功能函数设计
    双向循环链表/***@filename:双向链表接口设计*@brief*@[email protected]*@date2024/04/24*@version1.0:版本*@property:*@note*CopyRight(c)[email protected]*/构造双向循环链表的结点//指的是双向循......