数据结构之栈的平衡符号

上传人:宝路 文档编号:23508805 上传时间:2017-12-01 格式:DOCX 页数:5 大小:18.36KB
返回 下载 相关 举报
数据结构之栈的平衡符号_第1页
第1页 / 共5页
数据结构之栈的平衡符号_第2页
第2页 / 共5页
数据结构之栈的平衡符号_第3页
第3页 / 共5页
数据结构之栈的平衡符号_第4页
第4页 / 共5页
数据结构之栈的平衡符号_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《数据结构之栈的平衡符号》由会员分享,可在线阅读,更多相关《数据结构之栈的平衡符号(5页珍藏版)》请在金锄头文库上搜索。

1、初学者在编写代码并且编译时,难免会因为少写了一个)和被编译器报错。也就是说,编译器会去匹配括号是否匹配。当你输入了一个(,很自然编译器回去检查你是否有另一个)符号与之匹配。如果所有的括号都能够成对出现,那么编译器是能够通过的。否则编译器会报错。例如字符序列“(a+b)”是匹配的,而字符序列(a+b则不是。在检测括号匹配的算法中使用到了栈,算法描述如下:创建一个空栈,读取字符序列直到结尾。如果字符是开放符号(,将其入栈;如果是一个封闭符号),则当栈为空时报错。否则,将栈顶元素弹出。如果弹出的符号不是对应的开放符号,则报错。当字符序列结束,判断栈是否为空,为空则报错。如下代码:balance.cp

2、p#include #include #define ElementType chartypedef struct Node *PtrToNode;typedef PtrToNode Stack;typedef struct NodeElementType Element;PtrToNode Next;int IsEmpty(Stack S);Stack CreateStack();void DisposeStack(Stack S);void MakeEmpty(Stack S);void Push(ElementType X,Stack S);ElementType Top(Stack S

3、);void Pop(Stack S);/判断栈是否为空int IsEmpty(Stack S)return S-Next = NULL;/创建链栈Stack CreateStack()Stack S = malloc(sizeof(struct Node);if(S = NULL)printf(No enough memory!);return NULL;S-Next = NULL;MakeEmpty(S);return S;void MakeEmpty(Stack S)if(S = NULL)printf(Use CreateStack First!);elsewhile(!IsEmpty

4、(S)Pop(S);void Push(ElementType X,Stack S)PtrToNode Tmp;Tmp = malloc(sizeof(struct Node);if(Tmp != NULL)Tmp-Element = X;Tmp-Next = S-Next;S-Next = Tmp;elseprintf(Out of space!);void Pop(Stack S)if(IsEmpty(S)printf(The Stack is Empty!);elsePtrToNode Tmp = S-Next;S-Next = Tmp-Next;free(Tmp);ElementTyp

5、e Top(Stack S)if(IsEmpty(S)printf(The stack is empty!);return 0;elsereturn S-Next-Element;/平衡符号判断void balance(char *ch,Stack S)ElementType c;MakeEmpty(S);while(c=*ch) != 0)printf(%cn,c);switch(c)case (:case :case :Push(c,S);break;case ):if(IsEmpty(S)fprintf(stderr,The symbols not balance!n);return;e

6、lseif(Top(S)=()Pop(S);else fprintf(stderr,The symbols not balance!n);return;break;case :if(IsEmpty(S)fprintf(stderr,The symbols not balance!n);return;elseif(Top(S)=)Pop(S);else fprintf(stderr,The symbols not balance!n);return;break;case :if(IsEmpty(S)fprintf(stderr,The symbols not balance!n);return;elseif(Top(S)=)Pop(S);else fprintf(stderr,The symbols not balance!n);return;break;default:break;ch+;if(IsEmpty(S) fprintf(stdout,The Symbols Balance!n);elsefprintf(stderr,The Symbols Not Balance!n);int main(void)char ch = (a+b)dc*d;Stack S = CreateStack();balance(ch,S);return 0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号