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

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

?? shixian.cpp

?? 嚴版數據結構。二叉樹。功能齊全。經過調試。沒有b+b_ 樹。(c語言)。
?? CPP
字號:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include "btree.h"

void InitBiTree(BiTree &T)//初始化二叉樹,即把樹根指針置空
{T=NULL;
}

void CreateBiTree(BiTree &T,char *a)
//根據a所指向的二叉樹廣義表字符串建立對應的存儲結構
{ BiTree p;
  BiTree s[MAXSIZE1];//定義s數組作為存儲根結點指針的棧使用
  int top=-1;//top作為s棧的棧頂指針,初值為-1,表示空棧
  int k;//用k作為處理結點的左子樹和右子樹的標記,k=1處理左子樹,k=2處理右子樹
  int i=0;
  T=NULL;
  while(a[i])
  {switch(a[i]){
     case ' ':break;//對空格不做任何處理
	 case '(':if(top==MAXSIZE1-1) 
			  {printf("棧空間太小!\n");
		       exit(1);
			  }
		      top++;
			  s[top]=p;k=1;
			  break;
	  case ')':if(top==-1)
			   {printf("二叉樹廣義表字符串錯!|n");
		        exit(1);
			   }
		       top--;
			   break;
	  case ',':k=2;break;
	  default:p=(BitNode *)malloc(sizeof(BitNode));
		      p->data=a[i];
			  p->lchild=p->rchild=NULL;
			  if(T==NULL) T=p;
			  else
			  {if(k==1) s[top]->lchild=p;
			   else s[top]->rchild=p;
			  }
  }
  i++;
  }
}

int BiTreeEmpty(BiTree &T)//檢查二叉樹是否為空
{ if(!T) return OK;
  else return ERROR;
}

int PreOrder(BiTree T)//先序輸出二叉樹
{ if(T!=NULL)
  {
   printf("%c",T->data);
   PreOrder(T->lchild);
   PreOrder(T->rchild);
  }
  return OK;
}

int InOrder(BiTree T)//中序輸出二叉樹
{ if(T!=NULL)
  {
   InOrder(T->lchild);
   printf("%c",T->data);
   InOrder(T->rchild);
  }
  return OK;
}

int PostOrder(BiTree T)//后序輸出二叉樹
{ if(T!=NULL)
  {  PostOrder(T->lchild);
   PostOrder(T->rchild);
   printf("%c",T->data);
  }
  return OK;
}

void TrarverseBiTree(BiTree T)//選擇一種遍歷次序輸出二叉樹中的所有結點
{ int done,i;
if(!T) printf("二叉樹為空!!\n");
else{
  printf("    ***********************\n");
  printf("     1.按先序\n");
  printf("     2.按中序\n");
  printf("     3.按后序\n");
  printf("     0.退出\n");
  printf("     **********************\n");
  while(done)
  {printf("      請輸入序號(0-3):");
   scanf("%d",&i);
   switch(i)
   { case 1:printf("      先序為:");PreOrder(T);break;
     case 2:printf("      中序為:");InOrder(T);break;
     case 3:printf("      后序為:");PostOrder(T);break;
     case 0:done=0;break;
    default: printf("     ERROR\n");
   }
   printf("\n");
  }
}
}
    
int BiTreeDepth(BiTree T)//求二叉樹的深度
{int depth;
int depthleft,depthright;
 if(!T) depth=0;
 else
 { depthleft=BiTreeDepth(T->lchild);
   depthright=BiTreeDepth(T->rchild);
   depth=1+(depthleft>depthright?depthleft:depthright);
 }
 return depth;
}

int BiTreeCount(BiTree T)//求二叉樹中所有結點數
{ int total=0;
  if(!T) total=0;
  else
  { total++;
    BiTreeCount(T->lchild);
    BiTreeCount(T->rchild);
  }
  return total;
}

