亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 重言式.txt

?? 數據結構綜合實驗的課題,重言式,用C語言實現的,也是比較多人選的
?? TXT
字號:
#include<stdlib.h>
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<math.h>

#define stack_size_normal 100
#define bianliang_max 20
#define str_max 60

int zuhe[bianliang_max];//變量的取值組合數組定義;
int N;//變量個數;

//根據表達式建立的二叉樹的結點定義;
typedef struct btdnode{
 char data;
 struct btdnode *lchild; 
 struct btdnode  *rchild;
}*bitree;

//識別表達式使用的堆棧定義,它存放的都是樹的結構;
typedef struct lnode_optr{      
 struct btdnode **base;    //棧中的元素都是樹的結點結構;
 struct btdnode **top;
 int stacksize;
}sqstack;


//用于產生變量的各種取值組合;

void creatzuhe(int n)
{
 int i,num=0,j=0,e;
 int temp[bianliang_max];
    for(i=0;i<N;i++)
  zuhe[i]=0;
 while(n)
 {
  e=n%2;
  num++;
  temp[j++]=e;
  n=n/2;

 }
 j=j-1;
    num=N-num;
 while(j>=0)
 {
     e=temp[j--];
  zuhe[num++]=e;
 }
}

//自底向上地根據運算符地優先級來建立分子樹函數;當邏輯表達式讀完后-子根zigen就是一棵完整的二叉樹
int k=0;//建樹的標志,k=1表示第一次建立分子樹,要對左右孩子的指針域處理
void create(bitree &zigen,bitree l,bitree r)
{
    zigen->lchild=l;
 zigen->rchild=r;//分樹的鏈接
 if(l&&r)
 {
     if(int(l->data)>=65&&int(l->data)<=90)
  {
  l->lchild=NULL;
  l->rchild=NULL;
  }
   if(int(r->data)>=65&&int(r->data)<=90)
   {
     r->lchild=NULL;
     r->rchild=NULL;
   }

 }
}
 
//邏輯運算符的優先級判別;
char youxianji(char lie,char hang)
{
 int    i,j;
 char bijiao[7][7]={' ','|','&','~','(',')','#',
                 '|','>','<','<','<','>','>',
                       '&','>','>','<','<','>','>',                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                       '~','>','>','>','<','>','>',
        '(','<','<','<','<','=',' ',
        ')','>','>','>',' ','>','>',
        '#','<','<','<','<',' ','='};
for(i=0;i<7;i++)
   if(bijiao[0][i]==lie)
    break;
for(j=0;j<7;j++)
   if(bijiao[j][0]==hang)
    break;
   return bijiao[j][i];
}
//對操作符棧和變量堆棧的操作;
void creatstack(sqstack &st)
{
 
    st.base=(bitree*)malloc(stack_size_normal*sizeof(btdnode));
 if(!st.base) exit(0);
 st.top=st.base;
 st.stacksize=stack_size_normal;
}
void push(sqstack &st,bitree e)
{
 if(st.top-st.base<st.stacksize)

 *st.top++=e;
 else exit(0);
}
void pop(sqstack &st,bitree &e)
{
 if(st.top==st.base) exit(0);
 e=*--st.top;
}
void gettop(sqstack &st,bitree &e)
{
 if(st.top==st.base) exit(0);
 e=*(st.top-1);
}

