c++括号匹配问题_c语言代码大全及其含义

c++括号匹配问题_c语言代码大全及其含义C语言 数据结构栈 括号匹配算法括号匹配问题可以使用栈来解决。具体实现可以使用一个指针指向栈顶素,每次遇到左括号就将其入栈,遇到右括号就将栈顶素出栈并进行匹配,如果匹配成功则继续,否则就说明括号不匹配。以下是一个基于指针的栈的实

C语言 数据结构–栈 括号匹配算法   括号匹配问题可以使用栈来解决。具体实现可以使用一个指针指向栈顶素,每次遇到左括号就将其入栈,遇到右括号就将栈顶素出栈并进行匹配,如果匹配成功则继续,否则就说明括号不匹配。 以下是一个基于指针的栈的实现: “`c #include <stdio.h> #include <stdlib.h> typedef struct StackNode { char data; struct StackNode *next; } StackNode; typedef struct Stack { StackNode *top; int size; } Stack; // 初始化栈 void init(Stack *stack) { stack->top = NULL; stack->size = 0; } // 入栈 void push(Stack *stack, char data) { StackNode *node = (StackNode*)malloc(sizeof(StackNode)); node->data = data; node->next = stack->top; stack->top = node; stack->size++; } // 出栈 char pop(Stack *stack) { if (stack->top == NULL) { printf(“Error: stack is empty   ”); exit(1); } char data = stack->top->data; StackNode *tmp = stack->top; stack->top = stack->top->next; free(tmp); stack->size–; return data; } // 判断栈是否为空 int isEmpty(Stack *stack) { return stack->top == NULL; } // 括号匹配 int isValid(char *s) { Stack stack; init(&stack); while (*s != ‘0’) { switch (*s) { case ‘(‘: case ‘[‘: case ‘{‘: push(&stack, *s); break; case ‘)’: if (isEmpty(&stack) || pop(&stack) != ‘(‘) { return 0; } break; case ‘]’: if (isEmpty(&stack) || pop(&stack) != ‘[‘) { return 0; } break; case ‘}’: if (isEmpty(&stack) || pop(&stack) != ‘{‘) { return 0; } break; default: break; } s++; } return isEmpty(&stack); } int main() { char s1[] = “()[]{}”; char s2[] = “([)]”; char s3[] = “{[]}”; printf(“%s is %s   ”, s1, isValid(s1) ? “valid” : “invalid”); printf(“%s is %s   ”, s2, isValid(s2) ? “valid” : “invalid”); printf(“%s is %s   ”, s3, isValid(s3) ? “valid” : “invalid”); return 0; } “`

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/50665.html

(0)
上一篇 2024年 9月 3日 上午11:06
下一篇 2024年 9月 3日 上午11:10

相关推荐

关注微信