国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

棧的經典應用之一:括號匹配檢查

2019-11-06 06:09:06
字體:
來源:轉載
供稿:網友

功能:主要對字符串中的括號(包括“{}”、“[]”、“()”)進行匹配;匹配成功時,打印匹配成功,否則打印匹配失敗。

算法思路: 從字符串的第一個字符開始掃描,若是普通字符則忽略,反之若是左符號則入棧操作;當遇見右符號的時候則從棧中彈出棧頂元素,并進行匹配;

匹配結束時: 成功:所有字符掃描完畢,并且棧為空; 失敗:匹配失敗或所有字符掃描完畢但是棧非空;

附:調試過程中,有些小問題,有時間了再修改;

.h文件#PRagma once#include<stdio.h>#include <stdlib.h>#include <string.h>#define true 1#define false 0#define SIZE 100typedef char ElemType;typedef struct stack { ElemType *base; int top; int stacksize; }Stack;//1.建立一個空棧void Init(Stack *s);//2.入棧int Push(Stack *s,ElemType d);//3.彈棧int Pop(Stack *s,ElemType *mPtr);//4.獲取棧頂元素int GetTop(Stack *s,ElemType *e);//5.判斷棧非空int Empty(Stack *s);//6.打印棧元素void List(Stack *s);//7.匹配括號int MyFunc(char *mString);.c文件#include "Stack.h"http://1.建立一個空棧void Init(Stack *s) { s->base=(ElemType *)malloc (sizeof(ElemType)*SIZE); s->top=0; s->stacksize=SIZE; return ; }//2.入棧int Push(Stack *s,ElemType d) { //棧滿 if (s->top>=s->stacksize) { s->base=(ElemType *)realloc (s->base,sizeof(s->stacksize+1)*sizeof(ElemType)); //判斷棧內存空間是否分配成功 if (s->base==NULL) return false; s->stacksize++; } s->base[s->top++]=d; return true; }//3.彈棧int Pop(Stack *s,ElemType *mPtr) { if (s->top==0) return false; else { *mPtr=s->base[s->top--]; return true; } }//4.獲取棧頂元素int GetTop(Stack *s,ElemType *e) { if (s->top==0) return false; *e=s->base[--s->top]; return true; }//5.判斷棧非空int Empty(Stack *s) { if (s->top==0) return true; return false; }//6.打印棧元素void List(Stack *s) { if (s->top==0) return; while (s->top-1>=0) { printf ("data:%c/n",s->base[s->top-1]); s->top--; } }//7.匹配括號int MyFunc(char *mString) //mString->[26*(12+8)/(45-29)] { int i=0,flag=1; Stack s1; ElemType e; Init(&s1); while (mString[i]!='/0') { switch (mString[i]) { case '(':Push (&s1,'(');break; case '[':Push (&s1,'[');break; case '{':Push (&s1,'{');break; case ')':GetTop (&s1,&e); if (e=='(') Pop (&s1,&e); else flag=0; break; case ']':GetTop (&s1,&e); if (e=='[') Pop (&s1,&e); else flag=0; break; case '}':GetTop (&s1,&e); if (e=='{') Pop (&s1,&e); else flag=0; break; } ++i; } if (Empty (&s1)&&flag) return true; else return false; }test.c#include "Stack.h"int main(void) { char str[]="[20*(16+4)/(15-6)]"; if (MyFunc (str)) printf ("匹配成功!/n"); else printf ("匹配失敗!/n"); system ("pause"); return 0; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 茌平县| 西峡县| 哈密市| 铜鼓县| 周至县| 荥阳市| 汶上县| 台湾省| 红安县| 叶城县| 宁阳县| 衡东县| 静宁县| 大洼县| 登封市| 泰州市| 密山市| 图们市| 内黄县| 开封县| 西乌珠穆沁旗| 理塘县| 诸暨市| 淳化县| 宁都县| 铁岭县| 徐闻县| 锡林郭勒盟| 蒙山县| 莲花县| 通州区| 奉化市| 甘孜县| 永昌县| 阿克| 平江县| 邢台县| 丰原市| 泾源县| 中宁县| 海门市|