C数据结构学习历程(4) 链栈之 括号匹配
2015-11-13 09:38
477 查看
我是参照《严蔚敏数据结构ppt》http://wenku.baidu.com/view/3ff16fc20242a8956aece41d.html以及《严蔚敏c数据结构视频》来写的,因为ppt上有些错,而视频上的代码不全,自己另写了。ppt上错哪,我就不指出了,大家可以对照着看,就能发现不同之处。
因为有注释,我直接copy代码了。也参考了关联的文章 “数据结构实验之栈四:括号匹配
因为有注释,我直接copy代码了。也参考了关联的文章 “数据结构实验之栈四:括号匹配
#include<iostream> using namespace std; #define OK 1 #define ERROR -1 #define MAX_SIZE 100 typedef int Status; typedef char ElemType; typedef struct Stack_Node //链栈的结点类型说明 { ElemType data; struct Stack_Node *next; }StackNode; StackNode *Init_Link_Stack() { StackNode * top; top=(StackNode *)malloc(sizeof(StackNode)); top->next=NULL; return (top); } void push(StackNode *top,ElemType e) { StackNode *p; p=(StackNode*)malloc(sizeof(StackNode)); p->data=e;p->next=top->next; top->next=p; } ElemType pop(StackNode*top) { if(top->next==NULL) {cout<<"为空时,不能弹出"<<endl;return -1;} //ElemType e=top->data ; //不能这样,因为top是为空栈的 StackNode *p=top->next; ElemType e=p->data ; top->next=p->next; free(p); return e; } ElemType getTop(StackNode *top) { return top->next->data; } void judge(char a[]) // 给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。 { int len=strlen(a); //遇到的第一个\0 int i; StackNode *stack=Init_Link_Stack(); for( i=0;i<len;i++) { if(a[i]=='('||a[i]=='['||a[i]=='{') { push(stack,a[i]); } if(a[i]!=')'&&a[i]!=']'&&a[i]!='}') //输入的不是括号 continue; if(stack->next==NULL)//有了右半个括号,但是没有左半个括号的情况,因为不能获取最上的数据了, { cout<<"no"<<endl;break; } if(a[i]-getTop(stack)==1||a[i]-getTop(stack)==2) //a[i]为3种情况,只要与最上匹配都行的。小括号相差1,大括号与中括号相差2 { pop(stack); } else { cout<<"no"<<endl; break; } } if(i==len) { if(stack->next==NULL) { cout<<"yes"<<endl; } } } int main() { char *a1="a+(b*c+{(d-3)]})"; char a[7]={'a','+','(','b','*','c',')'}; judge(a1); return 0; }
相关文章推荐
- 数据结构、算法与应用(C++描述)第二版 1.3
- 第九周--数据结构--猴子选大王【数组】之三
- 第九周--数据结构--猴子选大王【数组】之二
- 第九周--数据结构--猴子选大王【数组】之一
- 数据结构、算法与应用 (C++描述) 第二版 1.1
- 第12周SHH数据结构-【项目1 图基本算法库】
- 旭说数据结构之栈的小题目
- 第123讲:Hadoop集群管理之Namenode目录元数据结构详解学习笔记
- 多段图问题(图的邻接表)
- 农夫过河问题(图的邻接矩阵)
- 图(邻接矩阵)的深度、广度优先遍历
- 图(邻接表)的深度、广度优先遍历
- 数据结构基础:哈希表(HashMap)原理分析
- 旭说数据结构之栈
- 数据结构学习笔记
- 数据结构之链表与数组(二) -单向链表上的简单操作问题
- 数据结构之链表与数组(-)——数组和链表的简介
- C++数据结构: 顺序表 详细实现
- 旭说数据结构之链表补充(双向链表)
- 【c++版数据结构】之循环队列的实现