之前的那個:
/*
([)]]()
()*/
/*要求:
只考慮小括號和中括號
演算法設計:
通過結構體定義乙個棧seqstack和乙個char型別的陣列,用來儲存字串
輸入一行字串,逐一判斷其中的括號
如果是左括號,則直接進棧。如果是有括號「)」或「]」,則檢查棧頂元素是否為相應的左括號,
如果是則出棧,如果不是,則說明括號不匹配。如果一直帶處理完所有的字元都沒有發現不匹配
的括號,則說明匹配成功。
*/#include#includetypedef unsigned char boolean;
#define true 1
#define false 0
typedef char datatype;
#define maxsize 100
typedef structseqstack;
boolean initstack(seqstack **s);
void destroystack(seqstack **s);
boolean push(seqstack *s, datatype x);
boolean isstackfull(seqstack s);
boolean isstackempty(seqstack *stack);
boolean gettop(seqstack *stack, datatype *x);
boolean pop(seqstack *stack, datatype *x);
boolean isbrackermatched(seqstack *s, char *str, int *index);
void showwrongmatch(char *str, int mismatchindex);
void showwrongmatch(char *str, int mismatchindex)
printf("^\n");
}boolean isbrackermatched(seqstack *s, char *str, int *index)else if(str[i] == ')')else
}else if(str[i] == ']')else
} printf("**\n"); }
printf("括號匹配!\n");
return true;
}boolean pop(seqstack *stack, datatype *x)
*x = stack->data[stack->top--];
return true;
} boolean gettop(seqstack *stack, datatype *x)
*x = stack->data[stack->top];
return true;
} boolean isstackempty(seqstack *stack)
boolean isstackfull(seqstack s)
boolean push(seqstack *s, datatype x)
s->data[++s->top] = x;
return true;
}void destroystack(seqstack **s)
boolean initstack(seqstack **s)
*s = (seqstack *)malloc(sizeof(seqstack));
(*s)->data = (datatype *)malloc(sizeof(datatype) * maxsize);
(*s)->maxsize = maxsize;
(*s)->top = -1;
return false;
}void main(void)
資料結構習題 括號匹配(堆疊)
檢查一段c語言 的小括號 中括號 和大括號是否匹配。在一行中輸入一段c語言 長度不超過1000個字元 行末以換行符結束 第一行輸出左括號的數量和右括號的數量,中間以乙個空格間隔。若括號是匹配的,在第二行列印yes,否則列印no。for int i 0 iadj i j 8 8 yesfor int ...
基礎資料結構 堆疊 拓展 括號匹配
這是乙個考察對堆疊概念理解的應用,輸入一串帶括號的式子,檢查其中的括號是否前後對應。思路是當遇到括號是入棧,並在下次遇到括號時檢測是否與上乙個入棧的括號匹配為一對,不是則繼續入棧。因為正確的式子最終總能遇到乙個匹配的括號。例如 可以最先檢測出 這一對小括號,然後出棧,下乙個待匹配括號 與 也可成功匹...
資料結構 括號匹配
三種括號形式 輸入一段字串,判斷其括號是否匹配。如下 括號匹配問題 include include include define stack init size 100 define stackincrement 10 define error 0 define true 1 define fals...