//重言式的識別函數;
void creattree(char s[],bitree &tree)
{
 
 sqstack  variable;       //變量棧;
    sqstack  logic;         //邏輯運算符棧; 
    creatstack(variable);
 creatstack(logic);
 bitree logic_di,variables,logics,e,a,b,theta,kuohao;   //定義棧中的元素;
                  //theta為最后的二叉樹的根;
 logic_di=(bitree)malloc(sizeof(btdnode));
 if(!logic_di)  exit(0);
 logic_di->data='#';
 push(logic,logic_di);
   while(*s!=NULL)
 {     
  if(int(*s)>=65&&int(*s)<=90)
  {  
      variables=(bitree)malloc(sizeof(btdnode));
   if(!variables)  exit(0);
   variables->data=*s;
   push(variable,variables);
    }
    else if(int(*s)>90||int(*s)<65)
    {  
      gettop(logic,e);//取運算符棧的棧頂元素進行優先級比較
     switch(youxianji(*s,e->data))
   {
   case '<': //棧頂的運算符優先級低,邏輯運算符進棧
          logics=(bitree)malloc(sizeof(btdnode));
             if(!logics)  exit(0);
             logics->data=*s;
             push(logic,logics);
          break;

            case '='://脫括號并接受下一個字符;
         pop(logic,kuohao);break;
      
   case '>':pop(logic,theta);//彈出邏輯運算符
         pop(variable,a);//彈出變量
      b=NULL;
      if(theta->data!='~')
          pop(variable,b);
      //建樹的函數調用
      k=k+1;
      create(theta,b,a);
      
                     push(variable,theta);//將臨時的根作為新的變量壓入變量棧中;
         if(*s!='#'&&*s!=')') 
      {
      logics=(bitree)malloc(sizeof(btdnode));
               if(!logics)  exit(0);
               logics->data=*s;
               push(logic,logics);
      }
      else  s=s-1;
      break;
   }
    }
   s++;
 }
 tree=theta;
}
//根據變量的取值組合并利用邏輯表達式的性質對樹進行求值 
int value_tree(bitree tree)
{
    if(!tree) return 0;                                       //遇到空的結點;
 else if(tree->data!='|'&&tree->data!='&'&&tree->data!='~')//找到的是變量;
     return  zuhe[int(tree->data)-65];
    else if(int(tree->data)<65||int(tree->data)>90)           //找到的是運算符;
      switch(tree->data)
   {
   case '|': return(value_tree(tree->lchild)||value_tree(tree->rchild));
   case '&': return(value_tree(tree->lchild)&&value_tree(tree->rchild));
   case '~': return(!value_tree(tree->rchild));
   }

}
//用戶設定變量的一種取值;
void user()
{
 int i;
 
 cout<<"請依次輸入你的變元取值"<<endl;
 for(i=65;i<65+N;i++)
 {
 cout<<char(i)<<" = ";
 cin>>zuhe[i-65];
 }
}
void main()
{
  char str[str_max],string[str_max],*pstr;
  int loop=20,choice,i=0,choose,sum;
  bitree Tree;
  
  while(loop)
  {
  pstr=str;
  i=0;
  int  SUM=0,l;  //用于累加變量的每種組合的邏輯表達式的結果;可以作為邏輯表達式類別判別的根據
  cout<<"請輸入邏輯表達式的變量的個數"<<endl;
  cin>>N;
  sum=int(pow(2,N)); //變量組合的總數;
  cout<<"請輸入邏輯表達式的表達式(或用'|',與用'&'和非用'~')"<<endl;
  cin>>str;
  //重言式的正確讀取;
  for(;*pstr!=NULL;pstr++)
     if(*pstr!=' ') string[i++]=*pstr;
  string[i]='#';
  string[i+1]='\0';
  cout<<"************            請選擇你要的操作              **********"<<endl;
  cout<<"************ 1 邏輯表達式的判別(不顯示各種取值組合的結果) **********"<<endl;
  cout<<"************ 2 邏輯表達式的判別(并顯示各種取值組合的結果) **********"<<endl;
  cout<<"************ 3 邏輯表達式的求值(根據用戶的取值)           **********"<<endl;
  cout<<"請選擇你要的操作: ";
  cin>>choose;
  switch(choose)
  {
  case 1://對變量的不同組合依次調用重言式二叉樹的求值函數;并判別重言式的類別;
      creattree(string,Tree);//建立重言式的二叉樹;
  
   for(loop=0;loop<sum;loop++)
   {
       
            creatzuhe(loop);//產生變量取值組合;
      SUM+=value_tree(Tree);
  }
  string[i]='\0';
  if(SUM==0) cout<<"邏輯表達式: "<<string<<" 是矛盾式"<<endl;
     if(SUM==sum) cout<<"邏輯表達式: "<<string<<" 是重言式"<<endl;
     if (SUM>0&&SUM<sum)cout<<"邏輯表達式: "<<string<<" 既不是重言式,也不是矛盾式"<<endl;
  break;
 case 2:creattree(string,Tree);//建立重言式的二叉樹;
        cout<<"         邏輯表達式變量組合的預算結果        "<<endl;
  cout<<"---------------------------------------------"<<endl;
  printf("|       ");
  for(l=65;l<65+N;l++)
       printf("%-4c",l);
  printf("邏輯表達式的值");
  printf("              |\n");
  cout<<"---------------------------------------------"<<endl;
   for(loop=0;loop<sum;loop++)
   {
      creatzuhe(loop);//產生變量取值組合;
   SUM+=value_tree(Tree);
   
        printf("|       ");
   for(int h=0;h<N;h++)
    printf("%-4d",zuhe[h]);
   printf("%8d",value_tree(Tree));
            printf("                    |\n");
   cout<<"-------------------------------------------"<<endl;
  }
  string[i]='\0';
  if(SUM==0) cout<<"邏輯表達式: "<<string<<" 是矛盾式"<<endl;
  else if(SUM==sum) cout<<"邏輯表達式: "<<string<<" 是重言式"<<endl;
  else cout<<"邏輯表達式: "<<string<<" 既不是重言式,也不是矛盾式"<<endl;
  break;
 case 3: creattree(string,Tree);
      user();
   cout<<"邏輯表達式的值為:"<<value_tree(Tree)<<endl;
   break;
  } 
  cout<<"是否繼續進行運算?是按1/ 否按0:";
  cin>>choice;
  if(choice==0)
    exit(0);
  loop--;

 
  }
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜久久久久久电影| 国产精品污网站| av电影在线观看一区| 韩国成人精品a∨在线观看| 免费欧美高清视频| 日韩成人免费电影| 日韩和欧美的一区| 日韩成人一区二区三区在线观看| 午夜久久久久久| 麻豆精品国产91久久久久久| 日韩成人精品在线| 九一久久久久久| 国产精品99精品久久免费| 国产精品1区2区3区在线观看| 国产一区中文字幕| 国产成人亚洲精品青草天美| 成人av在线观| 日本久久一区二区三区| 欧美精品少妇一区二区三区| 欧美一区二区三区在线观看| 日韩精品自拍偷拍| 久久久另类综合| 亚洲欧美在线另类| 亚洲国产色一区| 精品中文字幕一区二区小辣椒| 久久99精品久久久久久| 波多野结衣中文一区| 懂色中文一区二区在线播放| 99这里都是精品| 久久久久久久久久久久电影| 国产欧美一区二区精品性| 国产精品久久久久久久久晋中| 亚洲国产综合人成综合网站| 激情五月婷婷综合网| av在线一区二区三区| 8x8x8国产精品| 欧美激情中文字幕| 亚洲午夜av在线| 国产一区啦啦啦在线观看| 色悠久久久久综合欧美99| 日韩欧美亚洲另类制服综合在线 | 国产欧美日韩亚州综合 | 97久久精品人人做人人爽50路| 色先锋资源久久综合| 5月丁香婷婷综合| 国产精品美女久久久久aⅴ国产馆| 亚洲午夜在线电影| 国产69精品久久99不卡| 8x8x8国产精品| 亚洲精品综合在线| 久久国产欧美日韩精品| 欧美三级韩国三级日本三斤| 中文字幕欧美区| 日韩av在线发布| 一本到一区二区三区| 久久看人人爽人人| 亚洲电影激情视频网站| 99久久er热在这里只有精品66| 制服视频三区第一页精品| 亚洲天堂福利av| 精品一区二区三区在线观看国产| 欧美视频一区在线观看| 亚洲三级在线免费观看| 国产成人精品免费视频网站| 精品少妇一区二区三区| 亚洲成av人在线观看| 日本二三区不卡| 亚洲丝袜美腿综合| 丁香婷婷综合色啪| 久久色.com| 婷婷中文字幕一区三区| 欧美日韩一区二区三区四区五区| 亚洲色图色小说| 99免费精品视频| 国产精品免费丝袜| 丁香婷婷综合五月| 国产精品久久久久久福利一牛影视 | 免费精品视频最新在线| 欧美老女人在线| 亚洲一区二区三区四区在线观看 | 日本美女一区二区| 欧美群妇大交群中文字幕| 亚洲一区二区精品视频| 在线免费亚洲电影| 视频一区二区国产| 欧美一级午夜免费电影| 极品美女销魂一区二区三区| 精品国产乱码久久久久久蜜臀 | 国模一区二区三区白浆| 欧美sm极限捆绑bd| 久久精品72免费观看| 精品久久一区二区| 成人深夜在线观看| 一区二区三区在线观看网站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 综合婷婷亚洲小说| 欧美日韩一级二级| 九九热在线视频观看这里只有精品| 精品免费国产二区三区| 国产高清精品网站| 亚洲精品成人天堂一二三| 欧美日韩精品综合在线| 九色|91porny| 中文字幕欧美一区| 欧美高清视频www夜色资源网| 美国精品在线观看| 成人欧美一区二区三区白人| 欧美日韩三级在线| 国产成人精品三级麻豆| 亚洲一区在线看| 久久久精品综合| 日本韩国一区二区三区| 精品一区二区三区免费播放| 亚洲欧美一区二区在线观看| 欧美一区二区三区系列电影| 懂色av一区二区三区免费观看 | 日韩欧美中文一区| 成人黄色综合网站| 日韩不卡免费视频| 《视频一区视频二区| 在线电影国产精品| 99精品热视频| 激情五月播播久久久精品| 中文字幕中文乱码欧美一区二区| 欧美日韩中文精品| 波多野结衣中文字幕一区 | 欧美成人r级一区二区三区| 成人性生交大片| 老司机精品视频线观看86| 一区二区中文字幕在线| 久久综合久久鬼色中文字| 欧美视频一区二区三区在线观看| 国产精品一区二区91| 日韩综合小视频| 一区二区三区在线视频播放| 国产精品伦一区| 精品国精品国产尤物美女| 欧美在线小视频| 成人激情午夜影院| 国产专区欧美精品| 免费xxxx性欧美18vr| 亚洲bt欧美bt精品| 一区二区三区欧美| 亚洲素人一区二区| 国产精品日韩精品欧美在线| 久久综合久久综合久久| 日韩免费视频一区| 日韩一区二区在线观看视频| 欧美日本一区二区在线观看| 在线精品视频小说1| 99精品欧美一区二区三区小说| 盗摄精品av一区二区三区| 国产成人欧美日韩在线电影| 激情综合色综合久久| 另类专区欧美蜜桃臀第一页| 麻豆国产欧美一区二区三区| 日本成人在线看| 蜜桃一区二区三区在线观看| 日本不卡不码高清免费观看| 日韩电影网1区2区| 久久不见久久见免费视频7| 蜜桃视频在线一区| 久久aⅴ国产欧美74aaa| 狠狠色狠狠色综合系列| 国产一区福利在线| 成人性生交大合| 色就色 综合激情| 欧美日韩精品一二三区| 欧美一区二区免费视频| 精品久久久网站| 国产欧美精品一区二区色综合| 欧美国产日韩一二三区| 亚洲精品乱码久久久久久黑人| 亚洲一二三区在线观看| 久久er精品视频| 国产99久久久精品| 一本大道久久a久久综合| 欧美亚洲动漫制服丝袜| 日韩一卡二卡三卡| 国产视频不卡一区| 亚洲综合偷拍欧美一区色| 日本不卡视频在线观看| 国产一二三精品| 91免费看片在线观看| 欧美日本国产视频| 国产亚洲人成网站| 亚洲午夜精品久久久久久久久| 久久精品免费观看| 99国产精品国产精品毛片| 欧美一区二区视频在线观看2020 | 91精品国产全国免费观看| 精品国产第一区二区三区观看体验| 国产亚洲va综合人人澡精品| 亚洲欧美另类综合偷拍| 麻豆91在线观看| 一本久道中文字幕精品亚洲嫩| 欧美一二三四区在线| 亚洲欧美偷拍三级| 韩国一区二区三区| 欧美日韩中字一区|