``
// 设置一个函数,通过输入键盘中的‘(’和‘)’判断字符串是否有效
// 顺序表中的元素数据类型是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);
}
``