青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

newplan

阿基米德在洗澡時發現浮力原理,高興得來不及穿上褲子,跑到街上大喊:Eureka(我找到了)。
posts - 39, comments - 26, trackbacks - 0, articles - 4
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

重言式判別-二叉樹實現

Posted on 2007-12-04 18:10 山泉彎延 閱讀(2711) 評論(0)  編輯 收藏 引用 所屬分類: 數據結構實驗集
#include <cstdlib>
#include 
<iostream>
#include 
<conio.h>
#define   Thing char
using namespace std;
#define STACK_SIZE  
50

class Stack{
      
private:
              
int stackPtr;
              Thing stack[STACK_SIZE];
      
public:
              Stack(void);
              
int emptyStack(void); 
              bool  push(Thing);
              Thing pop(void);
              Thing getTop(void);
              Thing getElement(
int);
              
int   getStackPtr(void);
      protected:
      };

Stack::Stack(void)
{
   stackPtr
=-1;
}                   

int 
Stack::emptyStack(void)
{
     return stackPtr
==-1;


bool 
Stack::push(Thing iThing)
{
     
if(stackPtr+1==STACK_SIZE)
        return 
false;
     stack[
++stackPtr]=iThing;
        return 
true;
}

Thing 
Stack::pop(void)
{    
     return  stack[stackPtr
--];
}

Thing 
Stack::getTop(void)
{  
    return   stack[stackPtr];
}

int 
Stack::getStackPtr(void)
{
   return stackPtr;
}
class BiTree
{
      
private: Thing   inform;
               
int     value; 
               BiTree  
*lchild,*rchild;            
      
public:
               BiTree(void);
               BiTree(Thing iThing );
               BiTree(Thing iThing  ,BiTree 
*lchild ,BiTree *rchild);
               BiTree
* getRight(void); 
               BiTree
* getLeft (void);
               Thing getInform (void);
               
int   getValue(void);
               void setValue(
int ival);
               void setRight(BiTree 
*iNode);
               void setLeft (BiTree 
*iNode);
               void setInform (Thing iThing ); 
      protected:
};
BiTree::BiTree(void)

  lchild
=NULL;
  rchild
=NULL;
}
 BiTree::BiTree(Thing iThing)

  inform
=iThing;
  lchild
=NULL;
  rchild
=NULL;
}
 BiTree::BiTree(Thing iThing  ,BiTree 
*llchild ,BiTree *rrchild)
 {
  inform
=iThing ;
  lchild
=llchild ;//開始的時候設的參數與類中的成員lchild和rchild同名,導致參數傳遞失敗!所以后面修改為llchild和rrchild 
  rchild
=rrchild ;
 }
 BiTree
