数据结构栈应用括号匹配算法 数据结构:括号匹配问题。

\u7528\u6808\u5b9e\u73b0\u68c0\u9a8c\u62ec\u53f7\u5339\u914d\u7684\u7b97\u6cd5

\u601d\u60f3\u662f \u5148\u8fdb\u6808\uff0c\u83b7\u53d6\u7b2c\u4e00\u4e2a\u534a\u8fb9\u62ec\u53f7\uff0c\u6807\u8bb0\u4e00\u4e0b\uff0c\u7ee7\u7eed\u8fdb\u6808\u76f4\u5230\u83b7\u53d6\u5230\u7b2c\u4e8c\u4e2a\u4e0e\u4e4b\u5339\u914d\u7684\u53e6\u4e00\u5916\u62ec\u53f7\uff0c\u7136\u540e\u51fa\u6808\uff0c\u53d6\u51fa\u5185\u5bb9\u3002\u5c31\u8fd9\u6837\u3002\u3002

include "seqstack1.h"
include "stdio.h"
void BracketMatch(char str);
void BracketMatch(char str) /*str[]\u4e2d\u4e3a\u8f93\u5165\u7684\u5b57\u7b26\u4e32\uff0c\u5229\u7528\u5806\u6808\u6280\u672f\u6765\u68c0\u67e5\u8be5\u5b57\u7b26\u4e32\u4e2d\u7684\u62ec\u53f7\u662f\u5426\u5339\u914d
{ SeqStack S;
int i; char ch;
InitStack(&S);
for(i=0; str[i]!='\0'; i++) /*\u5bf9\u5b57\u7b26\u4e32\u4e2d\u7684\u5b57\u7b26\u9010\u4e00\u626b\u63cf*/ { switch(str[i])
{case '(':case '[':case '{': Push(&S,str[i]); break;case ')': case ']':
case '}' if(IsEmpty(&S))
{ printf("\n\u53f3\u62ec\u53f7\u591a\u4f59!");
return;else{
GetTop(&S,&ch);
if(Match(ch,str[i])) /\u7528Match\u5224\u65ad\u4e24\u4e2a\u62ec\u53f7\u662f\u5426\u5339\u914d/
Pop(&S,&ch); /\u5df2\u5339\u914d\u7684\u5de6\u62ec\u53f7\u51fa\u6808/else
{ printf("\n\u5bf9\u5e94\u7684\u5de6\u53f3\u62ec\u53f7\u4e0d\u540c\u7c7b);
retur }/switch/}/for/
if(IsEmpty(&S))printf("\n\u62ec\u53f7\u5339\u914d!");
elsprintf("\n\u5de6\u62ec\u53f7\u591a\u4f59!");}
void main(){ char str[100];
printf("please input:");
gets(str);
BracketMatch(str);}
\u8fd9\u662f\u5bf9\u6240\u8f93\u5165\u7684\u5b57\u7b26\u4e32\u8fdb\u884c\u62ec\u53f7\u5339\u914d\uff0c\u6240\u6709\u7684\u62ec\u53f7\u90fd\u5305\u62ec\u3002

算法如下:

从左开始向右扫描该表达式,
1、如遇左括号(不论哪一种),将该左括号入栈;
2、如是右括号,如栈为空则返回出错信息,不空就检查其是否与栈顶左括号是否配对,如是则栈顶元素出栈后继续扫描(转1 ),否则,返回出错信息(出错类型:右括号先出现,或左右括号不匹配,出错位置);
3、如是其它字符,直接跳过,继续扫描,如表达式未完则转1;表达式结束转4。
4、如栈空,显示“匹配正确!”,否则显示“缺失右括号!”。

bool correct(char *str) {
Stack<char> s;
int n = strlen(str);
for(int i = 0; i < n; i++) {
switch(str[i]) {
case '(': ;
case '[': ;
case '{': s.Push(str[i]); break;
case ')': if(s.IsEmpty( ) || s.Pop( ) != '(') return false; break;
case ']': if(s.IsEmpty( ) || s.Pop( ) != '[') return false; break;
case '}': if(s.IsEmpty( ) || s.Pop( ) != '{') return false;
}
}
return s.IsEmpty( );
}

  • c璇█鏍鏄粈涔?鍍忚繖棰樺拰鏍堟湁浠涔堝叧绯
    绛旓細鏍堟槸涓绉鏁版嵁缁撴瀯锛岀敤浜庡瓨鏀炬暟鎹紝鍙互鐞嗚В涓虹窘姣涚悆绛掞紝缇芥瘺鐞冨氨鏄暟鎹紝鏈鍏堟斁杩涘幓鐨勬渶鍚庢墠鑳芥嬁鍑烘潵銆俢璇█鍙互鐢ㄧ粨鏋勪綋鏉ュ畾涔夋爤锛屾瘡涓厓绱犱互鎸囬拡鎸囧悜瀹冨墠闈㈢殑鍏冪礌锛屾渶鍓嶉潰鐨勫厓绱犵О涓烘爤椤讹紝瀹冪殑鎸囬拡涓虹┖銆備緷娆¤鍏ュ瓧绗︼紝閬囧埌鎷彿鍒欐斁鍏鎷彿鏍锛岄亣鍒板叾浠栧瓧绗﹀垯璺宠繃銆傝嫢閬囧埌鍙虫嫭鍙凤紝鍒欏垽鏂畠鍓嶉潰鐨勫厓绱犳槸鍚...
  • 鏁版嵁缁撴瀯~姹備笅鍥剧瓟妗垀
    绛旓細1.閲囩敤鏁版嵁缁撴瀯閲岄潰鐨鏍瀹炵幇鎷彿鍖归厤闂锛屽綋纰板埌'('鏃讹紝杩涙爤锛屽鏋滅鍒')'鏃跺鏋滄爤椤跺瓧绗︽槸'('锛屽氨鍑烘爤锛岀洿鍒扮粨鏉燂紝濡傛灉鏄┖鎴栧叾浠栧瓧绗﹀氨缁撴潫锛屽尮閰嶅け璐ワ紒 绗簩棰橈紝2-4闂細include<stdio.h>int check(char str[]){char stack[100]={'\0'};int top = -1,i=0;while(str[i]!='\0')...
  • 鏁版嵁缁撴瀯
    绛旓細1.1 绾挎缁撴瀯锛氱嚎鎬ц〃鏄湁闄愮殑鍚岀被鍨鏁版嵁搴忓垪锛屽瓨鍌ㄧ粨鏋勫彲鍒嗕负椤哄簭瀛樺偍锛堝鏁扮粍锛屾敮鎸侀殢鏈鸿闂紝瀵嗗害楂樹絾闇杩炵画绌洪棿锛夊拰閾惧紡瀛樺偍锛堝鍗曢摼琛ㄣ佸弻閾捐〃鍜屽惊鐜摼琛紝绌洪棿鐏垫椿浣嗚闂熷害鐩稿杈冩參锛夈2.2 鏍鍜岄槦鍒楋細鏍堬紝閬靛惊LIFO鍘熷垯锛屽父鐢ㄤ簬鎷彿鍖归厤绛夎〃杈惧紡姹傚硷紝閫掑綊涓瓨鍌ㄥ伐浣滀俊鎭傞槦鍒楅伒寰狥IFO鍘熷垯锛屽...
  • 濡備綍鐢鏍璁捐涓狢璇█璁$畻鍣,楂樻墜璇疯窡鎴戣璇绠楁硶,鐗瑰埆鏄偅浜鎷彿鍜屼箻娉曠殑...
    绛旓細鏀寔 鍔犲噺涔橀櫎鎷彿璐熸暟寮鏍逛箻鏂 include<stdio.h> include<math.h> include<malloc.h> double jisuan(char a[]){ int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;char nibo[50],zhan2[50];double x,n,l,z=0,zhan3[50];typedef struct { double d1;int d2;}dd;typedef struct { dd ...
  • 璁捐涓涓狫ava璇█绠楁硶鍒ゅ埆涓涓畻鏈〃杈惧紡鐨勫渾鎷彿鏄惁姝g‘閰嶅_鐧惧害...
    绛旓細ScriptEngineManager sem = new ScriptEngineManager ();ScriptEngine se = sem.getEngineByName ("js");String jsonstr = "3*(1+1)/((2-1)+87";try{System.out.println (se.eval (jsonstr));}catch (ScriptException e){System.out.println ("鍦鎷彿涓嶉厤瀵");} ...
  • vba鏍堢粨鏋勫簲鐢鍩虹绀轰緥
    绛旓細鏍鏈夊緢澶氱敤澶勶紝姣斿浣犺杩涜浜嗕竴绯诲垪鐨勬搷浣滐紝鐒跺悗瑕佷互鐩稿弽鐨勯『搴忓彇娑堣繖浜涙搷浣溿傛爤涔熸槸瀹炵幇寰堝缁忓吀绠楁硶鐨鏁版嵁缁撴瀯銆備笅闈紝涓句袱涓熀纭鐨勭ず渚嬶紝杩涗竴姝ヨ璇嗘爤銆傜ず渚1锛氬皢鍗佽繘鍒舵暟杞崲鎴愪簩杩涘埗 涓嬮潰鐨勪唬鐮佸皢鍗佽繘鍒舵暟杞崲鎴愮浉搴旂殑浜岃繘鍒舵暟锛欴im stkTest As New Stack 鈥樻暟鍒惰浆鎹唬鐮 Sub convert()鈥樿杞崲鎴...
  • C++涓璖TL鐢ㄦ硶瓒呰缁嗘荤粨(鏀惰棌绾)
    绛旓細- 閫傞厤鍣: 濡俼ueue鍜宲riority_queue锛屾彁渚涚壒瀹搴旂敤鍦烘櫙鐨勯『搴忓鍣ㄣ- 瀹瑰櫒鎿嶄綔: 濡倂ector鐨刾ush_back銆乸op_back锛屼互鍙奷eque鐨勯珮鏁堟彃鍏ュ拰鍒犻櫎鎿嶄綔銆- 鎷彿鍖归厤: 閫氳繃stack瀹炵幇鎷彿鍖归厤绠楁硶锛屽睍绀轰簡杩唬鍣ㄥ拰绠楁硶鐨勭粨鍚堛傞氳繃浠ヤ笂浠嬬粛锛孲TL涓篊++绋嬪簭鍛樻彁渚涗簡寮哄ぇ鐨鏁版嵁缁撴瀯鍜岀畻娉曞伐鍏凤紝鐔熺粌鎺屾彙杩欎簺宸ュ叿灏嗘瀬澶...
  • 涓涓鏁版嵁缁撴瀯闂,杩欓噷鏄鎷彿鍖归厤鐨勬楠绠楁硶,璇烽棶,涓轰粈涔堝紑澶寸敤void浜...
    绛旓細杩欎釜...鏄庢樉鏄紪绋嬪嚭閿欎簡
  • 鎷彿鍖归厤妫楠岀▼搴
    绛旓細浠庝綘鐨勪唬鐮佸彲浠ョ湅鍑猴紝浣犳兂鍦ㄥ紑濮嬪皢鈥榌鈥欏帇鏍锛屼綔涓虹粨鏉熸潯浠躲傚湪寰幆涓噰闆嗘瘡娆$殑杈撳叆瀛楃锛屽鏋滀笉鍖归厤锛屽垯鍘嬫爤杈撳叆瀛楃锛涘鏋滃尮閰嶏紝涓衡榏鈥欏瓧绗︼紝鍒欏皢鏍堜腑鎵鏈夊瓧绗﹀叏閮ㄥ嚭鏍堛備笂闈唬鐮佺殑涓昏闂鏄惊鐜潯浠剁殑鍒ゆ柇鐨勯棶棰橈紝浣犲彲浠ュ垎鏋愪笅銆備笅闈㈡槸鎴戝湪浣犵殑浠g爜鍩虹涓婅繘琛屼簡灏忓皬淇敼鍚庣殑浠g爜锛屾彁渚涚粰浣犲弬鑰冧笅...
  • 灏忚彍楦熷垰瀛鏁版嵁缁撴瀯,鍐欎簡涓娈靛叧浜鎷彿鍖归厤鐨勪唬鐮,鏈夊緢澶氶敊璇,甯屾湜澶х墰...
    绛旓細閿欒宸茬粡娉ㄩ噴 include "stdafx.h"include<stdio.h> include<malloc.h> define maxsize 201//鍘熸潵鏈夊垎鍙峰簲鍘绘帀 typedef int datatype;typedef struct /*瀹氫箟涓涓鏍*/ { datatype stack[maxsize];int top;}seqstack;seqstack *s;seqstack *Initstack() /*鏋勫缓涓涓┖鏍*/ { seqstack *s;s=(...
  • 扩展阅读:栈括号匹配的检验算法 ... 栈在括号匹配中的应用 ... 用栈解决括号匹配问题 ... 括号匹配问题及答案 ... 数据挖掘十大算法 ... 串的简单模式匹配算法 ... 顺序栈括号匹配 ... 基于栈的括号匹配算法 ... 用链栈实现括号匹配算法 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网