亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++二叉樹實現詞頻分析功能

2020-05-23 13:32:15
字體:
來源:轉載
供稿:網友

通過二叉樹存單詞,并且對總共的單詞數量進行計數,二叉樹自適應的將出現頻率高的單詞往上移動以減少二叉樹的搜索時間。
代碼如下

 

/***********************genSplay.h***********************/#ifndef _GENSPLAY_H_#define _GENSPLAY_H_#include <iostream>using namespace std;//樹節點template<class T>class SplayingNode{public:  T info;  SplayingNode *left, *right, *parent;  //節點指針  SplayingNode(){    left = right = parent = 0;  }  SplayingNode(const T &el, SplayingNode *l = 0,         SplayingNode *r = 0, SplayingNode *p = 0)         :info(el), left(l), right(r), parent(p){ }};//二叉樹template<class T>class SplayTree{protected:  SplayingNode<T> *root;  void rotateR(SplayingNode<T> *);  //向右旋轉  void rotateL(SplayingNode<T> *);  //向左旋轉  void continueRotation(SplayingNode<T> *gr, SplayingNode<T> *par,             SplayingNode<T> *ch, SplayingNode<T> *desc); //重新定義父節點指針  void semisplay(SplayingNode<T> *); //更改樹結構,將權值大的向上移動  void inorder(SplayingNode<T> *);  //中序遍歷  void virtual visit(SplayingNode<T> *){ } //虛函數public:  SplayTree(){    root = 0;  }  void inorder(){    inorder(root);  }  T *search(const T &);  void insert(const T &);};template<class T>void SplayTree<T>::continueRotation(SplayingNode<T> *gr, SplayingNode<T> *par,    SplayingNode<T> *ch, SplayingNode<T> *desc){  if(gr != 0){    if(gr->right == ch->parent)      gr->right = ch;    else      gr->left = ch;  }  else    root = ch;  if(desc != 0)    desc->parent = par;  par->parent = ch;  ch->parent = gr;}template<class T>void SplayTree<T>::rotateR(SplayingNode<T> *p){  p->parent->left = p->right;  p->right = p->parent;  continueRotation(p->parent->parent, p->right, p, p->right->left);}template<class T>void SplayTree<T>::rotateL(SplayingNode<T> *p){  p->parent->right = p->left;  p->left = p->parent;  continueRotation(p->parent->parent, p->left, p, p->left->right);}template<class T>void SplayTree<T>::semisplay(SplayingNode<T> *p){  while(p != root){    if(p->parent->parent == NULL){      if(p->parent->left == p)        rotateR(p);      else        rotateL(p);    }    else if(p->parent->left == p){      if(p->parent->parent->left == p->parent){        rotateR(p->parent);        p = p->parent;      }      else{        rotateR(p);        rotateL(p);      }    }    else{      if(p->parent->parent->right == p->parent){        rotateL(p->parent);        p = p->parent;      }      else{        rotateL(p);        rotateR(p);      }    }    if(root == NULL)      root = p;  }}template<class T>T *SplayTree<T>::search(const T &el){  SplayingNode<T> *p = root;  while(p != NULL){    if(p->info == el){      semisplay(p);      return &p->info;    }    else if(el < p->info)      p = p->left;    else      p = p->right;  }  return 0;}template<class T>void SplayTree<T>::insert(const T &el){  SplayingNode<T> *p = root, *prev = NULL, *newNode;  while(p != 0){    prev = p;    if(el < p->info)      p = p->left;    else      p = p->right;  }  if((newNode = new SplayingNode<T>(el, 0, 0, prev)) == 0){    cerr << "no room for new node./n";    exit(1);  }  if(root == 0)    root = newNode;  else if(el < prev->info)    prev->left = newNode;  else    prev->right = newNode;}template<class T>void SplayTree<T>::inorder(SplayingNode<T> *p){  if(p != 0){    inorder(p->left);    visit(p);    inorder(p->right);  }}#endif // _GENSPLAY_H_
/***********************Splay.cpp***********************/#include <iostream>#include <fstream>#include <cctype>#include <cstring>#include <cstdlib> //exit(0)#include "genSplay.h"using namespace std;//用作計數對象的類class Word{private:  char *word;  int freq;  friend class WordSplay;  //friend ostream & operator<<(ostream &out, const Word &wd);public:  Word(){    freq = 1;  }  int operator==(const Word &ir) const{    return strcmp(word, ir.word) == 0;  }  int operator<(const Word &ir) const{    return strcmp(word, ir.word) < 0;  }};class WordSplay : public SplayTree<Word>{private:  int differentWords, wordCnt;  void visit(SplayingNode<Word> *);public:  WordSplay(){    differentWords = wordCnt = 0;  }  void run(ifstream &, char *);};void WordSplay::visit(SplayingNode<Word> *p){  differentWords++;  wordCnt += p->info.freq;}void WordSplay::run(ifstream &fin, char *filename){  char ch = ' ', i;  char s[100];  Word rec;  while(!fin.eof()){    while(1){      if(!fin.eof() && !isalpha(ch))        fin.get(ch);      else        break;    }    if(fin.eof())      break;    for(i = 0; !fin.eof() && isalpha(ch); i++){      s[i] = toupper(ch);      fin.get(ch);    }    s[i] = '/0';    if(!(rec.word = new char[strlen(s) + 1])){      cerr << "no room for new words./n";      exit(1);    }    strcpy(rec.word, s);    Word *p = search(rec);    if(p == 0)      insert(rec);    else      p->freq++;  }  inorder();  cout << "/n/nFile " << filename     << " contains " << wordCnt << " words among which "     << differentWords << " are different./n";}int main(){  char Filename[80];  WordSplay SplayTree;  cout << "enter a filename: ";  cin >> Filename;  ifstream fin(Filename);  if(fin.fail()){    cerr << "cannot open " << Filename << endl;    return 1;  }  SplayTree.run(fin, Filename);  fin.close();  return 0;}

