数据结构复习笔记(2)

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

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

数据结构复习笔记(2) void  EnQueue(ElemType x)
数据结构复习笔记(2)
{
数据结构复习笔记(2)    
if(!Full(S1))
数据结构复习笔记(2)    
{//S1未满直接进入
数据结构复习笔记(2)
        S1.Push(x);
数据结构复习笔记(2)    }

数据结构复习笔记(2)    
else
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        
if(Empty(S2)==true)
数据结构复习笔记(2)        
{
数据结构复习笔记(2)            
while(!Empty(S1))
数据结构复习笔记(2)            
{
数据结构复习笔记(2)                S2.Push(S1.Pop());
数据结构复习笔记(2)            }

数据结构复习笔记(2)            S1.Push(x);        
数据结构复习笔记(2)        }

数据结构复习笔记(2)    }

数据结构复习笔记(2)}

数据结构复习笔记(2)
数据结构复习笔记(2)ElemType DeQueue()
数据结构复习笔记(2)
{
数据结构复习笔记(2)    
if(!Empty(S2))
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        
return S2.Pop();
数据结构复习笔记(2)    }

数据结构复习笔记(2)    
else
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        
if(!Empty(S1))
数据结构复习笔记(2)        
{
数据结构复习笔记(2)            
while(!Empty(S1))
数据结构复习笔记(2)            
{
数据结构复习笔记(2)                S2.Push(S1.Pop());
数据结构复习笔记(2)            }

数据结构复习笔记(2)            
return S2.Pop();
数据结构复习笔记(2)        }

数据结构复习笔记(2)        
数据结构复习笔记(2)    }

数据结构复习笔记(2)}

数据结构复习笔记(2)

3.求两个正整数的最大公约数的非递归算法。

数据结构复习笔记(2) #define  MAX 100
数据结构复习笔记(2)
struct  Stack
数据结构复习笔记(2)
{
数据结构复习笔记(2)    
int s;
数据结构复习笔记(2)    
int t;
数据结构复习笔记(2)}
;
数据结构复习笔记(2)
数据结构复习笔记(2)
int  gcd( int  m, int  n)
数据结构复习笔记(2)
{
数据结构复习笔记(2)    
int k;
数据结构复习笔记(2)    Stack S[MAX];
数据结构复习笔记(2)    
int top = -1,tmp;
数据结构复习笔记(2)    
if(m<n)
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        tmp 
= m;
数据结构复习笔记(2)        m 
= n;
数据结构复习笔记(2)        n 
= tmp;
数据结构复习笔记(2)    }

数据结构复习笔记(2)    top
++;
数据结构复习笔记(2)    S[top].s 
= m;
数据结构复习笔记(2)    S[top].t 
= n;
数据结构复习笔记(2)    
while(top>=0&&S[top].t!=0)
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        
if(S[top].t!=0)
数据结构复习笔记(2)        
{
数据结构复习笔记(2)            tmp 
= S[top].s;
数据结构复习笔记(2)            m 
= S[top].t;
数据结构复习笔记(2)            n 
= m%tmp;
数据结构复习笔记(2)            top
++;
数据结构复习笔记(2)            S[top].s 
= m;
数据结构复习笔记(2)            S[top].t 
= n;
数据结构复习笔记(2)        }

数据结构复习笔记(2)    }

数据结构复习笔记(2)    
return S[top].s;
数据结构复习笔记(2)}

数据结构复习笔记(2)

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

写非递归算法。

数据结构复习笔记(2) #define  MAXSIZE 100
数据结构复习笔记(2)typedef 
struct
数据结构复习笔记(2)
{
数据结构复习笔记(2)    
int tm;
数据结构复习笔记(2)    
int tn;
数据结构复习笔记(2)}
Stack;
数据结构复习笔记(2)
数据结构复习笔记(2)
int  akm( int  m, int  n)
数据结构复习笔记(2)
{
数据结构复习笔记(2)    Stack S[MAXSIZE];
数据结构复习笔记(2)    
int top = 0;
数据结构复习笔记(2)    S[top].tm 
= m;
数据结构复习笔记(2)    S[top].tn 
= n;
数据结构复习笔记(2)    
do
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        
while(S[top].tm!=0)
数据结构复习笔记(2)        
{
数据结构复习笔记(2)            
while(S[top].tn!=0)
数据结构复习笔记(2)            
{
数据结构复习笔记(2)                top
++;
数据结构复习笔记(2)                S[top].tm 
= S[top-1].tm;
数据结构复习笔记(2)                S[top].tn 
= S[top-1].tn-1;
数据结构复习笔记(2)            }

数据结构复习笔记(2)            S[top].tm
--;
数据结构复习笔记(2)            S[top].tn
=1;
数据结构复习笔记(2)        }

数据结构复习笔记(2)        
if(top>0)
数据结构复习笔记(2)        
{
数据结构复习笔记(2)            top
--;
数据结构复习笔记(2)            S[top].tm
--;
数据结构复习笔记(2)            S[top].tn 
= S[top].tn+1;
数据结构复习笔记(2)        }

数据结构复习笔记(2)        
数据结构复习笔记(2)    }
while(top!=0 || S[top].tm!=0);
数据结构复习笔记(2)    top
--;
数据结构复习笔记(2)    
return S[top+1].tn+1;
数据结构复习笔记(2)}

