顺序栈与链栈的简单应用
2016-09-26 20:35
183 查看
1. 课本P57例3.4 判断一个字符串是否是对称串
源代码:
程序截图:
2. 课本P70例3.5 判断输入表达式中的括号是否配对(假设只含有左右圆括号)
源代码:
程序截图:
源代码:
#include <stdio.h> #include <string.h> #include <malloc.h> #define MaxSize 1000 typedef char Elemtype; typedef struct { Elemtype data[MaxSize]; //元素 int top; //栈顶指针 } SqStack; void InitStack(SqStack *&s) { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } void DestroyStack(SqStack *&s) { free(s); } bool Push(SqStack *&s,Elemtype e) { if(s->top==MaxSize-1) return false; s->top++; s->data[s->top]=e; return true; } bool Pop(SqStack *&s,Elemtype &e) { if(s->top==-1) return false; e=s->data[s->top]; s->top--; return true; } bool symmetry(Elemtype a[]) { int i; SqStack *s; Elemtype e; InitStack(s); for(i=0;a[i]!='\0';i++) Push(s,a[i]); for(i=0;a[i]!='\0';i++) { Pop(s,e); if(a[i]!=e) { DestroyStack(s); return false; } } DestroyStack(s); return true; } int main() { SqStack *s; Elemtype a[1000]; InitStack(s); while(gets(a)) //多组输入字符串 { if(symmetry(a)) printf("该字符串是对称串\n"); else printf("该字符串不是对称串\n"); } return 0; }
程序截图:
2. 课本P70例3.5 判断输入表达式中的括号是否配对(假设只含有左右圆括号)
源代码:
#include <stdio.h> #include <malloc.h> #include <string.h> typedef char Elemtype; typedef struct node { int data; struct node *next; } LiStack; void InitStack(LiStack *&l) { l=(LiStack *)malloc(sizeof(LiStack)); l->next=NULL; } void DestroyStack(LiStack *&l) { LiStack *pre=l,*p=l->next; while(p!=NULL) { free(pre); pre=p; p=pre->next; } free(pre); } bool StackEmpty(LiStack *l) { return (l->next==NULL); } void Push(LiStack *&l,Elemtype e) { LiStack *p; p=(LiStack *)malloc(sizeof(LiStack)); p->data=e; p->next=l->next; l->next=p; } bool Pop(LiStack *&l,Elemtype &e) { LiStack *p; if(l->next==NULL) return false; p=l->next; e=p->data; l->next=p->next; free(p); return true; } bool GetTop(LiStack *l,Elemtype &e) { if(l->next==NULL) return false; e=l->next->data; return true; } bool match(Elemtype exp[],int n) { int i=0; char e; bool match=true; LiStack *st; InitStack(st); //初始化栈 while(i<n && match) //扫描exp中的所有字符 { if(exp[i]=='(') //当前字符为左括号,进栈 Push(st,exp[i]); else if(exp[i]==')') //当前字符为右括号 { if(GetTop(st,e)==true)//能够取出栈顶元素 { if(e!='(') //栈顶元素不为'('时表示不匹配 match=false; else //匹配,将栈顶元素出栈 Pop(st,e); } else match=false; //无法取出栈顶元素,表示不匹配 } i++; } if(!StackEmpty(st)) //最后栈不空时,表示不匹配 match=false; DestroyStack(st); //销毁栈 return match; } int main() { Elemtype a[1000]; int n; while(gets(a)) { n=strlen(a); if(match(a,n)) printf("输入的表达式括号配对!\n"); else printf("输入的表达式括号不配对!\n"); } return 0; }
程序截图:
相关文章推荐
- 链栈以及顺序栈应用—算数表达式
- java(j2ee)应用-简单自定义标签开发全过程----之一(Inber)
- BootStrap便签页的简单应用
- Tomcat4/5连接池的设置及简单应用示例
- Tomcat4/5连接池的设置及简单应用示例
- J2ME应用实例——一个简单的计算器实现(附源代码)
- 一个简单的定时器应用: VarTimer (java)
- Tomcat4/5连接池的设置及简单应用示例
- java(j2ee)应用-简单自定义标签开发全过程----之一(Inber)——JAVA夜未眠
- 有行统计项和列统计项的行列转换,以及EXCEL导入SQL的简单应用
- XML在Web中的简单应用
- EJB中JNDI的逻辑名的使用及部署_{EJB之无状态会话Bean简单应用-学习与实践}续(inber原作)
- SQLSERVER扩展存储过程XP_CMDSHELL的简单应用
- 使用C#开发一个简单的P2P应用
- [原创]用jar命令将Web应用打包成war文件的简单方法
- 使用C#开发一个简单的P2P应用
- 线程池在web上的简单应用
- 简单dll动态链接库的建立和应用
- Tomcat4/5连接池的设置及简单应用示例
- J2ME应用实例——一个简单的计算器实现(附源代码)