亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Trie樹的實(shí)現(xiàn)

Trie樹的實(shí)現(xiàn) Trie樹是保存字符串公共前綴信息的數(shù)據(jù)結(jié)構(gòu),可用于字符串多模匹配普通的非壓縮Trie樹實(shí)現(xiàn)如下第一種實(shí)現(xiàn):每個(gè)分支節(jié)點(diǎn)使用map標(biāo)準(zhǔn)庫容器保存前綴索引#include map #include stack #include vector #include string #include iostream #include random using namespace std; enum Compare_Result {EQUAL, LEFT_IS_PREFIX, RIGHT_IS_PREFIX, NOT_EQUAL}; struct TrieTreeNode //Trie樹節(jié)點(diǎn)類型 { enum NodeType { DATANODE, BRANCHNODE } type_flag; //節(jié)點(diǎn)類型標(biāo)志分支節(jié)點(diǎn)或存放關(guān)鍵字的葉節(jié)點(diǎn) union { string key_in_trie; //葉節(jié)點(diǎn)關(guān)鍵字 mapchar, TrieTreeNode* sub_ptr; //分支節(jié)點(diǎn)的分支字符和對(duì)應(yīng)的指向分支字符對(duì)應(yīng)的子節(jié)點(diǎn)的指針之間的映射關(guān)系 }; TrieTreeNode(const string k) :type_flag(NodeType::DATANODE), key_in_trie(k) {} TrieTreeNode() :type_flag(NodeType::BRANCHNODE), sub_ptr() {} TrieTreeNode(TrieTreeNode be_copied) { switch (be_copied.type_flag) { case NodeType::DATANODE: new (key_in_trie) string(be_copied.key_in_trie); break; case NodeType::BRANCHNODE: { new (sub_ptr) mapchar, TrieTreeNode*(); for (mapchar, TrieTreeNode*::iterator p be_copied.sub_ptr.begin(); p ! be_copied.sub_ptr.end(); p) sub_ptr.insert(make_pair(p-first, nullptr)); } break; } type_flag be_copied.type_flag; } ~TrieTreeNode() { switch (type_flag) { case NodeType::DATANODE: key_in_trie.~string(); break; case NodeType::BRANCHNODE: sub_ptr.~mapchar, TrieTreeNode*(); break; } } }; class TrieTree { public: bool insert(const string be_inserted) const; //Trie樹中插入關(guān)鍵字,true成功false失敗 bool deleteElem(const string be_deleted) const; //Trie樹中刪除指定關(guān)鍵字,true成功false失敗 TrieTreeNode* copy(); //拷貝Trie樹返回指向副本Trie樹的指針 TrieTree() { root new TrieTreeNode(); } void printTrieTree(TrieTreeNode* cur, size_t offset) const; bool isEmpty() const { return root-sub_ptr.empty(); } TrieTreeNode* getTrieTree() const { return root; } TrieTree(TrieTree be_copied) { root be_copied.copy(); } ~TrieTree(); private: Compare_Result static strCompare(const string left, const string right, string::size_type i); TrieTreeNode* root; //Trie樹根節(jié)點(diǎn) }; ostream operator(ostream o, const TrieTree be_output) { if (be_output.isEmpty()) { o NULL endl; return o; } be_output.printTrieTree(be_output.getTrieTree(), 0); return o; } Compare_Result TrieTree::strCompare(const string left, const string right, string::size_type i) { for (; ; i) { if (i left.size() i right.size()) return Compare_Result::EQUAL; else if (i left.size() || i right.size()) { if (i left.size()) return Compare_Result::LEFT_IS_PREFIX; else return Compare_Result::RIGHT_IS_PREFIX; } else if (left[i] ! right[i]) return Compare_Result::NOT_EQUAL; } } bool TrieTree::deleteElem(const string be_deleted) const { TrieTreeNode* run root; vectorTrieTreeNode* stack; vectorTrieTreeNode*::size_type index; mapchar, TrieTreeNode*::iterator stop_branch_node; mapchar, TrieTreeNode*::iterator leaf_father_point_to_leaf; { string::size_type i 0; while (true) { if (i be_deleted.size()) { mapchar, TrieTreeNode*::iterator it; it run-sub_ptr.find(be_deleted[i]); if (it run-sub_ptr.end()) return false; i; if (run root || run-sub_ptr.size() 2) { if (it-second-type_flag TrieTreeNode::NodeType::BRANCHNODE) { index stack.size(); stop_branch_node it; } else { leaf_father_point_to_leaf it; break; } } else stack.push_back(run); run it-second; } else { if (run-sub_ptr.empty() || \0 ! run-sub_ptr.begin()-first) return false; leaf_father_point_to_leaf run-sub_ptr.begin(); break; } } if (leaf_father_point_to_leaf-first ! \0 strCompare(be_deleted, leaf_father_point_to_leaf-second-key_in_trie, i) ! Compare_Result::EQUAL) return false; } delete leaf_father_point_to_leaf-second; run-sub_ptr.erase(leaf_father_point_to_leaf); if (run ! root run-sub_ptr.size() 1 run-sub_ptr.begin()-second-type_flag TrieTreeNode::NodeType::DATANODE) { if (stop_branch_node-second ! run) { for (size_t j stack.size() - 1; j index; --j) delete stack[j]; delete stack[index]; } stop_branch_node-second run-sub_ptr.begin()-second; delete run; } return true; } bool TrieTree::insert(const string be_inserted) const { TrieTreeNode* run root; string::size_type i 0; pairmapchar, TrieTreeNode*::iterator, bool result; while (run-type_flag ! TrieTreeNode::NodeType::DATANODE) { if (i be_inserted.size()) { result run-sub_ptr.insert(make_pair(be_inserted[i], new TrieTreeNode(be_inserted))); if (result.second) return true; run result.first-second; i; } else { if (run-sub_ptr.empty() || run-sub_ptr.begin()-first ! \0) { run-sub_ptr.insert(make_pair(\0, new TrieTreeNode(be_inserted))); return true; } return false; } } Compare_Result compare_result; { string::size_type start_index i; compare_result strCompare(be_inserted, run-key_in_trie, i); if (compare_result Compare_Result::EQUAL) return false; result.first-second new TrieTreeNode(); for (; start_index i; start_index) result.first result.first-second-sub_ptr.insert(make_pair(be_inserted[start_index], new TrieTreeNode())).first; } if (compare_result Compare_Result::LEFT_IS_PREFIX) { result.first-second-sub_ptr.insert(make_pair(\0, new TrieTreeNode(be_inserted))); result.first-second-sub_ptr.insert(make_pair(run-key_in_trie[i], run)); } else if (compare_result Compare_Result::RIGHT_IS_PREFIX) { result.first-second-sub_ptr.insert(make_pair(\0, run)); result.first-second-sub_ptr.insert(make_pair(be_inserted[i], new TrieTreeNode(be_inserted))); } else { result.first-second-sub_ptr.insert(make_pair(run-key_in_trie[i], run)); result.first-second-sub_ptr.insert(make_pair(be_inserted[i], new TrieTreeNode(be_inserted))); } return true; } TrieTree::~TrieTree() { TrieTreeNode* run root; stackpairTrieTreeNode*, mapchar, TrieTreeNode*::iterator work_stack; bool trace_back_flag true; while (true) { if (trace_back_flag true) { if (run root) { if (run-sub_ptr.begin() run-sub_ptr.end()) { delete root; return; } } else { if (run-type_flag TrieTreeNode::DATANODE) { delete run; run work_stack.top().first; work_stack.top().second; //work_stack.top().second run-sub_ptr.erase(work_stack.top().second); trace_back_flag false; continue; } } work_stack.push(make_pair(run, run-sub_ptr.begin())); run run-sub_ptr.begin()-second; } else { if (run root || work_stack.top().second ! run-sub_ptr.end()) { if (run root) { if (work_stack.top().second root-sub_ptr.end()) { delete root; return; } } run work_stack.top().second-second; trace_back_flag true; } else { delete run; work_stack.pop(); run work_stack.top().first; work_stack.top().second; // work_stack.top().second run-sub_ptr.erase(work_stack.top().second); } } } } TrieTreeNode* TrieTree::copy() { TrieTreeNode* be_copied root; stackpairTrieTreeNode*, mapchar, TrieTreeNode*::iterator work_stack; stackpairTrieTreeNode*, mapchar, TrieTreeNode*::iterator copy_trace_stack; TrieTreeNode* root_of_copy nullptr; bool trace_back_flag true; while (true) { if (trace_back_flag true) { if (be_copied root) { root_of_copy new TrieTreeNode(*be_copied); if (be_copied-sub_ptr.begin() be_copied-sub_ptr.end()) break; copy_trace_stack.push(make_pair(root_of_copy, root_of_copy-sub_ptr.begin())); } else { if (work_stack.top().second ! work_stack.top().first-sub_ptr.begin()) copy_trace_stack.top().second; copy_trace_stack.top().second-second new TrieTreeNode(*be_copied); if (be_copied-type_flag ! TrieTreeNode::DATANODE) copy_trace_stack.push(make_pair(copy_trace_stack.top().second-second, copy_trace_stack.top().second-second-sub_ptr.begin())); else { be_copied work_stack.top().first; trace_back_flag false; continue; } } work_stack.push(make_pair(be_copied, be_copied-sub_ptr.begin())); be_copied be_copied-sub_ptr.begin()-second; } else { if (work_stack.top().second-second-type_flag ! TrieTreeNode::DATANODE) copy_trace_stack.pop(); if (be_copied root || (work_stack.top().second) ! be_copied-sub_ptr.end()) { if (be_copied root) { if ((work_stack.top().second) root-sub_ptr.end()) break; } be_copied work_stack.top().second-second; trace_back_flag true; } else { work_stack.pop(); be_copied work_stack.top().first; } } } return root_of_copy; } void TrieTree::printTrieTree(TrieTreeNode* cur, size_t offset) const { if (cur-type_flag TrieTreeNode::BRANCHNODE) { size_t max_length; if (cur-sub_ptr.begin()-first \0) max_length 4; else max_length 1; for (mapchar, TrieTreeNode*::iterator run cur-sub_ptr.begin(); run ! cur-sub_ptr.end(); run) { for (size_t go 1; go offset; go) cout ; if (run-first \0) cout NULL; else { cout run-first; for (size_t go 2; go max_length; go) cout ; } cout |- endl; printTrieTree(run-second, offset 2 max_length); } } else { for (size_t go 1; go offset; go) cout ; cout leaf: cur-key_in_trie endl; } } int main() { vectorstring test { bluebird, bunting, bobwhite, bluejay }; TrieTree test_obj; for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); //for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 刪除字符串 bobwhite endl; if (test_obj.deleteElem(bobwhite)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } cout 刪除字符串 bluejay endl; if (test_obj.deleteElem(bluejay)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; string mod abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789; const int L 9; // 隨機(jī)字符串最大長(zhǎng)度 const int r 2; //相同長(zhǎng)度重復(fù)次數(shù) vectorint LList(L); vectorstring random_str; for (int run 0; run LList.size(); run) LList[run] run 1; shuffle(LList.begin(), LList.end(), default_random_engine()); for (int re 1; re r; re) { for (int run 0; run LList.size(); run) { string r; for (int go 1; go LList[run]; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(r); } } for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; random_str.clear(); for (int i 1; i 7; i) { string temp(mod, 0, i); for (int run 1; run 7; run) { string r; for (int go 1; go run; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(temp r); } } cout 測(cè)試字符串有共同前綴不相等情形 endl; for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; shuffle(mod.begin(), mod.end(), default_random_engine()); for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 插入字符串 mod 的前綴 temp endl; if (test_obj.insert(temp)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 刪除字符串 mod 的前綴 temp endl; if (test_obj.deleteElem(temp)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } return 0; }第二種實(shí)現(xiàn)分支節(jié)點(diǎn)使用數(shù)組保存前綴的索引#include map #include stack #include vector #include string #include iostream #include random #include tuple using namespace std; enum Compare_Result { EQUAL, LEFT_IS_PREFIX, RIGHT_IS_PREFIX, NOT_EQUAL }; struct TrieTreeNode //Trie樹節(jié)點(diǎn)類型 { enum NodeType { DATANODE, BRANCHNODE } type_flag; //節(jié)點(diǎn)類型標(biāo)志分支節(jié)點(diǎn)或存放關(guān)鍵字的葉節(jié)點(diǎn) struct BranchNode { vectorTrieTreeNode* sub_ptr; size_t num; BranchNode() :sub_ptr(128, nullptr), num(0){} BranchNode(const BranchNode B) :num(B.num), sub_ptr(128, nullptr) {} }; union { string key_in_trie; //葉節(jié)點(diǎn)關(guān)鍵字 BranchNode branch_ptr; //分支節(jié)點(diǎn)的分支字符和對(duì)應(yīng)的指向分支字符對(duì)應(yīng)的子節(jié)點(diǎn)的指針之間的映射關(guān)系 }; TrieTreeNode(const string k) :type_flag(NodeType::DATANODE), key_in_trie(k) {} TrieTreeNode() :type_flag(NodeType::BRANCHNODE), branch_ptr() {} TrieTreeNode(TrieTreeNode be_copied) { switch (be_copied.type_flag) { case NodeType::DATANODE:{ new (key_in_trie) string(be_copied.key_in_trie); break; } case NodeType::BRANCHNODE:{ new (branch_ptr) BranchNode(be_copied.branch_ptr); break; } } type_flag be_copied.type_flag; } ~TrieTreeNode() { switch (type_flag) { case NodeType::DATANODE: key_in_trie.~string(); break; case NodeType::BRANCHNODE: branch_ptr.~BranchNode(); break; } } }; class TrieTree { public: bool insert(const string be_inserted) const; //Trie樹中插入關(guān)鍵字,true成功false失敗 bool deleteElem(const string be_deleted) const; //Trie樹中刪除指定關(guān)鍵字,true成功false失敗 TrieTreeNode* copy(); //拷貝Trie樹返回指向副本Trie樹的指針 TrieTree() { root new TrieTreeNode(); } TrieTree(TrieTree be_copied) { root be_copied.copy(); } void printTrieTree(TrieTreeNode* cur, size_t offset) const; bool isEmpty() const { return root-branch_ptr.num 0; } TrieTreeNode* getTrieTree() const { return root; } ~TrieTree(); private: template typename T Compare_Result static strCompare(const string left, const string right, T i); static size_t char_to_index(const char ch) { return ch; } TrieTreeNode* root; //Trie樹根節(jié)點(diǎn) }; ostream operator(ostream o, const TrieTree be_output) { if (be_output.isEmpty()) { o NULL endl; return o; } be_output.printTrieTree(be_output.getTrieTree(), 0); return o; } template typename T Compare_Result TrieTree::strCompare(const string left, const string right, T i) { for (; ; i) { if (i left.size() i right.size()) return Compare_Result::EQUAL; else if (i left.size() || i right.size()) { if (i left.size()) return Compare_Result::LEFT_IS_PREFIX; else return Compare_Result::RIGHT_IS_PREFIX; } else if (left[i] ! right[i]) return Compare_Result::NOT_EQUAL; } } bool TrieTree::deleteElem(const string be_deleted) const { TrieTreeNode* run root; stackTrieTreeNode* work_stack; size_t index; { string::size_type i 0; while (run-type_flag TrieTreeNode::NodeType::BRANCHNODE) { if (i be_deleted.size()) { index char_to_index(be_deleted[i]); if (run-branch_ptr.sub_ptr[index] nullptr) return false; i; work_stack.push(run); run run-branch_ptr.sub_ptr[index]; } else { if (run-branch_ptr.sub_ptr[0] nullptr) return false; work_stack.push(run); run run-branch_ptr.sub_ptr[0]; index 0; } } if (run ! work_stack.top()-branch_ptr.sub_ptr[0] strCompare(be_deleted, run-key_in_trie, i) ! Compare_Result::EQUAL) return false; } work_stack.top()-branch_ptr.sub_ptr[index] nullptr; delete run; --work_stack.top()-branch_ptr.num; if (work_stack.top() ! root work_stack.top()-branch_ptr.num 1) { for (index 0; index work_stack.top()-branch_ptr.sub_ptr.size(); index) { if (work_stack.top()-branch_ptr.sub_ptr[index] ! nullptr) break; } if (work_stack.top()-branch_ptr.sub_ptr[index]-type_flag TrieTreeNode::NodeType::DATANODE) { run work_stack.top()-branch_ptr.sub_ptr[index]; delete work_stack.top(); work_stack.pop(); while (work_stack.top() ! root) { if (work_stack.top()-branch_ptr.num 2) { work_stack.top()-branch_ptr.sub_ptr[char_to_index(be_deleted[work_stack.size() - 1])] run; return true; } else { delete work_stack.top(); work_stack.pop(); } } work_stack.top()-branch_ptr.sub_ptr[char_to_index(be_deleted[0])] run; } } return true; } bool TrieTree::insert(const string be_inserted) const { TrieTreeNode* run root; string::size_type i 0; size_t index; TrieTreeNode* father_of_leaf nullptr; while (run-type_flag ! TrieTreeNode::NodeType::DATANODE) { if (i be_inserted.size()) { index char_to_index(be_inserted[i]); if (run-branch_ptr.sub_ptr[index] nullptr) { run-branch_ptr.sub_ptr[index] new TrieTreeNode(be_inserted); run-branch_ptr.num; return true; } father_of_leaf run; run run-branch_ptr.sub_ptr[index]; i; } else { if (run-branch_ptr.sub_ptr[0] nullptr) { run-branch_ptr.sub_ptr[0] new TrieTreeNode(be_inserted); run-branch_ptr.num; return true; } return false; } } Compare_Result compare_result; { string::size_type start_index i; compare_result strComparestring::size_type (be_inserted, run-key_in_trie, i); if (compare_result Compare_Result::EQUAL) return false; father_of_leaf father_of_leaf-branch_ptr.sub_ptr[index] new TrieTreeNode(); for (; start_index i; start_index) { father_of_leaf-branch_ptr.num 1; father_of_leaf father_of_leaf-branch_ptr.sub_ptr[char_to_index(be_inserted[start_index])] new TrieTreeNode(); } } if (compare_result Compare_Result::LEFT_IS_PREFIX) { father_of_leaf-branch_ptr.sub_ptr[0] new TrieTreeNode(be_inserted); father_of_leaf-branch_ptr.sub_ptr[char_to_index(run-key_in_trie[i])] run; } else if (compare_result Compare_Result::RIGHT_IS_PREFIX) { father_of_leaf-branch_ptr.sub_ptr[0] run; father_of_leaf-branch_ptr.sub_ptr[char_to_index(be_inserted[i])] new TrieTreeNode(be_inserted); } else { father_of_leaf-branch_ptr.sub_ptr[char_to_index(run-key_in_trie[i])] run; father_of_leaf-branch_ptr.sub_ptr[char_to_index(be_inserted[i])] new TrieTreeNode(be_inserted); } father_of_leaf-branch_ptr.num 2; return true; } size_t find_next(TrieTreeNode* cur, size_t run) { for (; run cur-branch_ptr.sub_ptr.size(); run) { if (cur-branch_ptr.sub_ptr[run] ! nullptr) return run; } } TrieTree::~TrieTree() { TrieTreeNode* run root; stacktupleTrieTreeNode*, size_t, short work_stack; bool trace_back_flag true; while (true) { if (trace_back_flag true) { if (run root) { if (run-branch_ptr.num 0) { delete root; return; } } else { if (run-type_flag TrieTreeNode::DATANODE) { delete run; run get0(work_stack.top()); if (run-branch_ptr.num ! get2(work_stack.top())) get1(work_stack.top()) find_next(run, get1(work_stack.top()) 1); trace_back_flag false; continue; } } work_stack.push(make_tuple(run, find_next(run, 0), 1)); run run-branch_ptr.sub_ptr[get1(work_stack.top())]; } else { if (run root || get2(work_stack.top()) ! run-branch_ptr.num) { if (run root) { if (get2(work_stack.top()) root-branch_ptr.num) { delete root; return; } } get2(work_stack.top()); run run-branch_ptr.sub_ptr[get1(work_stack.top())]; trace_back_flag true; } else { delete run; work_stack.pop(); run get0(work_stack.top()); if (run-branch_ptr.num ! get2(work_stack.top())) get1(work_stack.top()) find_next(run, get1(work_stack.top()) 1); } } } } TrieTreeNode* TrieTree::copy() { TrieTreeNode* be_copied root; stacktupleTrieTreeNode*, size_t, short work_stack; stackTrieTreeNode* copy_trace_stack; TrieTreeNode* root_of_copy nullptr; bool trace_back_flag true; while (true) { if (trace_back_flag) { if (be_copied-type_flag TrieTreeNode::BRANCHNODE) { if (be_copied root) { root_of_copy new TrieTreeNode(*be_copied); if (be_copied-branch_ptr.num 0) { break; } copy_trace_stack.push(root_of_copy); } else copy_trace_stack.push(copy_trace_stack.top()-branch_ptr.sub_ptr[get1(work_stack.top())] new TrieTreeNode(*be_copied)); work_stack.push(make_tuple(be_copied, find_next(be_copied, 0), 1)); be_copied be_copied-branch_ptr.sub_ptr[get1(work_stack.top())]; } else { copy_trace_stack.top()-branch_ptr.sub_ptr[get1(work_stack.top())] new TrieTreeNode(*be_copied); be_copied get0(work_stack.top()); trace_back_flag false; } } else { if (be_copied-branch_ptr.num ! get2(work_stack.top())) { get1(work_stack.top()) find_next(be_copied, get1(work_stack.top()) 1); get2(work_stack.top()); be_copied be_copied-branch_ptr.sub_ptr[get1(work_stack.top())]; trace_back_flag true; } else { if (be_copied root) break; work_stack.pop(); be_copied get0(work_stack.top()); copy_trace_stack.pop(); } } } return root_of_copy; } void TrieTree::printTrieTree(TrieTreeNode* cur, size_t offset) const { if (cur-type_flag TrieTreeNode::BRANCHNODE) { size_t max_length; if (cur-branch_ptr.sub_ptr[0] ! nullptr) max_length 4; else max_length 1; int count 0; for (size_t run 0; ; run) { if (cur-branch_ptr.sub_ptr[run] ! nullptr) { count; for (size_t go 1; go offset; go) cout ; if (run 0) cout NULL; else { cout static_castchar(run); for (size_t go 2; go max_length; go) cout ; } cout |- endl; printTrieTree(cur-branch_ptr.sub_ptr[run], offset max_length 2); if (count cur-branch_ptr.num) break; } } } else { for (size_t go 1; go offset; go) cout ; cout leaf: cur-key_in_trie endl; } } int main() { vectorstring test { bluebird, bunting, bobwhite, bluejay }; TrieTree test_obj; for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); //for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 刪除字符串 bobwhite endl; if (test_obj.deleteElem(bobwhite)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } cout 刪除字符串 bluejay endl; if (test_obj.deleteElem(bluejay)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; string mod abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789; const int L 9; // 隨機(jī)字符串最大長(zhǎng)度 const int r 2; //相同長(zhǎng)度重復(fù)次數(shù) vectorint LList(L); vectorstring random_str; for (int run 0; run LList.size(); run) LList[run] run 1; shuffle(LList.begin(), LList.end(), default_random_engine()); for (int re 1; re r; re) { for (int run 0; run LList.size(); run) { string r; for (int go 1; go LList[run]; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(r); } } for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; random_str.clear(); for (int i 1; i 7; i) { string temp(mod, 0, i); for (int run 1; run 7; run) { string r; for (int go 1; go run; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(temp r); } } cout 測(cè)試字符串有共同前綴不相等情形 endl; for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; shuffle(mod.begin(), mod.end(), default_random_engine()); for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 插入字符串 mod 的前綴 temp endl; if (test_obj.insert(temp)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 刪除字符串 mod 的前綴 temp endl; if (test_obj.deleteElem(temp)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } return 0; }每種實(shí)現(xiàn)應(yīng)該都能適用于空串的插入刪除自己沒有驗(yàn)證過感興趣可自行驗(yàn)證
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
成人三级片一区二区三区视频| 久婷婷一区| 亚洲精品男人的天堂| 国产黄色av大片网站| 台湾佬激情综合| 久久av网| 亚洲第一男人天堂| 色色色日本| 国内精品伊人久久久久影院会| 丁香九月激情| 欧美热图99| 亚欧高清| 激情六月天| 久久久啊啊啊| 69精品| 亚洲欧美变态| 曰韩精品视频一区二区| 中文字幕无码不卡啪啪| 久操视频在线观看| 日本 欧美 亚中文字幕| 一级免费精品| 2019天天干天天操| 亚洲校园激情| 日本成人免费一区二区三区| 熟妇人妻精品一区二区视频色欲| 精品无人区麻豆乱码久久久| 午夜乱轮操逼视频免费看| 欧美在线视频99| 18禁久极品美女久久哦哟呀!| 亚洲一区中文字幕| 色色五月天激情| 久久9999| 亚州综合电影| 激情五月天色色网| 99精品高潮| 亚洲综合另类小说色区亚洲成av人片在www| 嫩草 人人网精品| 国产成人 综合亚洲 天堂| 日本99一区二区| 免费观看国产不卡av| 肉嘟嘟www视频在线观看高清| av资源在线播放天堂| 国产免费小视频| 国产精品视频精品一二| 人妻少妇久久中文| 26uuu欧美日韩| 精精夜夜| 色小视频蜜乳| 天天92av| 欧美日韩小说| 亚洲欧美爆| 综合久久久久久久久91| 欧美日韩久久精品爱爱| 久久爽爽精品| 一区二区偷拍拍视频| 亚洲无限观看| 热久久无毒不卡| 国产剧情一区在线观看| 国产综合久久久鬼色| 2019久久久久久久久福利| 青青操少妇| 豆1无夜无码| 大香蕉日亚洲日本亚大| 色婷婷综合网站| 国产一区二区免费福利片| 亚洲色图美腿丝袜| 精品一二三区久久AAA片| 香蕉黄色一级视频| 国产一区二区在线播放| 极品色综合| 一级黄碟| 无套内射人妻在线播放| 日本熟女中文| 天天懆天天日| 日本黄色裸日本黄色裸体 | 日韩欧美成人大香蕉| 亚洲国产丝袜熟女av| 99久久无色码| 狠狠躁天天躁日日躁| 欧美熟女激情| 国产视频第二页| 五十路二区在线 | 超碰欧美| 久久久专区| 美骚妇av高清在线| 欧美综合第一| 97天天摸天天碰| 国产人妻久久精品一区二区三区| 屁股久久久久久久久| 婷婷情色综合网| 激情婷婷丁香| 动漫片子网站3黄| 性性欧美| 97亚洲自在精品在线观看| 韩国一级做A片免费的| www超碰| 95自拍视频在线观看| 无码不卡亚洲成?人片| 久久夜夜| 国产美女mm131爽爽爽爽| 久久青娱乐| 色嗨嗨在线| av天堂影视中文在字幕在线中文| 国产精品无码久久久久2025| 欧美国产日韩高清在线| 亚洲精品天天影视综合网 | 黄色片大香蕉| 国产精品干干干| 开心婷婷五月| 啊好爽快点-国产一区二区三区撒尿在线-成人AV| 欧美日本久久精品一区 | 亚洲丝袜少妇在线| 欧美国产婷婷久久| 激情综合五月天| 羞答答AV中文字| 久久精品国产97欧美精品亚洲 | www.激情| 精品免费囯产一区二区三区| 人妻天天夜夜爽一区二区| 中文字幕97色| 亚欧无码在线| 九九九综合精品| 欧美综合网| 欧美影音在线| 国产三级多多影院2022国产AA一级毛片无码| A V少妇特黄三级| 加勒比性爱成人在线| 久操com| 日韩午夜啪啪视频| 国产一级高清免费观看| 亚洲成人色情五月天丁香花| 人人贴人人摸| 99精品无码| 人妻熟女午夜精品在线| 日韩99999| 精品女人999| 青青草影视蜜久久| 天堂8在线新版官网| 日韩 欧美 校园一区| 丝袜加勒比| 99热| 国产精品一区二区亚洲人成毛片 | 国产精品九九九| 亚洲熟妇丝袜在线观看| 国产一区二区成人av在线播放| 97超碰亚洲| 国产在线强奸视频| 91久| 又大又白奶子| 婷婷色网| 国产亚洲精品美女久久久| 国产精品96| 伊人久久国产免费观看视频| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 亚洲人妻爽爽爽| 色婷婷在线视频| 免费久久一级毛片大黄| 三级精品三级在线观看| 蜜桃AV天堂| 欧洲色| 欧美人妻久久精品二区三区 | 大香蕉在线86| 天天射天天操天天干天天吃2018| 欧美少妇性乱| 天天干天天日天天射黄色大片| 日韩欧美字幕亚洲一区二区| 亚洲色图欧美色图日韩色图| 97超级久久| 97操综合| 一本色道久久综合精品婷婷| 丝袜美女诱惑 91 视频| 午夜精品久久久久久久| 精品二区三四区五电影 | 欧美亚洲成人在线一区二区三区| 日本三级韩三级99久久| 五月婷婷爱六月丁香色| 亚洲熟女av日韩熟女| 国产av波波国产精品| 九九九九热| 黄色免费网| 中文字幕五月婷婷免费| 青青草中文-久久青草精品一区二区三| 蜜桃臀av在线观看| 国产精品亚洲四五区在线观看| 啊啊啊好舒服好爽啊啊啊视频| 爱干爱射网啊啊啊| 激情亚洲天堂| 欧美日韩狠狠爱| 中文字幕三四区| 亚洲电影中字一区二区| 九九性视频| 嗯嗯嗯嗯啊啊啊好紧好大| 五十路熟女,国产欧美精品区一区二区三区 | www久久99| 人人噜夜夜操| 91欧美偷拍| 精品久久久久久中文| 日韩精品一二三| 亚洲 无码 有码 中文字幕| 亚州日韩97| 精品网站9999| 亚洲人妻中文高清| 巨爆乳一区二区爆乳区| 欧美97爱| 国产二区三区免费视频| 九九碰九九爱97| 日韩欧美经典在线观看| 蜜桃丰满熟妇av无码区不卡| 久热91| 久久综合女优| 日本三级韩三级99久久| 欧美一级AAAAAAA| 色九九久九九| 超碰成人人人爽人人爽| 欧美少妇色图| 亚洲国产一区二区三区在线 | 亚洲有薄码区日本系列中文字幕| a久久| www.久久爱| 一个人在线看的黄色电影网站| 国产AV人人夜夜澡人人爽麻豆| 99久久com免费视频′| 国产又粗又又黄又猛| 欧美色老汉| 爱爱动态试试看6 0秒| 婷婷久久综合| 久热9| 色噜噜人妻av中文字幕| 久久熟女久| 91 国产丝袜在线放观看| 超碰在线97国产| 欧美日韩制服| 婷婷美人网| 精品九九国产无码| 99精品在线观看| 蜜桃久久久久久| 亚欧视频在线| 欧美综色欧| 9热9热综合网| 久久婷婷五月天| 亚洲一区二区av| 嫖老熟女A片一二三区| 精品国产久热在线观看| 欧美一区二区三区成人性生活| 亚洲性爱电影| 天天看特黄的免费网站| 国产一在线观看| 少妇人妻在线| 九九九影院| 色97国产69香蕉| 懂色中文一区二区三区| 欧美日韩妖精91com| 亚洲。日韩。欧美| 午夜精品久久久久久久男人的天堂 | 精品福利| 无码人妻系列少妇| 欧美操逼录像国产黄色国产| 亚洲中文字幕日产无码久久| 日本熟妇一区二区三区| 久久久久国产精品喷潮免费观看臀| 99少妇| 夜色五月天| www.91理论| 欧美A片中文字幕| 伊人网在线观看| 日本亚欧爱爱| 操B视频日韩无码| 婷婷五月天激情四射| 欧美激情在线观看视频| 深夜国产福利| 簧片免费看视频| 日韩黄色av中文字幕| 日日妻色网| 91精品国久久久久久无码| 欧美日韩大香蕉| 色色色999| 国产日韩怡红院| 成人精品视频一区二区| 国产亚洲精品一区二区三区| 可乐操亚洲蜜911| 福利风月五月天影院| 欧美 亚洲 综合 制服| 亚洲无码色| 无码乱人伦中文视频| 日韩AV一区二区三区四四| AV丝袜少妇| 91国产丝袜美女| 97爱爱官网| 青娱乐淫乱1314| 强奸乱伦AV网址| 欧美精品成人在线播放| 99爱爱| 大香蕉2017| 婷婷五月天补不补| 色综合久久88色综合久久天天| 欧洲亚洲国产综合在线| 亚洲欧美综合图片| 四虎午夜影院| 成人怡红院| 九九九九国产| 日韩综合无码色欲vv| 婷婷五月综合在线| 亚洲限制级| 欧美色97| 手机在线播放国产福利| 精品无码人妻一区二区免费蜜桃| 亚洲综合69| 无码最新| 国产一国产一级毛片古装| 超碰2017| 国产精品一区二区在钱播放| 男人的天堂com| 日韩黄色成人性爱| 18+91网站| 久久精品国产亚洲妲己影视| 九九九九九九九精品视频| 青青草原成人| 欧美人人AAA| 性爱AV天堂| 久久婷婷电影网| 成人精品视频一区二区| 亚洲麻豆av一区二区| av婷婷色网| 天天干嫩逼网| 大香蕉啪啪啪| 成人国产视频在线观看| 九九九精品色乱九九九| 亚洲情色 自拍| 97高清啪啪| oumeisetu综合| 四虎国产成人精品免费一女五男| 少妇熟女一区二区三区| 婷婷丁香五月激情啪啪| 国产精品人妻无码久久久互動交流| 亚洲啪AⅤ永久无码| 美女AV一区二区| 熟女色综合久久| 天天欧美97| 99啪啪| 黄色一级视| 91久久青青草原精品| 长长久久88视频| 91美| 久操 高清| 探花激情视频| 97色亚洲| 免费视频观看60秒| 国产馆极品诱惑| 久久久天堂| 中文字幕 国产区| 国产 日韩 欧美一区| 久久久噜噜噜久久人妻| 伊人97| 色香综合天天影视综合 | 99热这里都是精品| 亚洲少妇色| 国产精品乱码久久久| 精品无码久久久| 粉嫩在线一区二区懂色| 精品一区二区三区国产| 色综合1991| 久久久18| 久久精品国产亚洲AV高级北京| 一区二区三区蜜桃成人撸久久东京热| 99热这里只有精品9| 中日韩熟女| 国产丸一视频| 中文字日本乱码| WWW4虎| 久热无码| 久操大香蕉手机视频在线看 | 国产亚洲日韩欧| 舔足天天操天天射| 亚洲自拍小说| 亚洲精品久久久久久久蜜桃臀| 亚洲第一页综合在线| 肉丝无码中文高清| 亚洲欧美洲综合| 日本不卡五区| 无码一区二区精品视频久久久春药| 91色综合| 97精品一区二区视频| 日韩免费福利在线观看| 欧亚 另类 久| 3P丝袜熟女 色综合| 94色色电影网| 在线有码中文字幕| 5月婷婷6月六月丁香| 国产高清无码一区二区三区四区皇冠| 日日夜夜精品| 精品高清一区二区三区三州| 五月天久久久| 欧美日韩操逼动图| 国产67194| 96精品久久| 二色av| 亚洲色91C| 蜜臀AV秘一区翔田千里| 亚洲永久永久永久永久一级一级一级精品 | 白丝被操91| 中文久久96| 九九精品网| 欧亚性爱啪啪| 性性久久| 久久国产熟女影院| 国产四虎在线| 超碰在线人人射| av婷婷色网| 激情网五月天| 白丝1区2区3区| 亚州欧美色图| 中 文字幕一区二区三四 五 区日 日 骚 | 手机看片日韩人妻| 中文字幕日韩人妻视频一区二区三区| 久久久天堂| 久草在| 青草精品视频一日本久久久久网站| 欧美一区二区情色| 青青草啪啪网| 狠狠色色| 国产精品干干干| 激情婷婷丁香| 图片区小说区| 曰本91情色| 成人av毛片在线观看| a人片中文字幕一区二区| 亚洲第一页色| 日韩亚洲中文字幕在线| 99热18这里只有精品| WWW操逼| 亚洲精品国产拍免费91在线| 99在线观看无大码| 人妻-91porn| 在线播放中文字幕| 超碰 国产熟女精品一区| 热久久91婷婷| 好吊色在线观看| 久久在线观看免费视频| 青娱乐91| 97人人操人人干| 国产一级内射高清视频| 裸体美女国产免费久久久网站| 国产AV高清AV无码| 中国乱伦一区二区| 激情文学88| 密桃99999| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 五月天人妻综合| 99久久婷婷国产综合| 91在线视频免费播放| 女性喷水高潮在线观看| 高清有码一区二区| 国产在线视频午夜精华在| 本道在线| 亚洲男人的天堂网| 91天天综合日韩欧美| 成年男人的天堂| 亚洲一区中文精品| 成年无码动漫av片无尽在线 | 免费超碰97久久| 国内偷拍精品一区二区| 欧美自拍网| 伊人久大| 蜜桃臀AV在线| 成人97人人超碰人人| 黄片免费日韩| 亚洲综合有码| 看看日B真人视频| 亚洲中文人妻色| 欧美亚洲色的图| 午夜寂寞欧美| 日本孕妇孕交| 五月天婷婷久久| 久久色一区二区| 亚洲啪啪视频一区二区| 欧美色综合网| 五月婷婷综合激情| 日韩性爱视频在线免费观看| 日韩成人人妻网站| www老逼91| 韩国黄片aaaa| 一本大道青青| 97视频www| 日本 欧美 国产一区| 香蕉视频精品亚洲一区二区三区在线播| 开心婷婷五月| 91在线免费精品视频| 91欧美巨乳| 精品久久久久黄少妇| 色播五月丁香| 国产一区二区三区白丝| 国产久久一区二区三区野外在线| 免费观看国产不卡av| 欧美玖玖爱免费玖玖| 亚洲情色五月天 | 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 大二网站亚洲| 97干97色| 日本国产欧美一区三区二区 | 亚洲小电影免费涩涩成人在线高清 | 中文幕97| 黑丝少妇麻豆| 欧美三级一级| 久久婷婷亚洲欧| 超碰激情808| 日本99视频| 免费观看网黄| 18禁在线视频| 97国产中文| 久久久久久九九九九九九| SUV一区二区在线看| 草b在线| 抽插爽| 亚洲91大片| 久久精品91| 欧美亚洲韩国视频十五区 | 99色视频| 午夜欧美J进J出白浆流出久久久 | 国产乱伦性爱区| 成人一道本免费视频| 操逼视频免费日韩无码| 九九人人操| 爽爽歪在线视频| 五月丁香啪| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 无码78| 美女天天干| 乱伦日本色图AⅤ| 久久超碰、| 大香蕉日亚洲日本亚大| 久久久久久久| 在线免费观看日韩一区| 欧美激情另类一区二区| 亚洲一区二区中文字幕| 牛黄色久午久| 亚洲天天精品| 国产曰批免费观看久久久| 亚洲国产精品9999在线观看| 另类小说综合网| 欧美东京热精品A∨| 国产一区二区啪啪视频| 少妇毛片久久| 特级大荫道BBwBBwBBW| 亚洲综合一| 2011国产精品| 在线播放免费av福利片| 99精品网| 久久精品日韩专区免费观看| 婷婷爱五月| 九九九九国产| 色色五月婷婷| 亚洲激情深爱文学小说网站| 国产精品一区二区手机看片| 91人妻在线视频| 中文字幕乱码在线观看| 精品久久久av| 久久五月婷| 800zy一区二区| 日本加勒比无码专区| 美腿丝袜高跟网免费视频免费视频| 欧亚免费视频| 97亚洲一区| 99久久精品无码一区二区毛片免费| 在线色资源| 国产小炒后入式| 2019精品国产无码成人| 伊人玖玖网| 一块操欧美| 中日亚韩免费视频| 91bbbbbb| 久久九精品| 性爱动态120秒| A 天堂在线观看视频| 自拍偷拍 日韩欧美| 欧美AB在线| 大香蕉一人| 中文字幕女同在线| 日日日骚女人精品| 日韩美一区| 色色色热| 天天综合精品| 国产精品亚洲天堂网址| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 97在线青| 天天天乱色综合全| 无码99| 日韩中文字幕视频| 久久国产乱子伦精品免费女,网站| 日本一区二区三区四区五区六区七区八区九区| 极品出轨视频网站| 亚洲男人天堂AV| 久久草在线综合视频| 96免费视频在线| 99热导航| 欧洲综合视频| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 91亚洲欧洲| 亚洲最大的黄色电影网站。| 老司机射| 免费人成在线观看网站品爱网| 内射小黄片| 天堂精品| 日韩精品大香蕉伊人在线| 老女人老91妇女老热女| 久久人爽| 老司机午夜精品福利视频一区二区| 蜜桃精品一区二区三区ww| 91九久| 亚洲AV成人在线| 日夜啪电影| 成人aⅴ一区二区三区| 欲色影视综合吧| 国产后入清纯| A 天堂| 国产丁香精品露脸视频 | 国产丝袜欧美在线视频| 伊人天堂在线| 青青在线视频日韩欧美| 好吊妞转入那个网| 九九热在线视频| 青青草日韩免费观看高清在线| 丁香婷婷色五月| 欧美亚洲第一页| 一级久久久久久久久久久 | 欧亚性爱啪啪| 亚洲最大无码中文字幕网站| 日本三级网页| 精品熟妇视频一区二区| 久久久一区二区三区麻豆| 日逼国产| 嗯嗯嗯嗯啊啊啊好紧好大| 欧美色偷拍| 久久久久幕乱码| 日韩 女同 综合| 国产成人精品必看 | 色偷偷人人玩人人舔人人操人人摸人人爽| 91美女视屏| 久久久99久9| 久久久一二三四区| www.91理论| 欧美色九九九| 美女久久久| 欧美综合综合| 91狠狠综合久久| 国产精品国产拍高清AV| 日韩干B| 自拍第一页| 最新三级网址| 理论久久婷婷网8| 黄aaaaaaaaaaaaaaaaaa色网站| 激情视频图片| 国产女生在线| 欧美熟女妇同| 亚洲欧美伦综合| 国产熟女完整版中字| 欧洲自拍第一页| 2021国产成人精品久久| 成人麻豆av电影网站| 日韩中文字幕宗合在线| 最近2019中文字幕国语免费版| 狠狠爱夜夜| 亚洲欧美清纯| 日本一本一区二区三区四区五区欧美日韩中文字幕| 91色堂| 亚洲国产ⅴ高清在线观看| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 蜜臀久久久国产| 久久成人午夜狠狠| 国产无码三级视频在线观看| 亚洲女人毛茸茸91| 亚洲国产综合久久久性感熟妇| 色吧5亚洲| 超碰午夜在线| 花野真衣| 伊人网青青| 国产精品国产拍高清AV| 理论久久婷婷网8| 夜色五月天| 深夜视频| 欧洲乱码视频| 婷婷在线视频在线观看| 欧美人人天天网| 9久久美女首页| 天天内射| 国产综合日韩伦理| 免费看片黄| 九九热av| 97亚洲色图| 亚欧美综合网| 九九热精品在线| 人妻干天天| av天堂加勒比| 操曰本熟女| 老师充足的奶水小说| 精品v日韩欧美国产| 午夜福利免费福利视频| 久久99国产综合精品女同| 国产精品婬乱一级毛片彝族| 日本道不卡| 日本色婷婷| 91大神精品长腿在线观看网站| 久草免费在线视频| 黑人综合网| 最近2019中文字幕国语免费版| 欧洲特黄毛片免费看欧洲毛片| 亚洲色图久久精品蜜| 国产超碰在线| AA级电影三区| 高清国产性猛交xxxx乱大交| a在线视频免费观看| 国产精品黄色三级av| 男女激烈网站最新| 日韩精品人妻一| 午夜福利成人免费视频| 啊好大好舒服| 国产精品欧美激在线| 性爱AV天堂| 另类av天堂| 欧美亚洲| 天天看天天日| 不卡二三区人妻少妇| 色香91| 亚洲人精| 青春草A| 欧美色图在线视频少妇| 日本超碰色精品| 日韩成人小视频| 亚洲黄色AV电影| 久久日韩精品一区二区| 日本不卡在线二区三区| 日本天天吊| 免费毛片在线播放| 欧美色婷婷| 亚州色国| 欧美另类精品xxxx| 粉嫩粉嫩一区性色AV片| 国产一级αv免费看片| 77777亚洲蜜臀精品久久综合蜜臀| 成人网欧美风情| 伊人久日| 岛国大片国产| 殴美性色a级欧美| 人爽不卡视频| 乱操乱伦AV| 一区二区首页| 丰满人妻被猛烈进入中| WWW4虎| 欧美日韩中文字幕不卡| 久操免费在线| 暴力av在线| 2017天天操天天日| 欧美亚洲手机在线| 91伊人久| 在线天堂999| 九九这里只有精品| 日本丝袜人妻内射| 天天舔天天日天天射| 欲女人妻性色av| 天天视频网站黄| 自拍欧美| 日韩有码一区三区| 欧美人黑A片无码免视费| 超碰在线成人| 97超碰总站| 欧美网站免费| 美女十八禁| 激情五月天色色网| 久操电影网| 天天干夜夜一操| 啊啊啊好大好深| 亚洲精品性爱片| 亚洲精品国语在线播放| 91AV入口| 国产日韩欧美三级片| 亚洲激情网一二三四区| 无码聚合| 91被操| 国产成人无码网站在线视频| 精品美女久久一二三| 日韩中文字墓| 天综合网欧美| 亚洲中文字幕网| 成年人黄色视频免费| 精品国产污一区二区三区| 97人人模人人爽人人| 伊人网免费视频| 1区2区3区中文字幕日韩| 中文字幕AV乱伦| 九九热五区| 亚洲最大网站av| 亚洲国产福利视频| 男人的天堂不卡一区二区| 亚洲影院小综合| 日韩性爱1级片视频| 97 九色| 久久久久久亚洲中文| 97操b| 五月色综合| 色婷婷丁香五月| 日韩激情毛片一级久久久| 久久久久性熟视频| 欧美精品久久久久久久久88| 天天欧美| 亚码激情| 欧美九九九| 人人操人人摸人人看人人干| 日本三级一区二区 在线| 青青五月天| 欧美亚洲日韩人妻在线观看| 操狠狠| 国产精品视频内谢女人| 97爱亚洲综合色| 亚洲色吧网| 口爆综合网| ?亚洲伊人伊成久久人综合网| 亚洲在饯| 超碰2017| 国产精品伦理| 久久性爱精品一区| 久久91视频| 都市久久精品激情亚洲| 99色网| 2017天天拍大香蕉| 91丝袜美女视频| 中文字幕一二三av| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 国产综合永久精品日韩鬼片| 久久精品国产亚洲AV清纯| 蜜臀久久99精品久久久久久婷婷| 高清孕妇孕交 交孕妇| 60秒免费视频| 久久九九综合| 日本高清加勒比| 中文字幕日韩电影人妻| 欧美黄色大香蕉一区二区| 丁香色五月 97干| 岛国不卡超碰护士AV在线播放| 日本熟妇自慰性高潮一区二区三区| 最新9久久久9免费视频| 国产怡红院| 欧美最婬乱婬爆婬性视频| 99色在线视频| 偷窥自拍A片| 超碰久热| 日本肏逼视频在线观看| 久久精品店| 97WW精品| 91人妻丝袜无码| 久久超碰、| 中文幕97| 无码人妻一区二区三区四区老鸭窝| 亚洲成人一二三区| 国产精品丝袜在线| 99这里都是精品| 久久综合av| 蜜桃在线观看一区二区三区| 亚洲国产成人高清在线| 日本三级久| 97青青操视频| 午夜a成v人电影| 狠狠操夜夜操蜜桃视频三区| 四虎免费看黄| 亚洲熟女乱综合一区二区三区| 久久久久久久久国产| 吖在线不卡一区二区国产剧情| 91社操逼| 中文字幕乱码人妻一区二区三区,99精品 | 日本精品免费一区二区三区四区| 999国产精品999| 立川理惠无码一区二区| 激情熟女12P| 精品国产丝袜一区二区三区乱码| 九九九久千久久激情蜜桃在线看| 蜜臀久久久99久久久久 | 精品少妇一区二区| 狠日欧美| 精品精品精品| 一区二区三区无卡视频在线观看| 国产精品内射婷婷一级二| 日本www操操操| 伊人一区二区三区| 人妻 中文 日韩| 91总综合网| 国产无码精品久久久久久| 天天色悠悠激情| 黄页av| 风流老熟女一区二区三区l| 久久久亚洲精品中文字幕人妻| 殴美性色a级欧美| 久久久久国产精品喷潮免费观看臀| 91性高朝久久久久久久久| 欧美内射少妇| 久久亚洲AV无码专区首页| 亚洲影视第一页| 日本丝袜人妻内射| 青青草原av| 久久精品人体| 亚洲黄片免费在线播放| 久久久久久久一级黄色打同平台| AV99热18这里只有精品| 中文激情网| 乱色老一区二区三区的观看方式 | 99re超碰| 91久久久视| 亚洲国男人的天堂| 日韩成人大片在线观看| 人人爱人人乐人人操| 欧洲亚洲天堂精品 | 一级毛片久久久久久久女人18| 亚洲吊色| 操逼www.| 18禁止看精品中文字幕| 国产精品乱人伊人网| 97鸡把在线视频| 国产 码在线成人网站| 亚洲日韩精品久久久久一区壹牛| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 91美女小视频| 天天做天天爱天天爽AV| 伊人久久大香线蕉无码| 欧美 亚洲 综合 制服 另类| 免费av在线播放二区| 色区久久| 久热精品在线国产| 亚洲影视第一页| 日本99一区二区| 久久免费老司机精品| 艹比视频国产精品| 大香蕉久| 综合色99| 欧美黄色大香蕉一区二区| 91操操操操| 国产一区在线观看无码AV| 舔人妻中文免费视频| 久久久久久久久久久六六| 九九色婷婷| 国产日韩欧美中文在线播放| 中国少妇XXXX做受| 秋霞操逼片| 在线v中文字幕一区二区三区| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 综合色区偷拍| 欧美人人天天网| 日韩熟女操逼| 中文激情网| 婷婷久草一区二区三区| 啊啊啊啊好疼视频| 丝袜剧情| 色一射色一射| 丰满少妇一区二区三区专区| 97爱b| 插插综合网天天影视网| 久操网址| 人妻丰满熟妇av无码区蜜桃| 精品一区二区三区蜜桃臀赵总 | 欧美性生活免费网| 一区二区激情国产熟女| 伊人一区二区三区| 亚洲熟女国产综合另类| 波多野结衣先锋影音| 亚洲欧美在线观看2021| 人人色人人射人人妻| 九九九影院| 日韩 成人 有码| 97视频在线观看免费高清| 亚洲成人激情小说视频| 91在线无码精品秘 软件| 91熟女综合| 欧美无圣光在线| 国产性爱欧美性爱在线| 激情综合 婷婷五月 红杏 | 黄色网址在线免费观看| 内射白嫩美女| 99热在线只有精品| 三级日韩一区二区三区| 97视频在线视频| WWW.操逼.COM| 天天日B夜夜干B时时操B| 久久久久久国产手机AV| 熟妇一区二区三区| 国产人妻精品一区二区三区秋霞| 九九九精品美女| 日韩av影片在线观看| 国产欧美黑人丰满在线| 91国产操逼视频| 国产一级αv免费看片| 国产精品探花色| 国产超碰AV在线精品| 伊人国产av| 亚洲古典另类欧美在线| 亚洲成人精品在线一区| 国产精品 午夜福利| 丰满的三级少妇欧美久久久| 久久久草草精品| 2018色综合天天操| 无码高清少妇久久| 久久久久女教师免费一区| 久久免费中文字幕在线观看| 五十路六十路七十路熟婆| 自偷自拍的亚洲视频| 丝袜视频网国产90| 丝袜美腿欧美| 黄色区免费观看中文字幕| 神马久久久久久| 99国产在线绯色一区| 91丝袜美女视频| 亚洲春色欧美激情自拍| 日韩午夜啪啪视频| 夜夜骑日日| 国产97在线视频| 日韩国语字幕| 日韩丝袜二区| 都市久久精品激情亚洲| 97超碰亚洲| 成年无码动漫av片无尽在线| www.久久| 少妇蹲下露出大唇5| 亚洲十八禁止| 日韩久久艹| 日本美女性生活久久久久久久| 日韩丝袜二区| 日本成人A片免费看| 屁股久久久久久| 日韩欧美久久婷婷网站| 国产乱码精品久久久久久| 一级A片女人高潮叫床| 一级黄色视频网| 亚洲限制级| 在线视频 亚洲精品| 色眯眯射| 大香蕉伊人久久| 欧美宗合色| 99蜜桃臀亚洲成人在线观看| 日韩熟女精品无码专区一区二区| 在线另类| 天堂种子在线www网资源| 99老司机精品视频在线观看| 十八禁的黄污污免费网站| 99无码狠狠久久| 绯色AV粉色AV蜜臀AV| 在线观看一级α片刺激高潮视频| 污电影在线观看| 欧美 亚洲 综合 制服| 久艾草在线精品视频在线观看| 大学生美女口爆| 怡春院久久| 欧美黑人168页欧美黑人167| 亚洲美女色图| 91AV天美在线视频| 美女91色黄18| 五月天九九日国产精品一区二区三区| 一区二区亚州激情久婷婷欧美| 久湿久久| 9丨久久九九九| 亚洲AV麻豆Aⅴ无码电影一| 伊人黄色片| 久久性爱城| 亚洲丝袜色图| 精品人妻久久久久一区二区三区| 91综合站| 九九无码视频| 国产视频一区二区在线| 色综合潮| 亚州五月| 99re免费视频精品全部| 国产亚州日韩欧美看片| 怡红院视频在线| 日韩天天本| 成人26uuu| 色爱综合网| 久久激情视频| 久操精品| 强奸a片网| 加勒比少妇AV婷婷六月天超碰超碰| 性九九九九九九| 久操网址| 精品国产99| 国产日韩精品suv| 91啪啪视频| 九一精品牛牛一区二区| 欧美姓爱综合网| 大香蕉520| 97综合久第一页| 久久美女国产| 日本精品免费一区二区三区四区| 精品人妻一区二区免费蜜桃视频| 亚洲最大的综合性av| 97网址www| 黄片www视频免费| 亚洲中文制服诱惑| 一区二区视频在看| 日韩精品中文字幕二区| 亚洲性刺激| 成人自拍三级在线观看| 香一区二区三区| 日韩人妻制服丝袜av| 亚州色图欧美| 国产精品美女久久久久AⅤ国产馆| 爱欲AV| 午夜福利无毒不卡| 99久热精品99re6热| 青娱乐国产精品| 俞拍自拍| 日本久操视频| 水滴偷拍| xxx0国产在线播放| 天天日日本| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 超碰69| 色爱国产| 中文字幕人成乱码熟女香港| 亚洲视频二区| 超碰在线看| 天天躁日日躁AAAAXXXX国产| 极品五月天噜噜| 91精品久久久久五月天精品| 99只有精品| 97超碰9| 91美女视频在线| 欧美综合自拍亚洲综合图| 91天堂丝袜美腿| 日韩pv中文| 日本高清_区二区三区| 夜夜嗨一区二区三区直播内容| 天天综合~91入口| 日韩综合无码一区久久92| 99久久com免费视频′| 黄色激情电影在线观看| 青青草久草AV| 午夜丁香| 最新中文字幕精品在线| 麻豆伊人网| 亚洲无线码欧洲精品区别| 另类欧美| 啊啊啊不要啊啊受不了了视频在线 | 国产精品在线免费| 超碰97资源网亚洲| 色999五月色| 国产成人自拍视频在线| 黄色视频特级毛片| 亚洲熟妇A V黑人| 大香蕉99re| 夜夜黄| 日韩无码服务区| 人妻人久久精品中文字幕| 综合九九| 久久久久9999妇女| 日本中文字幕一区| a人欧美综合天堂麻豆| 91+欧美| 激情文学 国产一二三aV| 天美国产精品| 操人妻少妇中文| 国产免费大片| 五月丁香色综合| 中文字幕老熟妇黄色视频| 开心五月婷婷| 夜夜爽妓女| 免费网色网站|