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

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

// 顺序表中的元素数据类型是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);
}
posted @ 2024-04-25 09:56  小北bolg  阅读(48)  评论(0)    收藏  举报