数据结构复习——链栈的一些操作以及表达式中的括号是否配对问题
2017-07-03 16:07
375 查看
(提醒我自己:声明完指针并且要插入新节点的时候不要忘记malloc分配内存啊!)
**
声明一个链栈st,依次扫描字符表达式,如果遇到左括号‘(’则将其压入栈内,遇到右括号‘)’则先判断栈是否为空,为空则说明不配对,不为空则弹栈(因为此时栈中只有左括号,所以不需要像教材中那样判断弹出来的是否为左括号)。
扫描完字符串后判断栈是否为空,不为空则说明还有多余的左括号,不配对。
**
主要思路:
**声明一个链栈st,依次扫描字符表达式,如果遇到左括号‘(’则将其压入栈内,遇到右括号‘)’则先判断栈是否为空,为空则说明不配对,不为空则弹栈(因为此时栈中只有左括号,所以不需要像教材中那样判断弹出来的是否为左括号)。
扫描完字符串后判断栈是否为空,不为空则说明还有多余的左括号,不配对。
#include<iostream> using namespace std; #define ElemType char typedef struct linknode // 声明链栈结构 { ElemType data; struct linknode *next; }LiStack; void InitStack(LiStack *&s) { s = (LiStack *)malloc(sizeof(LiStack)); s->next = NULL; } void Destory(LiStack *&s) { LiStack *p, *q;//q是p之后的指针 p = s; q = p->next; while (p->next != NULL) { free(p); p = q; q = q->next; } } void push(LiStack *&s, ElemType e)//将新数据节点插入到头结点之后 { LiStack *p; p = (LiStack *)malloc(sizeof(LiStack)); p->next = s->next; s->next = p; p->data = e; } bool pop(LiStack *&s, ElemType &e)//引用类型的e保存出栈的值 { if (s->next == NULL) { return false; } LiStack *p=s->next; s->next = p->next; e = p->data; free(p); return true; } //判断输入的表达式中括号是否配对 bool Match(char *exp, int n)//n代表表达式长度 { int i = 0; char e; LiStack *st; InitStack(st); bool match = true; while (i < n) { if (exp[i] == '(') push(st, '('); else if (exp[i] == ')') { if (st->next == NULL) { return false; } pop(st, e); } i++;//DONT FORGET I++!!!!!! } if (st->next != NULL) { match = false; } return match; } int main() { char *exp = "(((())(()))"; bool sss = Match(exp, 11); if (sss) { cout << "true1" << endl; } else cout << "false1" << endl; system("pause"); }
相关文章推荐
- 【数据结构基础】判别给定的表达式所含括号是否正确配对出现的算法。
- “链栈”判断表达式中的括号是否正确配对
- 再回首,数据结构——链栈的其它一些操作和应用
- 括号配对问题 ACM 数据结构
- B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
- 数据结构——链栈的基本操作
- 数据结构(1)——顺序栈的实现,以及括号匹配的应用
- 正则表达式简单验证内容中的括号是否配对
- B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
- 一个判别表达式中开、闭括号是否配对出现的算法
- 数据结构——算法之(011)( 字符串是否包含问题)
- jquery学习第十番 选择器的一些要注意的问题以及DOM操作
- Iphone数组一些基础操作 NSArray/NSMutableArray,以及内存注意问题。
- 数据库学习--B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
- Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题
- 括号配对:假设一个数学算式中包括圆括号"()",方括号”[]"和花括号“{}”三种类型,编写一算法判断表达式的括号是否配对。
- 转---asp.net 验证的问题:authentication,解释以及如果要匿名登录一些网页需要如何操作等。
- 数据结构算法复习[栈操作相关]
- 单链表基本操作以及一些常见的面试问题
- 设计一个算法判别用字符串表示的表达式中开、闭括号是否配对出现