三九宝宝网宝宝教育教学论文

c语言括号匹配问题栈我写的程序感觉有点错找不到原因

02月10日 编辑 39baobao.com

[c语言括号匹配]有些特殊解没考虑:当左括号溢出的时候(即左括号大于右括号) 如: 1 2 3 4 5 //在一个合法的括号匹配 左边 加上 不比最外层括号小 的括号 程序将输出错误。 如 { //以及单单一个[...+阅读

大概有这3个问题:1. 资源没有清理2. 部分逻辑错误3. 栈操作错误 带注释修改如下:#include#include#includestruct Node { char fuhao; struct Node *next; }; struct S { struct Node *top; struct Node *bottom; }; void start(struct S *s); void clean(struct S *s); void end(struct S **s); char yulan(struct S *s); void ruzhan(struct S *s, char a); char chuzhan(struct S *s); int panduan(struct S *s); int match(char a, char b); int main() { int n, a, i; char arr[256], in, out; scanf("%d", &n); fflush(stdin); // 清空输入缓存 struct S *s = (struct S *)malloc(sizeof(struct S)); start(s); // 创建第一个node(bottom),可以放在while外面 while (n>0) { int onlyr = 0; // 如果表达式消除后只剩右*符号,则设为 1 gets(arr); a = strlen(arr); for (i = 0; itop在end之前都会有效 char yulan(struct S *s) { if (s->top) return s->top->fuhao; return '\0'; } int match(char a, char b) { return ((a == '(' & b == ')') || (a == '[' & b == ']') || (a == '{' & b == '}')); }// 这个栈在end之前始终有个node,bottom始终指向这个node void start(struct S *s) { struct Node *p = (struct Node *)malloc(sizeof(struct Node)); p->fuhao = '\0'; p->next = 0; s->top = p; s->bottom = p; }// 只保留bottom,清空其他node void clean(struct S *s) { struct Node *p = s->top; while (p & p != s->bottom) { struct Node *q = p->next; free(p); p = q; } //除了bottom其他都已经清除了,把top指针指向bottom s->top = s->bottom; }// 全部清除,包括 s栈 本身 void end(struct S **s) { clean(*s); free((*s)->bottom); free(*s); *s = 0; } void ruzhan(struct S *s, char a) { struct Node *p; p = (struct Node *)malloc(sizeof(struct Node)); p->next = s->top; p->fuhao = a; s->top = p; } char chuzhan(struct S *s) { // 空栈直接返回'\0' if (s->top == s->bottom) { return '\0'; } char c; struct Node *p; p = s->top; c = s->top->fuhao; s->top = s->top->next; free(p); return c; } int panduan(struct S *s) { return (s->top == s->bottom); }

以下为关联文档:

c语言括号配对程序//这题也可用到数组完成的,如下所示,有问题可以随时联系 //不过你给出的输出结果不正确吧,应是这样的: /* 0 16 1 5 11 15 */ #include <stdio.h> #include "stdlib.h" #include "i...

c语言括号配对问题#include<stdio.h> int main() { int n,j,i; scanf("%d",&n); for(;n>0;n--) { char s[1000]={0}; //不超过1000表示最示最大1000个字符,要给\0留个位置 scanf("%s",s); j=0; //j...

c程序设计中的括号匹配问题描述 1设某一算术表达式中包含圆括号int isMatch(char *expr) { int i; int flag1 = 0,flag2 = 0,flag3 = 0; for(i = 0; expr[i]; ++i) { if(expr[i] == '(') ++flag1; if(expr[i] == ')') --flag1; if(expr[i...

判断圆括号是否配对用C语言如何实现如果只有圆括号(没有[ ] 或 { }),不需要构造一个栈。因为用栈实现时,栈里装的都是一模一样的左括号 '(' ,因此我们只需定义一个 整型变量 来记录 栈中元素的个数 即可。具体代码如...

数据结构里括号匹配的程序用C语言编写的#includeusing namespace std; #define maxsize 100 struct sStack { char sign[maxsize]; int top; }; int InitsStack(sStack &SS) { SS.top=-1; return 1; } int IsEmpty...

编写一个测试程序检查一个C语言程序中括号的配对情况头文件:(另存为SeqStack.h)typedef struct{ DataType stack[MaxStackSize]; int top;} SeqStack;void StackInitiate(SeqStack *S) /*初始化顺序堆栈S*/{ S->top = 0; /*定义初...

C语言判断给定表达式的括号是否匹配#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char c; int i=0,n; int output[100]; int lefts=0,leftm=0,leftb=0; int rights=0,rightm=0...

用C或C编写括号配对检查程序思路倒是简单,就是利用栈来匹配。简单的数据结构应该包括 符号类型(区分小中大括号),括号出现在字符串的位置这些。 读入字符,如果是左括号,则入栈,如果是左注释/则看后面是否有*如...

C语言问题括号配对#include <iostream> #include <stack> #include <string> using namespace std; int main() { int N; cin>>N; while(N--) { string a; stack<char> s; cin>>a; for(int i=...

推荐阅读
图文推荐