void PrintBiTree(BiTree T)//輸出二叉樹的廣義表表示
{if(T!=NULL)
{printf("%c",T->data);//輸出根結點的值
 if(T->lchild!=NULL||T->rchild!=NULL)
 {printf("(");
  PrintBiTree(T->lchild);
  if(T->rchild!=NULL) printf(",");//若右子樹不為空則輸出逗號分隔符
  PrintBiTree(T->rchild);
  printf(")");
 }
}
}



void MenuSelect(BiTree T)//二叉樹菜單選擇
{   int done1,m;
    char a[50];
	printf("**********二叉樹***********\n");
    printf(" 1.按先序次序建立二叉樹\n");
    printf(" 2.檢查二叉樹是否為空\n");
    printf(" 3.遍歷輸出二叉樹\n");
	printf(" 4.輸出二叉樹的廣義表表示\n");
    printf(" 5.求二叉樹的深度\n");
    printf(" 6.求二叉樹中所有結點數\n");
	printf(" 0.退出\n");
	printf("****************************\n");
    while (done1)
	{printf("請輸入要進行的操作:");
     scanf("%d",&m);
     switch(m)
	 {
	  case 1:printf("輸入二叉樹廣義表字符串:\n");
		     scanf("%s",a);
		     CreateBiTree(T,a);
			 break;
	  case 2:if(BiTreeEmpty(T)) printf("二叉樹為空!\n");
		     else printf("二叉樹不為空!\n");
			 break;
	  case 3:TrarverseBiTree(T);
		     break;
	  case 4:PrintBiTree(T);break;
	  case 5:printf("深度為:%d\n",BiTreeDepth(T));
		     break;
	  case 6:printf("所有結點數:%d\n",BiTreeCount(T));
		     break;
      case 0:done1=0;break;
      default: printf("ERROR\n");
   }
   printf("\n");
  }
}

int Search(char ino[],char c)//在中序序列中查詢
{int i=0,j=0;
 while(ino[i]!='\0')
	{ i++;}
 while(ino[j]!='\0')
 {if(c==ino[j]) break;
	 else j++;
 }
 if(i==j) return -1;
 else return j;
}

BiTree CrtBt(char pre[],char ino[],int ps,int is,int n)
//由兩個序列構造二叉鏈表
{int k;BiTree T,lroot,rroot;
 if(n==0) T=NULL;
 else
 {k=Search(ino,pre[ps]);
  if(k==-1) T=NULL;
  else
  {T=(BitNode *)malloc(sizeof(BitNode));
   T->data=pre[ps];
  }
  if(k==is) T->lchild=NULL;
  else
  {lroot=CrtBt(pre,ino,ps+1,is,k-is);
         T->lchild =lroot;
  }
  if(k==is+n-1) T->rchild=NULL;
  else 
  {rroot=CrtBt(pre,ino,ps+1+(k-is),k+1,n-(k-is)-1);
    T->rchild=rroot;
  }
 }
  return T;
}

void menuCrtBt()
{BiTree T;
 char pre[20],ino[20];
 int ps=0,is=0;int n;
 printf("請輸入先序序列:");
 scanf("%s",pre);
 printf("請輸入中序序列:");
 scanf("%s",ino);
 printf("字符串長度為:");
 n=strlen(pre);
 printf("%d\n",n);
T=CrtBt(pre,ino,ps,is,n);
	 
 printf("建樹成功!!!\n");
 printf("   其后序序列為:");
 PostOrder(T);
 printf("\n");
 printf("   二叉樹的廣義表表示:");
 PrintBiTree(T);
}

