数据结构-栈3-栈的应用-就近匹配
生活随笔
收集整理的這篇文章主要介紹了
数据结构-栈3-栈的应用-就近匹配
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#define _CRT_SECURE_NO_WARNINGS
#include"LinkList.c"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//括號(hào)有沒有匹配。哪個(gè)不匹配就指向哪個(gè)。。
//掃描字符串
//1、非括號(hào)字符忽略
//2、若遇到左括號(hào),則入棧
//3、若遇到右括號(hào),則將棧頂元素取出,判斷是不是左括號(hào),如果是,則此右括號(hào)匹配成功
//4、最后看棧是否為空,若有,則說明匹配失敗typedef struct MYCHAR {LinkNode node;char* pAddres;int index;
}MyChar;int IsLeft(char c)
{return c == '(';
}
int IsRight(char c)
{return c == ')';
}
MyChar* CreateMyChar(char* p,int index)
{MyChar* mychar = (MyChar*)malloc(sizeof(MyChar));mychar->pAddres = p;mychar->index = index;return mychar;
}void ShowError(char* str,int pos)
{printf("%s\n", str);for (int i = 0; i < pos; i++){printf(" ");}printf("A\n");
}int main()
{char* str = "1+2+6(dst)dfsfsf((sdgf)";LinkList* stack = Init_linkList();char* p = str;int index = 0;while (*p != '\0'){//如果是左括號(hào),進(jìn)棧if (IsLeft(*p)){// Push_LinkList(stack, p); 錯(cuò)誤Push_LinkList(stack, (LinkNode*)CreateMyChar(p,index));}//如果是右括號(hào),從棧頂彈出元素,判斷是不是左括號(hào)if (IsRight(*p)){if (Size_LinkList(stack) > 0){MyChar* mychar = (MyChar*)Top_LinkList(stack);if (IsLeft(*(mychar->pAddres))){Pop_LinkList(stack);free(mychar);}}else{printf("右括號(hào)沒有匹配的左括號(hào)\n");ShowError(str, index);break;}}p++;index++;}while (Size_LinkList(stack) > 0){MyChar* mychar = (MyChar*)Top_LinkList(stack);printf("左括號(hào)沒有匹配的右括號(hào)\n");ShowError(str, mychar->index);Pop_LinkList(stack);free(mychar);}system("pause");return 0;
}
?
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的数据结构-栈3-栈的应用-就近匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opencv特征提取1-Harris角点
- 下一篇: STL4-类型转换