5.写出和下列递归过程等价的非递归过程

数据结构复习笔记(2) void  test( int   & sum)
数据结构复习笔记(2)
{
数据结构复习笔记(2)    
int k;
数据结构复习笔记(2)    scanf(
"%d",&k);
数据结构复习笔记(2)    
if(k==0) sum = 1;
数据结构复习笔记(2)    
else
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        test(sum);
数据结构复习笔记(2)        sum 
= k*sum;
数据结构复习笔记(2)    }

数据结构复习笔记(2)    printf(
"%d",sum);
数据结构复习笔记(2)}

数据结构复习笔记(2)

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

数据结构复习笔记(2) #define  MAXSIZE 100
数据结构复习笔记(2)
void  test( int   & sum)
数据结构复习笔记(2)
{
数据结构复习笔记(2)    
int Stack[MAXSIZE];
数据结构复习笔记(2)    
int top = -1,k;
数据结构复习笔记(2)    sum 
= 1;
数据结构复习笔记(2)    scanf(
"%d",&k);
数据结构复习笔记(2)    
while(k!=0)
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        Stack[
++top] = k;
数据结构复习笔记(2)        scanf(
"%d",&k);
数据结构复习笔记(2)    }

数据结构复习笔记(2)    printf(
"%d",sum);
数据结构复习笔记(2)    
while(top!=-1)
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        sum 
*=Stack[top--];
数据结构复习笔记(2)        printf(
"%d",sum);
数据结构复习笔记(2)    }

数据结构复习笔记(2)}

数据结构复习笔记(2)        
数据结构复习笔记(2)


6
.假设表达式由单字母变量和双目四则运算算符构成,写一个算法,将一个书写正确的表达式转换为逆波兰式。

数据结构复习笔记(2) void  ConPoland( char  express[], char  suffix[])
数据结构复习笔记(2)
{
数据结构复习笔记(2)    
char *= express,ch1 = *p,ch2;
数据结构复习笔记(2)    
int k = 0;
数据结构复习笔记(2)    InitStack(S);
数据结构复习笔记(2)    Push(S,
'#');
数据结构复习笔记(2)    
while(!StackEmpty(S))
数据结构复习笔记(2)    
{
数据结构复习笔记(2)        
if(!IsOperator(ch1))
数据结构复习笔记(2)            suffix[k
++= ch1;
数据结构复习笔记(2)        
else
数据结构复习笔记(2)        
{
数据结构复习笔记(2)            
switch(ch1)
数据结构复习笔记(2)            
{
数据结构复习笔记(2)                
case '(':    
数据结构复习笔记(2)                    Push(S,ch1);
break;
数据结构复习笔记(2)                
case ')':    
数据结构复习笔记(2)                    Pop(S,ch2);
数据结构复习笔记(2)                    
while(ch2!='(')    
数据结构复习笔记(2)                    
{
数据结构复习笔记(2)                        suffix[k
++= ch2;
数据结构复习笔记(2)                        Pop(S,ch2);
数据结构复习笔记(2)                    }

数据结构复习笔记(2)                    
break;
数据结构复习笔记(2)                
default:
数据结构复习笔记(2)                    
while(GetTop(S,ch2)&&precede(ch2,ch1))
数据结构复习笔记(2)                    
{
数据结构复习笔记(2)                        suffix[k
++= ch2;
数据结构复习笔记(2)                        Pop(S,ch2);
数据结构复习笔记(2)                    }

数据结构复习笔记(2)                    
if(ch1!='#')
数据结构复习笔记(2)                        Push(S,ch1);
数据结构复习笔记(2)                    
break;                            
数据结构复习笔记(2)                    
数据结构复习笔记(2)            }

数据结构复习笔记(2)        }

数据结构复习笔记(2)        
if(ch1!="#')    
数据结构复习笔记(2)
            ch1 = *++p;
数据结构复习笔记(2)    }

数据结构复习笔记(2)    suffix[k] 
= '\0';
数据结构复习笔记(2)}

数据结构复习笔记(2)

你可能感兴趣的:(数据结构)