数据结构复习笔记(2)

简介:
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';
}



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/09/10/500208.html,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
6月前
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
6月前
|
存储 算法
【树】数据结构——树和二叉树的概念&笔记
【树】数据结构——树和二叉树的概念&笔记
|
6月前
|
算法 Java 索引
12.12_黑马数据结构与算法笔记Java
12.12_黑马数据结构与算法笔记Java
53 1
|
5月前
|
存储 算法 C语言
软考中级之数据库系统工程师笔记总结(二)数据结构与算法
软考中级之数据库系统工程师笔记总结(二)数据结构与算法
42 0
|
6月前
|
存储 算法 Linux
【内核链表】数据结构——深入理解内核链表的概念和操作&笔记
【内核链表】数据结构——深入理解内核链表的概念和操作&笔记
【循环链表】数据结构——单向循环链表和双向循环链表操作&笔记
【循环链表】数据结构——单向循环链表和双向循环链表操作&笔记
【数据结构】做题笔记--区间反转链表
【数据结构】做题笔记--区间反转链表
|
7月前
|
存储 机器学习/深度学习 人工智能
【软件设计师—基础精讲笔记8】第八章 数据结构
【软件设计师—基础精讲笔记8】第八章 数据结构
93 0
|
7月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--快速排序
数据结构与算法(Java篇)笔记--快速排序