BiTree Createhuffman(int a[],int n)//建立哈夫曼樹
{int i,j,t;
 BiTree q,*b;
 b=(BiTree *)malloc(n*sizeof(BiTree));//動態分配由b指向的指針數組
 for(i=0;i<n;i++)
 {b[i]=(BitNode *)malloc(sizeof(BitNode));
  b[i]->data=a[i];
  b[i]->lchild=b[i]->rchild=NULL;
 }
 for(i=1;i<n;i++)//進行n-1次循環建立哈夫曼樹
 {int k1=-1,k2;//k1初始指向森林中第一棵樹,k2指向森林中第二棵樹
  for(j=0;j<n;j++)
  {if(b[j]!=NULL&&k1==-1) {k1=j;continue;}
   if(b[j]!=NULL) {k2=j;break;}
  }
   for(j=k2;j<n;j++)
   { if(b[j]!=NULL)
	 {if(b[j]->data<b[k1]->data) {k2=k1;k1=j;}
	  else if(b[j]->data<b[k2]->data) k2=j;
	 }
   } 
   if(k1>k2&&b[k1]->lchild==NULL&&b[k2]->lchild==NULL){t=k1;k1=k2;k2=t;}
   if(k1<k2&&b[k1]->lchild!=NULL&&b[k2]->lchild==NULL){t=k1;k1=k2;k2=t;}
   q=(BitNode *)malloc(sizeof(BitNode));//建立一棵新樹,q指向樹根結點
   q->data=b[k1]->data+b[k2]->data;
   q->lchild=b[k1];
   q->rchild=b[k2];
   b[k2]=q;b[k1]=NULL;
  }
  free(b);
  return q;
}

void Huffmancoding(BiTree T,int len)//對各字符進行哈夫曼編碼
{ static int c[10];
  if(T!=NULL){
   if(T->lchild==NULL&&T->rchild==NULL)
   { int i;
     printf("      結點權值為%d的編碼:",T->data);
	 for(i=0;i<len;i++)
		 printf(" %d ",c[i]);
	  printf("\n");
   }
   else
   {c[len]=0;Huffmancoding(T->lchild,len+1);
    c[len]=1;Huffmancoding(T->rchild,len+1);
   }
  }
}
  
int PreOrderha(BiTree T)//先序輸出哈夫曼樹
{ if(T!=NULL)
  {
   printf(" %d",T->data);
   PreOrderha(T->lchild);
   PreOrderha(T->rchild);
  }
  return OK;
}

int InOrderha(BiTree T)//中序輸出哈夫曼樹
{ if(T!=NULL)
  {
   InOrderha(T->lchild);
   printf(" %d",T->data);
   InOrderha(T->rchild);
  }
  return OK;
}

int PostOrderha(BiTree T)//后序輸出哈夫曼樹
{ if(T!=NULL)
  {  PostOrderha(T->lchild);
   PostOrderha(T->rchild);
   printf(" %d",T->data);
  }
  return OK;
}

void PrintBiTreeha(BiTree T)//輸出哈夫曼樹的廣義表表示
{if(T!=NULL)
{printf("%d",T->data);//輸出根結點的值
 if(T->lchild!=NULL||T->rchild!=NULL)
 {printf("(");
  PrintBiTreeha(T->lchild);
  if(T->rchild!=NULL) printf(",");//若右子樹不為空則輸出逗號分隔符
  PrintBiTreeha(T->rchild);
  printf(")");
 }
}
}


