1,  若入栈的元素为n,则可得到的输出序列数量为 (2n)!/(n+1)(n!)(n!)。

2,  用两个长度相同的栈S1,S2构造一个队列。在S1中进行入队操作,S2中进行出队操作 ,判断队列空的条件是,S1和S2同时为空,判断队列满的条件是S1和S2同时为满。

void EnQueue(ElemType x)
{
    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.求两个正整数的最大公约数的非递归算法。

#define MAX 100
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

写非递归算法。

#define MAXSIZE 100
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.写出和下列递归过程等价的非递归过程

void test(int &sum)
{
    int k;
    scanf("%d",&k);
    if(k==0) sum = 1;
    else
    {
        test(sum);
        sum = k*sum;
    }
    printf("%d",sum);
}

分析:程序功能是按照输入的整数,按相反顺序进行累计乘法运算

#define MAXSIZE 100
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.假设表达式由单字母变量和双目四则运算算符构成,写一个算法,将一个书写正确的表达式转换为逆波兰式。

void ConPoland(char express[],char suffix[])
{
    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)相关推荐

  1. C++及数据结构复习笔记(十二)(列表)

    2.2 列表 向量结构中,各数据的物理存放位置与逻辑次序完全对应,故可通过秩直接访问对应的元素,这称为循秩访问.为保证对列表元素访问的可行性,逻辑上互为前驱和后继的元素之间,应维护某种索引关系.这种索 ...

  2. 数据结构复习笔记(基本概念)

    1.数据元素.数据项.数据对象.数据集合的概念 1.1数据元素 数据元素是组成数据.有一定意义的基本单位,在计算机中被当做整体来处理.也被称为记录 在人类中,数据元素就是人.在禽类中,数据元素就是猪. ...

  3. 数据结构复习-基础、线性表、栈、队列、串

    数据结构复习笔记 作者: 收集于网络 第一章:概论 数据:指所有能被输入到计算机中,且能够被计算机识别.存储和加工处理的信息的载体,是计算机操作的对象的总称. 数据元素:数据的基本单位,有时一个数据元 ...

  4. 《王道408数据结构》笔记

    数据结构复习笔记 第一章 绪论 1.1 数据结构基本概念 1.1.1 基本概念和术语 1.1.2 数据结构的三要素 1.2 算法和算法评价 1.2.1 算法的特征 1.2.2 好的算法的性质 1.2. ...

  5. 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)

    2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...

  6. 2024考研《数据结构》复习笔记总览(文末有彩蛋)

    前言 数据结构是是计算机专业的必修课,也是计算机考研的必学书目. 随着科技的飞速发展,数据结构的基础性地位不仅没有动摇,反而由于近年来算法工程师的高薪火爆,使得数据结构的重视程序空前高涨. 索引目录 ...

  7. 数据结构期末复习笔记(NEU版)

    数据结构期末复习笔记 绪论 数据结构的概念 数据结构的分类 数据结构研究的内容 算法的重要特性 算法的设计要求 题目汇总 线性表 栈和队列 栈 队列 题目 数组与广义表 树 二叉树 二叉树的遍历 线索 ...

  8. 数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o

    目录 前言 一.顺序表的定义 二.顺序表的初始化 三.顺序表的建立 四.顺序表的输出 五.顺序表的逆序输出 六.顺序表的插入操作 七.顺序表的删除操作 八.顺序表的按位和按值查找 基本操作的完整代码 ...

  9. JavaScript复习笔记

    js复习笔记 js复习笔记,内容来源自廖雪峰JavaScript教程,w3school,菜鸟教程 一.快速入门 1.基本语法 1)js是一种直译式脚本语言 2)js结束语句后的;可以省略不写,原因是执 ...

最新文章

  1. 微信小程序日期相减得出天数
  2. hdu3622 二分+2sat
  3. python six库_six库 解决python2的项目如何能够完全迁移到python3
  4. 成为 Linux 终端高手的七种武器
  5. manjaro Linux调节屏幕显示亮度
  6. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 27丨每次访问的交易次数【难度困难-提前放出来】​
  7. android百度多渠道打包,Android多渠道打包方案的实践与优化
  8. 差分约束系统 POJ 3169 Layout
  9. jquery时间倒计时
  10. java加密算法之DES篇
  11. Nature命名规范
  12. istio 防故障流量控制
  13. ios开发的p12和provision
  14. 开发快手爬票项目(中)
  15. 《微信小游戏远程服务器本地搭建》——本地搭建IIS静态文件服务器
  16. 【DB】数据库面试笔试题库及详解(小麦苗DBA宝典出品)--数据库运维宝典
  17. 【JAVAWEB开发】带你零基础学JAVA项目(二嗨租车项目篇)
  18. mysql老司机之路
  19. 苹果CMS海螺模版V4.0修复版
  20. 阿里云服务器漏洞phpmyadmin CVE-2016-6617 SQL注入漏洞 解决方法

热门文章

  1. python遍历txt每一行_python – 计算(和写入)文本文件中每一行的...
  2. 面试问题汇总 精选 分析 解答 职业规划 part 4
  3. apache 官方 Dubbo 文档
  4. IntelliJ IDEA添加jar包
  5. 最好理解的: spring ioc原理讲解,强烈推荐!
  6. PHP中插件机制的一种实现方案
  7. [剑指Offer] 25.复杂链表的复制
  8. ORM中的Model与DDD中的DomainModel
  9. Dojo学习笔记(三):类化JavaScript
  10. ios开发笔记之 线程间通信