*
 BiTree::getRight(void)
{
  return  rchild;                   



 BiTree
*
 BiTree::getLeft(void)
{
  return  lchild;                   


Thing 
BiTree::getInform(void)
{
   return inform ; 
}

int   
BiTree::getValue(void)
{
     return value;
}
                           
void 
BiTree::setValue(
int ival)
{
     value
=ival;
}
 void 
  BiTree::setRight(BiTree 
*iNode)
 {
  rchild
=iNode;
 }
 
 void 
 BiTree::setLeft(BiTree 
*iNode)
 {
  lchild
=iNode;
 }
 void 
 BiTree::setInform(Thing iThing)
 {
   inform
=iThing;                      
 }
#define Thing1 BiTree
*
class Stack1{
      
private:
              
int stackPtr;
              Thing1 stack[STACK_SIZE];
      
public:
              Stack1(void);
              
int emptyStack(void); 
              bool push(Thing1);
              Thing1 pop(void);
              Thing1 getTop(void);
              
int   getStackPtr(void);
      protected:
      };

Stack1::Stack1(void)
{
 stackPtr
=-1;
}                   

int 
Stack1::emptyStack(void)
{
     return stackPtr
==-1;


bool 
Stack1::push(Thing1 iThing)
{
     
if(stackPtr+1==STACK_SIZE)
        return 
false;
     stack[
++stackPtr]=iThing;
        return 
true;
}

Thing1 
Stack1::pop(void)
{    
     return  stack[stackPtr
--];
}

Thing1 
Stack1::getTop(void)
{  
    return stack[stackPtr];
}

int 
Stack1::getStackPtr(void)
{
   return stackPtr;
}
bool In(char ch)
{
     switch(ch)
     {
     
case '~':
     case '|':
     case '#':
     case '(':
     case ')':
     case '&':return 1;
     default :return 0;
     }
}
bool precede(char c,char ch)
{    
     char ops[
7]="|&~#()";
     
int p1;
     
for( p1=0;p1!=6;p1++)
        
if(ops[p1]==c)break;
       
// printf("p1=%d\n",p1);
     
int p2;
     
for( p2=0;p2!=6;p2++)
        
if(ops[p2]==ch)break;
          
//printf("p2=%d\n",p2);
     
int op[6][6]={
      
//       | & ~ # ( )
      
/*|*/    1,0,0,1,0,1,
      
/*&*/    1,1,0,1,0,1,
      
/*~*/    1,1,0,1,0,1,
      
/*#*/    0,0,0,0,0,0,
      
/*(*/    0,0,0,1,0,1,
      
/*)*/    1,1,1,1,0,0     };
        
//  printf("op[p1][p2]=%d\n",op[p1][p2]);
          return op[p1][p2];
     
}
 
 
//例如:已知表達式 (a+b)×c – d/e
BiTree
* CrtExptree( char exp[] ) {

// 建立由合法的表達式字符串確定的只含二元操作符的

// 非空表達式樹,其存儲結構為二叉鏈表

   Stack S;
  
   char cha
='#';
   
   S.push(cha);
   
  
// printf("gettop cha==%c\n",S.getTop());
  
   Stack1 PTR;

   char 
*= exp
   
   char ch 
= *p;
  
// printf("ch=%c\n",ch);

   char c;
while (!(S.getTop()=='#'&& ch=='#')) {

      
if (!In(ch)) {if(ch==' ' && ch!='#' ) { p++; ch = *p;continue;}
                   else{BiTree *t=new BiTree(ch); PTR.push(t);//printf("PTR.getTop()->getInform=%c\n",PTR.getTop()->getInform());getch();
                    }}

            
else {
                 
// printf("go into else\n");
                  switch (ch) {

                      
case '(' :  S.push(ch);  break;

                      
case ')' : {
                                  //  printf("go into ')'");
                                    c
=S.pop();

                                    
while (c!='(')

                                          { BiTree 
*rc=NULL;
                                                  BiTree 
*lc=NULL;
                                             
if(c=='~'){rc=PTR.pop(); lc=NULL;}
                                             else{rc=PTR.pop(); lc=PTR.pop();}
                                             BiTree 
*t=new BiTree(c,lc,rc);
                                             PTR.push(t);
                                            
// printf("**************%c*********\n",t->getInform());
                                             c
=S.pop();
                                          }

                                      break;
                                      }

                      default : {
                                
//printf("go into default!\n");
                                
while((c=S.getTop()) && ( precede(c,ch)))

                                     {       
//printf("go into while\n"); 
                                            
if(c=='~')
                                            {   BiTree *rc=PTR.pop();
                                                 BiTree 
*lc=NULL;
                                                  BiTree 
*t=new BiTree(c,lc,rc);
                                                   PTR.push(t);
                                                     S.pop();     
                                            }
                                         
else{
                                             
//getch();
                                              BiTree 
*rc=PTR.pop();
                                             
//printf("rc=%c\n",rc->getInform());
                                             BiTree 
*lc=PTR.pop();
                                             
//printf("lc=%c\n",lc->getInform());
                                             BiTree 
*t=new BiTree(c,lc,rc);
                                            
// printf("t=%c\n",t->getInform());
                                             
//printf("t->rignt=%c\n",t->getRight()->getInform());
                                             PTR.push(t);
                                             S.pop();
                                             } 
                                     }

                                
if ( ch!='#' ) {S.push(ch);
                                //printf("S.PUSH=gettop()=%c\n",S.getTop());
                                              }
                                     
                                break;

                              } 
// defult

                          } 
// switch

               } 
// else

    
if ( ch!='#' ) { p++; ch = *p;}

  } 
// while

return PTR.pop();

// CrtExptree


int j[10]={0};



bool visit1(Thing iThing)
{  
//  static int count[5]={0,0,0,0,0};
     printf(
"%c",iThing);
    switch(iThing){
      
case 'A': j[0]++; break;
          case 'B':j[1]++;break;
              case 'C':j[2]++;break;
                     case 'D':j[3]++;break; 
                          case 'E':j[4]++;break; 
                               case 'F':j[5]++;break;
                                    case 'G':j[6]++;break;
                                         case 'H':j[7]++;break;
                                              case 'I':j[8]++;break;
                                                   case 'J':j[9]++;break;
                  
                  
                   }
     return 
1;
}


//int jie[5]={1,2,6,24,120};
//int *p=(int*)malloc(jie[n-1]*(sizeof(int));


bool visit2(BiTree 
*p)
{
     
if(p){
     switch(p
->getInform()){
                   
case '~':{int ival=p->getRight()->getValue(); ival=!(ival);p->setValue(ival);break; }
                   case 'A':{p->setValue(j[0]);/*printf("A==%d\n",j[0]);*/break;} 
                   case 'B':{p->setValue(j[1]);/*printf("B==%d\n",j[1]);*/break;}
                   case 'C':{p->setValue(j[2]);/*printf("C==%d\n",j[2]);*/break;}
                   case 'D':{p->setValue(j[3]);/*printf("D==%d\n",j[3]);*/break;}
                   case 'E':{p->setValue(j[4]);/*printf("E==%d\n",j[4]);*/break;}
                   case 'F':{p->setValue(j[5]);/*printf("F==%d\n",j[5]);*/break;}
                   case 'G':{p->setValue(j[6]);/*printf("G==%d\n",j[6]);*/break;}
                   case 'H':{p->setValue(j[7]);/*printf("H==%d\n",j[7]);*/break;}
                   case 'I':{p->setValue(j[8]);/*printf("I==%d\n",j[8]);*/break;}
                   case 'J':{p->setValue(j[9]);/*printf("J==%d\n",j[9]);*/break;}
                   case '|':{p->setValue( p->getLeft()->getValue() || p->getRight()->getValue());break;}
                   case '&':{p->setValue( p->getLeft()->getValue() && p->getRight()->getValue());break;}
                           }
  return 
1;}                           else  
                           return 
0;
}
bool
InOderTraverse(BiTree 
*p ,bool(*visit)(Thing))
{
                       
if(p)
                       {
                            
if(InOderTraverse(p->getLeft(),visit))
                                
if(visit(p->getInform()))
                                   
if(InOderTraverse(p->getRight(),visit))
                                        return 
1;
                        return 
0;
                        }
                        
else return 1;
}
bool
PostOderTraverse(BiTree 
*p ,bool(*visit)(BiTree*))
{
              
if(p)
                       {
                            
if(PostOderTraverse(p->getLeft(),visit))
                               
if(PostOderTraverse(p->getRight(),visit)) 
                                      
if(visit(p))
                                        return 
1;
                        return 
0;
                        }
                        
else return 1;
}



int val_num=0;
void 
call(int k)  
    {
       
if(j[k]==2)
          {j[k]
=0;
           j[
++k]++;
           
if(k<=val_num)
              
call(k); 
          }
       
else return ;
    }
    
    
    
    
    
    
int main(int argc, char *argv[])
{
   
   
int i;
   
    char 
exp[20]="A&~B|~A&B";
  
//  scanf("%s",exp);
    
int len=strlen(exp);
    
exp[len++]='#';
    exp[len]='\0';
   // printf("%s",exp);
    BiTree 
*p=CrtExptree(exp);
    
//int sum[6]={0}; 
  
     InOderTraverse(p ,visit1);
     cout
<<endl;
     
for(i=0;i<10;i++)
        
if(j[i]){val_num++;j[i]=0;}
    printf(
"val_num=%d\n",val_num);
     
//getch();
     
int  counts=1;
     
for(i=1;i<=val_num;i++)
            counts
*=2;
   
//  printf("counts=%d\n",counts);  getch();
     
int *sum=(int *)malloc(counts*sizeof(int));
     
for(i=0;i<counts;i++)
      sum[i]
=0;
     
for(i=0;i<counts;i++)
     { 
//printf("case 1   ====i=%d\n",i);
       
call(0);
       
//if(j[0]==2)
         
//{j[0]=0;
          
//j[1]++;if(j[1]==2)
            
//        {j[1]=0;
              
//       j[2]++;
                
//    }
         
//}
      
int jl;
      
//printf("case 2   ====i=%d\n",i);
      
for(jl=val_num-1;jl>=0;jl--)
                      
      cout
<<j[jl];
      cout
<<endl;
      
//  getch();
    
//  printf("case 3  ====i=%d\n",i);
      PostOderTraverse(p ,visit2);
      
// printf("case 4   ====i=%d\n",i);
      sum[i]
=p->getValue();
      
//printf("case 5 ====i=%d\n",i);
      printf(
"sum%d=%d\n",i+1,sum[i]); 
      
      j[
0]++;
    }
    
int isTrue=0;
    
int isFalse=0;
    
//int isSatis;
    
for(i=0;i<counts;i++)
       {
          
if(sum[i]==1)isTrue++;
          
if(sum[i]==0)isFalse++;
       }
    free(sum);
    
if(isTrue==counts)printf("True forever!\n");
    
else if(isFalse==counts)printf("False forever!\n");
    
else {printf("Satisfactible!\n");
          
for(i=0;i<val_num;i++)
               { scanf(
"%d",&j[i]);printf("j[%d]==%d\n",i,j[i]);
                 fflush(stdin);
               }
          PostOderTraverse(p ,visit2);    
          printf(
"sum=%d\n",p->getValue());      
          };
           
   
//printf("%c\n",p->getInform());
    
// printf("%c\n",(p->getLeft())->getInform());
    
//printf("after creater!\n");
  
    system(
"PAUSE");
    return EXIT_SUCCESS;
}

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区免费在线视频| 亚洲精品视频在线| 久久免费视频网站| 亚洲精品免费一二三区| 欧美在线欧美在线| 亚洲第一福利在线观看| 欧美色网在线| 久久久久久久综合日本| 亚洲电影天堂av| 亚洲视频在线观看一区| 性欧美大战久久久久久久久| 亚洲欧美国产高清| 欧美一区二区三区视频| 亚洲少妇一区| 亚洲一区二区成人| 99pao成人国产永久免费视频| 1024精品一区二区三区| 国产视频精品xxxx| 欧美精品手机在线| 欧美在线免费观看| 久久久亚洲成人| 国产精品国产a| 亚洲第一中文字幕| 欧美一区二区福利在线| 久久在精品线影院精品国产| 老司机久久99久久精品播放免费| 久久久精品一区二区三区| 欧美在线视频a| 久久永久免费| 欧美午夜精品久久久久久久| 欧美三级电影精品| 国产精品综合不卡av| 亚洲午夜国产成人av电影男同| 麻豆国产精品777777在线| 日韩一级免费| 久久免费视频这里只有精品| 欧美三级网页| 亚洲高清网站| 久久免费精品日本久久中文字幕| 亚洲电影免费在线观看| 一区二区三区.www| 久久中文在线| 亚洲美女在线看| 亚洲精品黄色| 免费在线播放第一区高清av| 一区二区自拍| 亚洲国产高清高潮精品美女| 西西人体一区二区| 国产精品剧情在线亚洲| 一区二区三区日韩精品| 久久色中文字幕| 日韩午夜在线视频| 国产精品午夜春色av| 麻豆精品网站| 欧美**字幕| 亚洲已满18点击进入久久| 亚洲视频一区二区| 欧美午夜剧场| 久久精品夜色噜噜亚洲aⅴ| 国产日韩欧美精品一区| 欧美在线观看视频一区二区三区 | 中文在线资源观看视频网站免费不卡| 亚洲国产午夜| 欧美午夜理伦三级在线观看| 欧美一区午夜精品| 久久综合电影| 亚洲视频在线免费观看| 99国产精品久久| 国内精品久久久久伊人av| 亚洲国产专区校园欧美| 欧美日韩大片| 欧美 日韩 国产一区二区在线视频 | 久久这里只有| 欧美精品亚洲| 欧美激情成人在线视频| 欧美日韩中文精品| 久久久青草青青国产亚洲免观| 欧美在线在线| 亚洲欧美日韩综合一区| 欧美成人久久| 久久综合色婷婷| 国产日韩av高清| 亚洲麻豆视频| 在线精品视频一区二区| 亚洲天堂av综合网| 一区二区欧美视频| 毛片一区二区三区| 精品电影一区| 精品电影在线观看| 亚洲欧美清纯在线制服| 亚洲精品美女久久久久| 欧美在线免费一级片| 一区二区三欧美| 性欧美video另类hd性玩具| 国产精品久久久久久久久久久久久| 老色鬼精品视频在线观看播放| 国产婷婷成人久久av免费高清 | 久久国产一区二区| 亚洲制服丝袜在线| 国产精品美女在线| 欧美精品免费看| 亚洲在线观看视频网站| 亚洲欧美精品一区| 国产美女诱惑一区二区| 欧美一区二区三区四区夜夜大片| 欧美在线综合| 亚洲免费视频成人| 亚洲高清二区| 欧美无砖砖区免费| 嫩草影视亚洲| 亚洲免费在线观看视频| 麻豆av一区二区三区| 亚洲人精品午夜| 亚洲高清在线精品| 国产欧美一区二区精品婷婷| 久久精品日产第一区二区| 亚洲人体大胆视频| av成人黄色| 国产精品99久久久久久宅男| 亚洲天堂av在线免费观看| 亚洲激情在线观看| 欧美偷拍一区二区| 久久久久久久久岛国免费| 国产精品99久久久久久久久久久久 | 久久米奇亚洲| 久久成年人视频| 欧美精品在线看| 麻豆乱码国产一区二区三区| 国产精品亚洲一区| 一本色道久久综合一区| 亚洲美女黄网| 裸体一区二区三区| 久久久亚洲国产天美传媒修理工| 欧美午夜片在线观看| 亚洲黄色精品| 91久久久久久| 欧美二区在线播放| 亚洲观看高清完整版在线观看| 尤物精品在线| 久久亚洲精品一区二区| 欧美h视频在线| 在线免费日韩片| 欧美一区二区三区视频免费| 欧美伊人精品成人久久综合97| 国产精品久久久一区麻豆最新章节| 亚洲精品久久久久| 日韩一区二区电影网| 欧美理论片在线观看| 亚洲精品综合| 亚洲小视频在线观看| 国产精品99免费看| 亚洲欧美视频一区| 欧美一区二区精品久久911| 国产精品―色哟哟| 欧美一区二区三区婷婷月色 | 亚洲黄色天堂| 99国产精品私拍| 国产精品盗摄一区二区三区| 亚洲深夜福利| 久久精品国产亚洲一区二区三区| 国内外成人免费激情在线视频网站| 久久精品二区| 91久久久国产精品| 欧美视频在线视频| 亚洲欧美日韩久久精品| 久久久青草婷婷精品综合日韩| 亚洲国产精品久久久久秋霞不卡 | 农村妇女精品| 在线亚洲一区| 好吊视频一区二区三区四区| 欧美wwwwww| 亚洲免费一级电影| 欧美高清视频一区二区三区在线观看| 日韩亚洲欧美综合| 国产欧美日韩亚洲精品| 欧美1级日本1级| 亚洲欧美激情四射在线日 | 一区二区电影免费观看| 国产精品久久波多野结衣| 欧美一区二区视频免费观看| 免费h精品视频在线播放| 亚洲午夜精品| 亚洲大片在线观看| 国产精品丝袜久久久久久app| 鲁大师成人一区二区三区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美人与禽性xxxxx杂性| 欧美在线三级| 一区二区三区四区蜜桃| 欧美成人精品三级在线观看| 亚洲免费人成在线视频观看| 最新日韩精品| 国产专区综合网| 欧美午夜女人视频在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 午夜亚洲精品| 最新国产成人av网站网址麻豆| 国产一区二区三区视频在线观看| 欧美三区免费完整视频在线观看| 久久激情视频久久|