void huffmenu()
{int done2,h;
 int n,i,s;int *a;
 char c;
 int p[13]={186,64,13,22,32,103,21,15,47,57,1,5,32};
 int q[13]={57,63,15,1,48,51,80,23,8,18,1,16,1};
 BiTree T;
 printf("*****************************\n");
 printf("1.建立哈夫曼樹\n");
 printf("2.對各字符進行哈夫曼編碼\n");
 printf("3.對給定的字符串譯碼\n");
 printf("4.對哈夫曼樹進行先序遍歷\n");
 printf("5.對哈夫曼樹進行中序遍歷\n");
 printf("6.對哈夫曼樹進行后序遍歷\n");
 printf("7.打印哈夫曼樹\n");
 printf("0.退出\n");
 printf("******************************\n");
 
 while (done2)
 {printf("請輸入對哈夫曼樹進行的操作序號:");
     scanf("%d",&h);
     switch(h)
	 {case 1:printf("---------------------------------------------\n");
                 printf("字符:");
                 for(c='a';c!='n';c++)
	               printf("%3c ",c);
                 printf("\n頻度:");
                 for(s=0;s<13;s++)
	               printf("%4d",p[s]);
                 printf("\n字符:");
                 for(c='n';c!='{';c++)
	               printf("%3c ",c);
                 printf("\n頻度:");
                 for(s=0;s<13;s++)
	               printf("%4d",q[s]);
                 printf("\n");
	         printf("  輸入帶權葉子結點數:");
             while(1)
			 {scanf("%d",&n);
              if(n>1) break;
              else printf("重輸n值:");
			 }
             a=(int *)malloc(n*sizeof(int));
             printf("  輸入%d個整數作為權值:",n);
             for(i=0;i<n;i++)
	         scanf("%d",&a[i]);
             T=Createhuffman(a,n);
             printf("      哈夫曼樹已成功建立!!\n");break;
	  case 2: printf("  樹中每個葉子的哈夫曼編碼:\n");
		      Huffmancoding(T,0);break;
	  case 4:printf("      先序為:");PreOrderha(T);break;
      case 5:printf("      中序為:");InOrderha(T);break;
      case 6:printf("      后序為:");PostOrderha(T);break;
	  case 7:printf("  廣義表形式的哈夫曼樹:");
		               PrintBiTreeha(T);break;
      case 0:done2=0;break;
      default: printf("ERROR\n");
	 }
      printf("\n");
 }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久嫩草精品久久久久| 91麻豆精品国产91久久久资源速度| 国产欧美一区二区三区沐欲| 日韩综合一区二区| 欧美一二三四在线| 激情成人午夜视频| 国产欧美日韩亚州综合| 亚洲成av人片在线观看| 欧美日本在线播放| 天天操天天色综合| 欧美一级片免费看| 韩国中文字幕2020精品| 日本一区二区三级电影在线观看| 国产大陆a不卡| 国产精品人成在线观看免费| 色狠狠桃花综合| 秋霞午夜鲁丝一区二区老狼| 精品美女一区二区| 99久久精品免费看国产免费软件| 一区二区三区国产| 欧美一区在线视频| av在线一区二区| 成人av在线影院| 日日摸夜夜添夜夜添精品视频| 久久伊99综合婷婷久久伊| 91国产丝袜在线播放| 国产精品资源网站| 亚洲午夜精品在线| 日本一区二区三区四区在线视频| 欧美日韩一级二级| 91女人视频在线观看| 久久国产婷婷国产香蕉| 亚洲男人都懂的| 亚洲少妇最新在线视频| 久久精品水蜜桃av综合天堂| 欧美精品在线观看播放| 日本精品免费观看高清观看| 国产一区在线观看麻豆| 麻豆一区二区三区| 麻豆91在线播放| 欧美国产丝袜视频| 欧美日韩一区在线观看| 不卡av免费在线观看| 国产成人av一区二区三区在线观看| 老司机免费视频一区二区三区| 亚洲啪啪综合av一区二区三区| 国产精品久久久久aaaa| 中国色在线观看另类| 国产精品久久久久9999吃药| 亚洲天堂福利av| 一区二区三区精品视频| 亚洲欧美一区二区三区极速播放| 欧美激情综合五月色丁香小说| 欧美一区二区三区日韩视频| 欧美一区永久视频免费观看| 欧美高清激情brazzers| 欧美va亚洲va| 中文字幕乱码日本亚洲一区二区| 亚洲日韩欧美一区二区在线| 亚洲va天堂va国产va久| 国产一区二区伦理片| 91亚洲精品久久久蜜桃| 欧美日韩大陆一区二区| 日韩一区二区精品在线观看| 久久久.com| 日韩电影免费在线| 成人黄动漫网站免费app| 欧洲精品视频在线观看| 国产日韩欧美一区二区三区乱码| 亚洲摸摸操操av| 国产综合久久久久久久久久久久 | 日韩写真欧美这视频| 欧美韩国一区二区| 日韩有码一区二区三区| 国产麻豆一精品一av一免费| 欧美三级午夜理伦三级中视频| 国产丝袜欧美中文另类| 午夜精品久久久久久久久久| 国产成人小视频| 国产精品你懂的| 本田岬高潮一区二区三区| 99久久伊人久久99| 欧美一区二区三区四区五区| 日韩免费高清电影| 国产精品入口麻豆原神| 亚洲成人一二三| 9i在线看片成人免费| 色噜噜狠狠色综合中国| 欧美日韩dvd在线观看| 中文字幕在线不卡| 国产精品亚洲午夜一区二区三区 | 一区二区三区欧美| 国产精品一二三四五| 欧美伦理电影网| 亚洲欧洲性图库| 美女www一区二区| 日韩一级黄色大片| 视频一区二区不卡| 欧美精品日日鲁夜夜添| 最新国产の精品合集bt伙计| 国产一区二区三区日韩| 日韩精品一区二区三区视频| 亚洲人精品一区| 欧美自拍丝袜亚洲| 日韩电影一区二区三区四区| 色婷婷久久99综合精品jk白丝 | 香蕉乱码成人久久天堂爱免费| 在线国产电影不卡| 一区二区理论电影在线观看| 成人av在线观| 亚洲国产精品视频| 欧洲激情一区二区| 日韩电影免费一区| 久久老女人爱爱| av在线这里只有精品| 亚洲午夜电影网| 欧美精品xxxxbbbb| 成人免费三级在线| 亚洲宅男天堂在线观看无病毒| 8x福利精品第一导航| 亚洲精品五月天| 精品少妇一区二区三区日产乱码 | 国产精品久久一卡二卡| 91视频免费看| 日本欧美一区二区| 国产精品国产三级国产aⅴ中文 | 日韩黄色免费电影| 久久亚洲影视婷婷| 欧美日本国产视频| 91视频在线看| 国产九色sp调教91| 日本欧美一区二区| 午夜欧美在线一二页| 欧美激情在线观看视频免费| 欧美日韩激情一区| 久久综合久色欧美综合狠狠| 在线观看日韩av先锋影音电影院| 久久精品理论片| 亚洲成人av福利| 国产精品久久久久久久蜜臀| 日韩午夜中文字幕| 欧美日韩亚洲高清一区二区| 在线看一区二区| 一本久久a久久精品亚洲| 国产美女在线精品| 久久成人精品无人区| 亚洲一区二区四区蜜桃| 亚洲欧美视频一区| 亚洲人精品一区| 亚洲图片欧美一区| 午夜精品免费在线| 亚洲国产精品影院| 天天综合网 天天综合色| 亚洲福利视频一区| 一区二区三区精品久久久| 亚洲在线视频免费观看| 亚洲黄色免费网站| 伊人开心综合网| 亚洲国产日韩综合久久精品| 偷拍日韩校园综合在线| 日韩精品三区四区| 日韩精品一级二级 | 亚洲欧美日韩电影| 五月天激情小说综合| 精品一区二区三区免费| www.亚洲激情.com| 欧美日韩中字一区| 欧美videos大乳护士334| 久久久久久久综合色一本| 日韩理论电影院| 免费在线观看视频一区| 国产福利精品导航| 色先锋资源久久综合| 日韩精品一区二区三区在线| 国产精品日韩成人| 午夜私人影院久久久久| 国产真实乱对白精彩久久| 国产不卡视频在线播放| 欧美日韩激情一区二区| 中文字幕一区二区三区蜜月| 日韩va欧美va亚洲va久久| 国产在线不卡一区| 日韩视频在线一区二区| 中文字幕一区三区| 激情文学综合丁香| 欧美精品视频www在线观看| 欧美α欧美αv大片| 樱桃视频在线观看一区| 成人午夜伦理影院| 国产欧美一区二区精品仙草咪| 六月婷婷色综合| 日韩精品一区二区三区在线 | 日韩欧美区一区二| 国产在线日韩欧美| 7777精品伊人久久久大香线蕉的| 亚洲精品视频在线看| 成人一道本在线| 亚洲色图另类专区| 99久久精品国产毛片| 国产欧美日韩在线看|