数据结构复习笔记(2)
1, 若入栈的元素为n,则可得到的输出序列数量为 (2n)!/(n+1)(n!)(n!)。
2, 用两个长度相同的栈S1,S2构造一个队列。在S1中进行入队操作,S2中进行出队操作 ,判断队列空的条件是,S1和S2同时为空,判断队列满的条件是S1和S2同时为满。
{
if(!Full(S1))
{//S1未满直接进入
S1.Push(x);
}
else
{
if(Empty(S2)==true)
{
while(!Empty(S1))
{
S2.Push(S1.Pop());
}
S1.Push(x);
}
}
}
ElemType DeQueue()
{
if(!Empty(S2))
{
return S2.Pop();
}
else
{
if(!Empty(S1))
{
while(!Empty(S1))
{
S2.Push(S1.Pop());
}
return S2.Pop();
}
}
}
3.求两个正整数的最大公约数的非递归算法。
struct Stack
{
int s;
int t;
};
int gcd(int m,int n)
{
int k;
Stack S[MAX];
int top = -1,tmp;
if(m<n)
{
tmp = m;
m = n;
n = tmp;
}
top++;
S[top].s = m;
S[top].t = n;
while(top>=0&&S[top].t!=0)
{
if(S[top].t!=0)
{
tmp = S[top].s;
m = S[top].t;
n = m%tmp;
top++;
S[top].s = m;
S[top].t = n;
}
}
return S[top].s;
}
4.
n+1,m =0
Akm(m,n) = Akm(m-1,1) m!=0,n=0
Akm(m-1,Akm(m,n-1)),m!=0,n!=0
写非递归算法。
typedef struct
{
int tm;
int tn;
}Stack;
int akm(int m,int n)
{
Stack S[MAXSIZE];
int top = 0;
S[top].tm = m;
S[top].tn = n;
do
{
while(S[top].tm!=0)
{
while(S[top].tn!=0)
{
top++;
S[top].tm = S[top-1].tm;
S[top].tn = S[top-1].tn-1;
}
S[top].tm--;
S[top].tn=1;
}
if(top>0)
{
top--;
S[top].tm--;
S[top].tn = S[top].tn+1;
}
}while(top!=0 || S[top].tm!=0);
top--;
return S[top+1].tn+1;
}
5.写出和下列递归过程等价的非递归过程
{
int k;
scanf("%d",&k);
if(k==0) sum = 1;
else
{
test(sum);
sum = k*sum;
}
printf("%d",sum);
}
分析:程序功能是按照输入的整数,按相反顺序进行累计乘法运算
void test(int &sum)
{
int Stack[MAXSIZE];
int top = -1,k;
sum = 1;
scanf("%d",&k);
while(k!=0)
{
Stack[++top] = k;
scanf("%d",&k);
}
printf("%d",sum);
while(top!=-1)
{
sum *=Stack[top--];
printf("%d",sum);
}
}
6.假设表达式由单字母变量和双目四则运算算符构成,写一个算法,将一个书写正确的表达式转换为逆波兰式。
{
char *p = express,ch1 = *p,ch2;
int k = 0;
InitStack(S);
Push(S,'#');
while(!StackEmpty(S))
{
if(!IsOperator(ch1))
suffix[k++] = ch1;
else
{
switch(ch1)
{
case '(':
Push(S,ch1);break;
case ')':
Pop(S,ch2);
while(ch2!='(')
{
suffix[k++] = ch2;
Pop(S,ch2);
}
break;
default:
while(GetTop(S,ch2)&&precede(ch2,ch1))
{
suffix[k++] = ch2;
Pop(S,ch2);
}
if(ch1!='#')
Push(S,ch1);
break;
}
}
if(ch1!="#')
ch1 = *++p;
}
suffix[k] = '\0';
}
数据结构复习笔记(2)相关推荐
- C++及数据结构复习笔记(十二)(列表)
2.2 列表 向量结构中,各数据的物理存放位置与逻辑次序完全对应,故可通过秩直接访问对应的元素,这称为循秩访问.为保证对列表元素访问的可行性,逻辑上互为前驱和后继的元素之间,应维护某种索引关系.这种索 ...
- 数据结构复习笔记(基本概念)
1.数据元素.数据项.数据对象.数据集合的概念 1.1数据元素 数据元素是组成数据.有一定意义的基本单位,在计算机中被当做整体来处理.也被称为记录 在人类中,数据元素就是人.在禽类中,数据元素就是猪. ...
- 数据结构复习-基础、线性表、栈、队列、串
数据结构复习笔记 作者: 收集于网络 第一章:概论 数据:指所有能被输入到计算机中,且能够被计算机识别.存储和加工处理的信息的载体,是计算机操作的对象的总称. 数据元素:数据的基本单位,有时一个数据元 ...
- 《王道408数据结构》笔记
数据结构复习笔记 第一章 绪论 1.1 数据结构基本概念 1.1.1 基本概念和术语 1.1.2 数据结构的三要素 1.2 算法和算法评价 1.2.1 算法的特征 1.2.2 好的算法的性质 1.2. ...
- 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)
2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...
- 2024考研《数据结构》复习笔记总览(文末有彩蛋)
前言 数据结构是是计算机专业的必修课,也是计算机考研的必学书目. 随着科技的飞速发展,数据结构的基础性地位不仅没有动摇,反而由于近年来算法工程师的高薪火爆,使得数据结构的重视程序空前高涨. 索引目录 ...
- 数据结构期末复习笔记(NEU版)
数据结构期末复习笔记 绪论 数据结构的概念 数据结构的分类 数据结构研究的内容 算法的重要特性 算法的设计要求 题目汇总 线性表 栈和队列 栈 队列 题目 数组与广义表 树 二叉树 二叉树的遍历 线索 ...
- 数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o
目录 前言 一.顺序表的定义 二.顺序表的初始化 三.顺序表的建立 四.顺序表的输出 五.顺序表的逆序输出 六.顺序表的插入操作 七.顺序表的删除操作 八.顺序表的按位和按值查找 基本操作的完整代码 ...
- JavaScript复习笔记
js复习笔记 js复习笔记,内容来源自廖雪峰JavaScript教程,w3school,菜鸟教程 一.快速入门 1.基本语法 1)js是一种直译式脚本语言 2)js结束语句后的;可以省略不写,原因是执 ...
最新文章
- 微信小程序日期相减得出天数
- hdu3622 二分+2sat
- python six库_six库 解决python2的项目如何能够完全迁移到python3
- 成为 Linux 终端高手的七种武器
- manjaro Linux调节屏幕显示亮度
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 27丨每次访问的交易次数【难度困难-提前放出来】​
- android百度多渠道打包,Android多渠道打包方案的实践与优化
- 差分约束系统 POJ 3169 Layout
- jquery时间倒计时
- java加密算法之DES篇
- Nature命名规范
- istio 防故障流量控制
- ios开发的p12和provision
- 开发快手爬票项目(中)
- 《微信小游戏远程服务器本地搭建》——本地搭建IIS静态文件服务器
- 【DB】数据库面试笔试题库及详解(小麦苗DBA宝典出品)--数据库运维宝典
- 【JAVAWEB开发】带你零基础学JAVA项目(二嗨租车项目篇)
- mysql老司机之路
- 苹果CMS海螺模版V4.0修复版
- 阿里云服务器漏洞phpmyadmin CVE-2016-6617 SQL注入漏洞 解决方法
热门文章
- python遍历txt每一行_python – 计算(和写入)文本文件中每一行的...
- 面试问题汇总 精选 分析 解答 职业规划 part 4
- apache 官方 Dubbo 文档
- IntelliJ IDEA添加jar包
- 最好理解的: spring ioc原理讲解,强烈推荐!
- PHP中插件机制的一种实现方案
- [剑指Offer] 25.复杂链表的复制
- ORM中的Model与DDD中的DomainModel
- Dojo学习笔记(三):类化JavaScript
- ios开发笔记之 线程间通信