zoukankan      html  css  js  c++  java
  • C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)

    括号匹配测试代码笔记如下:

      1 #include<stdio.h>
      2 #include<string.h>
      3 #include <stdlib.h>
      4 #define  SIZE 10
      5 
      6 typedef struct Stack
      7 {
      8     char c[SIZE];   //存放左弧  它是一个字符
      9     int top;
     10 }STACK,*PSTACK;
     11 
     12 //1.初始化栈
     13 void Init_Stack(PSTACK S)  //这里只需要一个参数  把栈传进来初始化
     14 {
     15     S->top = 0;  //栈顶是从第0个下标开始 
     16     for (int i = 0; i < SIZE; i++)
     17     {
     18         S->c[i] = 0;
     19     }
     20 }
     21 
     22 //2.入栈操作
     23 
     24 void Push_Stack(PSTACK S, char data)  //参数1:表明插入的栈     参数2: 要插入的数据
     25 {
     26     //2.1 判断栈是否是满的  如果是满的就退出   满了你还要插入 会报错
     27 
     28     if (S->top >= SIZE)
     29     {
     30         printf("栈满!无法继续插入
    ");
     31         return;  //结束这个函数.
     32     }
     33 
     34     //2.2 栈没有满
     35     S->c[S->top] = data;
     36     S->top++;   //在执行插入操作之后 我的top要+1
     37 }
     38 
     39 //3.获取栈顶元素   这里只是得到栈顶元素 不是出栈
     40 char GetStackTop(PSTACK S)
     41 {
     42     return S->c[S->top - 1];
     43 }
     44 
     45 //4. 出栈
     46 void Pop_Stack(PSTACK S)
     47 {
     48     //这里我就不判断   判断是不是空
     49 
     50     S->top--;  //所有操作都是同top去操作  我只需要改变top的位置
     51 }
     52 
     53 //5.判断是不是空的栈
     54 int Stack_Empty(PSTACK S)  //函数返回1 说明什么栈是空的  如果返回0说明栈是有元素的
     55 {
     56     return S->top == 0;   //等于0说明栈是空的
     57 }
     58 //我只需要在前面代码的基础 加一个函数
     59 int isEatch(PSTACK S, char *str)  // 参数1: 指明左弧要入栈的是哪一个栈  参数2:要匹配的字符串  返回值:返回1说明匹配 返回0说明不匹配
     60 {
     61      // 得到要匹配的字符串长度
     62     int  len = strlen(str);
     63     //循环遍历每一个字符
     64     for (int i = 0; i < len; i++)  // ()  []  {}
     65     {
     66         switch (str[i])
     67         {
     68         case '(':
     69         case '[':
     70         case '{':
     71             //如果是左弧 要入栈
     72 
     73             Push_Stack(S, str[i]);
     74             break;
     75         case ')':
     76             if (!Stack_Empty(S) && GetStackTop(S) == '(')
     77             {
     78                 Pop_Stack(S);
     79             }
     80             else
     81             {
     82                 return 0;  //如果栈为空  或者 栈顶元素跟当前元素不匹配
     83             }
     84             break;
     85         case ']':  //自己写
     86             break;
     87         case '}':  //自己写
     88             break;
     89         }
     90     }
     91     //判断最后栈里面是否还有数据 如果右说明是不匹配
     92     if (!Stack_Empty(S))
     93     {
     94         return 0;
     95     }
     96     //返回1 说明是匹配的
     97     return 1;
     98 
     99 }
    100 
    101 int main()
    102 {
    103     STACK MyStack;
    104     Init_Stack(&MyStack);
    105     char Str[258];
    106     while (1)
    107     {
    108         printf("请输入一个字符串: ");
    109         scanf("%s", Str);
    110         int a = isEatch(&MyStack, Str);
    111         if (a)
    112         {
    113             printf("括号匹配!
    ");
    114         }
    115         else
    116         {
    117             printf("括号不匹配!
    ");
    118         }
    119     }
    120     return 0;
    121 }
  • 相关阅读:
    自动化测试如何解决验证码的问题
    python读取xml文件
    python实现简单爬虫功能
    python使用mysql数据库
    Prometheus 到底 NB 在哪里?- 每天5分钟玩转 Docker 容器技术(84)
    Prometheus 架构
    数据收集利器 cAdvisor
    Weave Scope 多主机监控
    Weave Scope 容器地图
    监控利器 sysdig
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/10633118.html
Copyright © 2011-2022 走看看