有空回來補充相應的其他功能:

將對應的單詞和文件寫到文件里面去,先序遍歷
優化性能

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线视频观看免费网站| 亚洲永久免费观看| 91久久精品国产91性色| 亚洲丝袜av一区| 精品久久久一区| 日韩欧美亚洲一二三区| 成人久久18免费网站图片| 亚洲国产一区二区三区在线观看| 日韩国产精品视频| 日韩av影视综合网| 亚洲全黄一级网站| 亚洲国产精品人人爽夜夜爽| 国产亚洲精品日韩| 亚洲一区二区黄| 日韩av免费看网站| 91精品国产精品| 韩国19禁主播vip福利视频| 日韩黄在线观看| 成人精品久久av网站| 韩日欧美一区二区| 国产精品一二三视频| 精品福利在线看| 久久久久久中文| 欧美成人亚洲成人日韩成人| 91丝袜美腿美女视频网站| 日韩成人在线视频观看| 福利视频一区二区| 亚洲免费av片| 日韩av中文字幕在线免费观看| 日韩av手机在线看| 中文字幕精品一区二区精品| 日韩成人在线电影网| 国产精品国内视频| 亚洲视频综合网| 国产精品亚洲视频在线观看| 成人网址在线观看| 亚洲va久久久噜噜噜| 久久99热这里只有精品国产| 亚洲精品电影久久久| 国模gogo一区二区大胆私拍| 午夜精品一区二区三区在线视频| 欧美激情免费看| 亚洲人成免费电影| 日韩av免费在线看| 欧美黑人一区二区三区| 狠狠躁18三区二区一区| 欧美一区在线直播| 国产日本欧美一区二区三区| 欧美激情在线观看| 97超碰蝌蚪网人人做人人爽| 亚洲嫩模很污视频| 亚洲电影免费观看高清完整版在线观看| 久久手机精品视频| 久久成人一区二区| 日本精品性网站在线观看| 亚洲美腿欧美激情另类| 色综合久久88色综合天天看泰| 91久热免费在线视频| 国产精品一区二区三区毛片淫片| 欧美精品精品精品精品免费| 91精品视频在线看| 欧美精品中文字幕一区| 91精品国产网站| 日韩女在线观看| 一区二区三区黄色| 久久久久久久香蕉网| 日韩视频中文字幕| 免费不卡欧美自拍视频| 97视频在线播放| 国产自产女人91一区在线观看| 欧美日韩亚洲网| 欧美激情欧美狂野欧美精品| 国产欧美日韩中文字幕在线| 国产欧美一区二区三区在线| 久久久久中文字幕2018| 一个人看的www欧美| 欧美激情极品视频| 欧美日韩一区二区免费视频| 91久久在线观看| 91亚洲精品一区| 66m—66摸成人免费视频| 色诱女教师一区二区三区| 国产成人精品视频在线| 色偷偷亚洲男人天堂| 在线精品播放av| 亚洲国产精品字幕| 久久九九亚洲综合| 亚洲精品狠狠操| 亚洲欧美三级伦理| 伊人久久精品视频| 大荫蒂欧美视频另类xxxx| 国产精品久久久久久久久久三级| 国产精品看片资源| 中文字幕在线观看亚洲| 欧美精品在线播放| 国产精品极品美女在线观看免费| 欧美极品少妇xxxxⅹ裸体艺术| 91精品久久久久久久久青青| 色婷婷av一区二区三区在线观看| 久久久久久美女| 国产成人精品免费久久久久| 国产精品美女久久久免费| 国产欧美精品一区二区三区介绍| 亚洲午夜久久久久久久| 不卡中文字幕av| 日韩极品精品视频免费观看| 久久综合久中文字幕青草| 亚洲成年人影院在线| 亚洲国产欧美一区| 欧美成人网在线| 欧美精品videosex极品1| 国产精品久久久久久久久粉嫩av| 国产亚洲精品激情久久| 久久综合伊人77777| 国产福利视频一区二区| 亚洲图片在线综合| 亚洲最大在线视频| 九九久久久久99精品| 在线视频免费一区二区| 日韩国产欧美精品一区二区三区| 欧美极度另类性三渗透| 亚洲天堂av图片| 久久久久久国产| 日韩欧美精品免费在线| 77777少妇光屁股久久一区| 日韩精品中文字幕视频在线| 久久久久日韩精品久久久男男| 精品欧美一区二区三区| 欧美成人性生活| 成人夜晚看av| 国产精品久久久久免费a∨大胸| 色婷婷综合成人av| 国产一区二区香蕉| 超在线视频97| 最近2019中文免费高清视频观看www99| 欧美视频在线免费看| 久久久午夜视频| 亚洲欧美色婷婷| 日韩在线www| 国产精品黄视频| 成人亚洲综合色就1024| 国产精品91久久久| 国产一区二区日韩| 久久色免费在线视频| 欧洲成人在线观看| 最好看的2019年中文视频| 日韩在线小视频| 国产成人短视频| 欧美精品久久久久久久| 国模gogo一区二区大胆私拍| 日韩激情在线视频| 一区二区三区四区在线观看视频| 日韩中文字幕亚洲| 另类视频在线观看| 国产视频欧美视频| 91在线观看免费| 欧美成人免费一级人片100| 欧美亚洲激情视频| 91国偷自产一区二区三区的观看方式| 久久久精品在线观看| 日韩一级黄色av| 欧美老女人在线视频| 欧美一级在线播放| 久久久精品免费视频|