数据结构3————队栈的应用1
来源:互联网 发布:linux卸载光盘命令 编辑:程序博客网 时间:2024/06/18 16:35
数据结构3————队栈的应用1
一.前言
- 关于队和栈的概念,可以看我的前两篇博客,在这里我就不贴队和栈的源代码,都是关于核心函数的代码。如果需要看完整代码,或者是运行查看结果,可以参看末尾的git链接,里面有源码。
- 这一篇里的应用都是很简单的应用,其实不需要队和栈都可以实现,为了练手我就用队和栈实现了一次(其实是作业….)。
- 关于堆和栈的更高级的应用(迷宫,马踏棋盘,中缀转后缀,后缀表达式的计算)可以参看我后续的博客。
- 本文所介绍的应用
- 括号匹配
- 判断回文数
- 进制转换
- 杨辉三角
二.括号匹配
1.问题描述
假设在表达式中
([]())或[([ ][ ])]等为正确的格式,
[( ])或([( ))或 (()])均为不正确的格式。
2.思路
- 凡出现左括弧,则进栈;
- 凡出现右括弧,首先检查栈是否空
- 若栈空,则表明该“右括弧”多余,
- 否则和栈顶元素比较,
- 若相匹配,则“左括弧出栈” ,
- 否则表明不匹配。
- 表达式检验结束时,若栈空,则表明表达式中匹配正确,
否则表明“左括弧”有余。
3.代码
void f1(char string[]){ SeqStack *seq; char c; int i; seq=InitStack(); for(i=0;string[i];i++) { if(string[i]=='('||string[i]=='{'||string[i]=='['){ Push(seq,string[i]); //入栈 }else{ if(seq->top==-1){//判断是否栈空 printf("不配对!\n"); return; //结束匹配 }else{ Pop(seq,&c);//出栈 switch(string[i]){ case ')' : if(c!='('){ printf("不匹配\n"); return; } break; case ']' : if(c!='['){ printf("不匹配\n"); return; } break; case '}' : if(c!='{'){ printf("不匹配\n"); return; } break; default : printf("不匹配\n"); return; } } } } if(seq->top!=-1){ printf("不配对!\n"); return; } printf("配对成功\n"); }
三.判断回文
1.问题描述
判断一个字符串是否为回文字符串
回文:asddsa asdsa
2.思路
- 将字符串的前半段(strlen(string)/2)入栈
- 将后半段(strlen(string)/2+strlen(string)%2)与栈顶元素比较,如果都想要
- strlen(string)/2+strlen(string)%2 加strlen(string)%2是为了区别长度为奇数和偶数的情况
3.代码
int f1(char string[]){ SeqStack *seq; seq=InitStack(); int i; char c; for(i=0;i<strlen(string)/2;i++){ Push(seq,string[i]); } for(i=i+strlen(string)%2;string[i];i++){ Pop(seq,&c); if(c!=string[i]){ printf("不是回文\n"); break; } } if(i==strlen(string)) printf("是回文\n");}
四.进制转换
1.问题描述
将10进制转为2(任意)进制
2.思路
- 将该数对二取余结果入栈
- 该数=该数/2;
- 将栈内结果输出
3.代码
void Convert(int num){ int i; while(num){ i=num%RADIX; num=num/RADIX; Push(SS,i); }} int main(void){ int i,num; SS=InitStack(); //printf("请输入要转换的数\n"); //scanf("%d",&num); for(num=0;num<16;num++){ Convert(num); while(SS->top!=-1){ printf("%d",i,Pop(SS,&i)); } printf("\n"); }}
五.杨辉三角
1.问题描述
2.思路
3.代码
int main(void){ CSeQeue *qS; Elemtype e,s; qS=InitSeQueue(); InSeQueue(qS,0);//入队 InSeQueue(qS,1); InSeQueue(qS,0); int i,h=8; for(i=0;i<h;i++){ do{ QutSeQueue(qS,&s);//出队 GetSeQueue(qS,&e);//取出队头元素(不出对) if(e!=0) printf("%4d",e); else printf("\n"); InSeQueue(qS,s+e); }while(e!=0); InSeQueue(qS,e); } while(!EmptySeQueue(qS)){ QutSeQueue(qS,&s); if (s!=0) printf("%4d",s); } printf("\n");}
六.源代码
test3
阅读全文
0 0
- 数据结构—栈的应用
- 数据结构—递归的应用
- 数据结构——栈的应用
- 数据结构——栈的应用举例
- 数据结构——栈应用
- 数据结构3————队栈的应用1
- 数据结构——树形结构的应用
- 数据结构(Java)——堆的应用
- 数据结构算法——单链表的应用
- 数据结构与算法——栈的作用及应用
- 数据结构笔记2——栈以及基本的应用
- 数据结构之栈的应用——四则表达式求值
- c++ 数据结构 *** 栈的应用——计算器
- 数据结构 栈的应用——算术表达式求值
- 数据结构(六)——栈的应用
- 【数据结构】栈的应用——检测括号是否匹配
- 数据结构(7)—栈的应用之迷宫求解
- 数据结构与算法(7)— 栈的应用
- IAR各版本 资料下载
- c#读取、生成图片
- 【科学可视】-KK0001-科普中国-01-中国中医与人类微生物组计划
- ubuntu14.05 安装 ssh
- 线程
- 数据结构3————队栈的应用1
- IONIC打安卓签名包
- 6.TensorFlow模型的保存和读取
- jQuerymobile入门(一)
- jsp前端判断文件格式
- 面向对象六大原则之接口隔离原则
- 【科学可视】-KK0002-TED 演讲-01-我们是否过滤掉了错误的微生物?
- Gym 101484 F No Link, Cut Tree![完全二叉树][st]
- 安全的安装Anaconda3 5.0.0 Windows x86_64