欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

Trie樹的實現(xiàn)

Trie樹的實現(xiàn) Trie樹是保存字符串公共前綴信息的數(shù)據(jù)結(jié)構(gòu),可用于字符串多模匹配普通的非壓縮Trie樹實現(xiàn)如下第一種實現(xiàn):每個分支節(jié)點使用map標準庫容器保存前綴索引#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é)點類型 { enum NodeType { DATANODE, BRANCHNODE } type_flag; //節(jié)點類型標志分支節(jié)點或存放關(guān)鍵字的葉節(jié)點 union { string key_in_trie; //葉節(jié)點關(guān)鍵字 mapchar, TrieTreeNode* sub_ptr; //分支節(jié)點的分支字符和對應(yīng)的指向分支字符對應(yīng)的子節(jié)點的指針之間的映射關(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é)點 }; 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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } cout 刪除字符串 bluejay endl; if (test_obj.deleteElem(bluejay)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; string mod abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789; const int L 9; // 隨機字符串最大長度 const int r 2; //相同長度重復(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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 測試字符串有共同前綴不相等情形 endl; for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } return 0; }第二種實現(xiàn)分支節(jié)點使用數(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é)點類型 { enum NodeType { DATANODE, BRANCHNODE } type_flag; //節(jié)點類型標志分支節(jié)點或存放關(guān)鍵字的葉節(jié)點 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é)點關(guān)鍵字 BranchNode branch_ptr; //分支節(jié)點的分支字符和對應(yīng)的指向分支字符對應(yīng)的子節(jié)點的指針之間的映射關(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é)點 }; 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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } cout 刪除字符串 bluejay endl; if (test_obj.deleteElem(bluejay)) { cout 刪除成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; string mod abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789; const int L 9; // 隨機字符串最大長度 const int r 2; //相同長度重復(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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 測試字符串有共同前綴不相等情形 endl; for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前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 當前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } return 0; }每種實現(xiàn)應(yīng)該都能適用于空串的插入刪除自己沒有驗證過感興趣可自行驗證
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九精品9| 9|人妻人人操| 91a片爽| 九玖视频这里只有精品| 5月丁香综合网| 色99xx| 精品网站99| 色婷婷丁香五月| 久久9视频欧美| 久久综合九九| 五月天深爱激情网| 激情综合在线观看| 久久人妻视频| 中文字幕永久在线| 久久这里有精品视频| 男人的天堂婷婷色五月| 99碰碰视频| 色五月婷婷基地| 99热成人| 亚洲成人一区| 久久99热精品a片在线观看| 4399无码视频| 另类图片激情五月| 思思色综合网站| 婷婷丁香综合网| 婷婷天天日婷婷| 国产欧美婷婷五月| 成年人夜夜喷水| 99A片| 五月天婷婷小说| 99热精品免费| AV免费在线网站| 婷婷五月天激情基地| 在线成人国产| 一起草AV| 97操碰视频| 天天综合天综合| 99热日本| 五月婷婷综合久久| 婷婷久久婷婷| 日韩AC在线免费观看| 六月丁香网| 九九Av| 极品另类| 这里只有精品9| 手机旧版看人妻1025| 激情五月婷| 久久99操| 综合色色网| 青草青青草| 九九激情综合| 一级性感黄色内射视频| 激情 婷婷| 色视频2025| 五月丁香六月婷| 先锋资源婷婷| 丁香婷婷激情四射五月| 久久码久久无清| 色色a| 婷婷丁香激情综合色情| 久青草影院| 综合激情肏逼网| 生活片五区| 探花搜索结果 - 黄上黄| 超碰人人摸AV| 婷婷丁香五月色偷偷| 久久婷婷六月综合综合| 国产 码在线成人网站| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 婷婷她六月天| 91九色大屁股| 色五月综合在线| www.99视频| 色激情五月天| 人人干av| 97干在线视频| 另类小说五月天| 色婷婷激情| 玖玖婷婷免费| 欧美啪啪网| 97久久久免费福利网址| 日本美女上人| 亚洲 在线 性爱| 色婷婷色五月另类综合| 五月天激情综合首页| 热热久久精品视频| 97香蕉碰碰人妻国产欧美| 日本三级中国三级99人妇网站| 日韩a热| 亚洲操B| 婷婷五月六月丁香| 色久综合天天做视频| 色色婷婷色色| 翔田千里 50岁 无码| 大香av| 秋霞网在线免费基地五月婷婷丁香| 少妇性BBB搡BBB爽爽爽视頻| 丁香五月五月婷婷欧美大香蕉| 丁香综合久久| 亚洲AV免费在线| 丁香婷婷激情六月五月开心| 综合婷婷| 久99视频在线观看| 橾逼网| 色综合久久88色综合天天99| 成人做爰A片免费看视频| 久久99热这里只有精品| 五月天婷婷色色网| 欧美成人性爱网| 天天爱天天爽| 日韩成人精品中文字幕| 99操逼| 激情5月天天天| 天天成人丁香美女AV| 另类 在线| 丁香九月久久| 日本久久精品18| 99热精品一区| 欧美超级视频97| 亚洲精品99| 九九精彩久久| 久久日曰| 亚洲视频操| 秋霞免费三级片| 这里只有精彩亚洲视频推荐| 国产综合激情五月久久| 思思热天天看| 91精品丝袜久久久久久| 美欧日韩国产成人在战| 久久色五月天| 99网址在线看| 六月色播| 婷婷5月久久综合网站| 玖玖综合色| 婷婷欧美| 最新色色五月天| 先锋资源婷婷| 大香蕉婷婷久久| 99九九玖玖| AA片在线观看视频在线播放| 夜夜骑日日操| 草综合14| 国产一二区爆乳_1国产日韩一区二区三-成人AV| 免费看欧美成人A片无码| 5月婷婷综合| 五月天婷婷无码视频| 狠狠色综合精品视频在线| 无码少妇高潮喷水A片免费| 色高清无码视频| 丁香五月网址| 激情文学久久| 97人妻人人| 天天狠狠色噜噜| 伊人久久大香线蕉av最新| 色吧99| 激情综合自拍五月婷婷色五月| 99操久久| 激情婷婷综合| 97超级碰人人| 色五月亚洲开心网| 亚洲天天综合| 精品亚洲国产成AV人片传媒| 激情综合色网| 蜜臀av无码久久久久久久久 | 色色色色热| 天天日,天天干,天天操| 国产五月丁香在线| 第四色色六月色综合| 国产日日操夜夜操的肉棒视频| 怡红院视频| 91爱啪啪| 日韩丰满少妇无码内射| 久久婷五月综合色| 亚洲精品V天堂中文字幕| 99这里只有免费的小视频在线观看| 99色色网| 538在线精品| 久99精品视频| 97色色网| 热久久视频99| 麻豆123区| 大地资源色婷婷视频在线| www.seqingwuyuetian| 五月天婷婷影院影院观看| 婷婷五月丁香综合桃花色网| 日本欧美成人片AAAA| 可以免费看av网站| 免费观看2018www黄色操逼网站| 五月婷婷啪啪| 异能之下短剧免费观看全集| 亚洲欧洲美女在线观| 色色国产| 六月色五月天天婷婷| 久操大屁股女人av| 国产精产国品一二三在观看| 丁香五月天堂网| 天天久久人人| 五月婷婷日本| 五月丁香本色在线观看| 亚洲热视频在线| 先锋av性爱成人电影| 久热中文字幕在线线观看| 碰碰碰97国产| 噜噜五月天综合| 丁香婷婷久久老熟女综合网| 久久黄A片| 91精品激情9| 激情av在线| 五月丁香六月日逼| 九九99免费视频| 7777国产盗摄农村女人| 五月天播播| 婷婷精品综合| 国产丁香五月天婷婷| 五月婷婷六月丁香玖玖玫瑰91| 91色久| 色色网站免费| 开心五月婷婷激情网| 久超超碰| 亚洲黄色影视| 五月天婷婷影院| 人人看人人草人人摸| 亚洲AV中文在线| 激情五月天。| 五月婷婷之综合激情| 色久九| 九九久久免费视频44| 五月六月激情| 丁香五月天堂婷婷| 粉嫩AV久久一区二区三区| 色99色| 婷婷五月视频| 99热这里只有精品搜| 丁香五月婷婷深爱综合激情| 中文字幕人妻在线| 國語久久婷| 婷婷五月丁香色色| 91视频一起草| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 色99在线| 免费观看18视频网站| 超碰人人超碰| 99色网站| 久久99久久99久久99人受| 热久久99热欧美国产亚洲| 怡红院院在线导航网| 草榴视频黄色网| 99热国产| 中文字幕乱码亚洲精品一区| 日韩AV免费看| 六月婷婷日| 99se丁香| 丁香九月综合在线| 99碰网站| 玖玖视频福利| 激情综合五月.....| 丁香五月天欧洲在线| 99网址在线看| 成人va在线观看视频| 亚洲成人综合在线| 亚洲精品乱码久久久久99| 久久只有精| 五月丁香六月色婷| 六月丁香深深爱| 精品在线| 亚洲、热| 激情五月丁香亭亭| 国产熟女一区二区三区五月婷| 久草热在线视频| 五月色天情| 女高怪谈在线观看| 午夜免费试看| 四川BBB搡BBB搡多人乱亂| 日日夜夜狠狠| 伊人青涩网| 亚洲精品网址| 丁香五月婷婷久久综合激情网| 色愛综合网| 日韩抽插操逼| 激情综合五月婷婷六月丁香| 91碰碰| 思思热视频在线| 97色婷婷成人综合在线观看| 99热婷婷| av超碰在线| 婷婷狠狠狠爱| 亚洲午夜精品久久久久久人妖| 久久99这里| 五月丁香啪啪综合网| wwwwww.色| 五月天播播| 久久三级视频| 日本久久性| 超碰99资源站| 99久久a线观| 日日噜狠狠色综合久久| 天天干天天做| 99爱视频| 国产一区二区三区影院| 成人短视频在线免费观看| 婷婷黄色| 少妇达人正片在线播放_ikun_福利吧| www.99视频| 国产精品久久久久久久久久| a九九热www| 五月六月激情婷婷| 五月天六月色| 五月综合激情久久| 99热新网址| 极品人妻VIDEOSSS人妻| 97人人草| 色色五月天com| 99久久综合| 中文不卡一二区| 99欧州偷拍视频| 九九日伊人| 色色色婷婷五月| 丁香五月网在线观看| 日本一级特黄大片AAAAA级| 五月婷婷色| 99精品高潮| 色情五月天首页| 超碰在线免费| 草榴视频网| 噜噜噜色噜噜| 中文字幕无码人妻少妇免费视频| 色情综合网| 色色色免费视频| 26uuu欧美| 超碰爱爱爱| 色亭亭五月天网扯| 大香蕉av在线| 丁香亭亭久久| 99视频在线精品| 亚洲爱婷婷| 思思久久99热只有频精品66| 99视频| 9色视频在线| 停停五月丁香| 色情成人五月天| 综合五月亭亭9| 中文字幕av久久爽一区| 97在线刺激| 人人视频人人干人人做| 亚洲国产成人AV在线| 丁香丁香激情网| 97干在线视频| 99婷婷| 五月丁香色| 激情久久 婷婷| 激情五月丁香六月婷婷| 久9热插入| 午夜不卡成人一区二区| www,婷婷,com| 九色视频91| www.91在线观看| 色婷婷狠狠久久YY| 99在线免费视频| 九九99男女视频在线观看| 丁香婷婷在线| 日韩AV中文字幕在线| 无码网站视频| 99啪在线| 91精品国产91久久久久青草| 综合激情五月丁香| 色婷婷小说| 日韩免费乱轮网站| 玩熟女五十AV一二三区| 99这里只有精彩视频| avh片在线观看| 天天干-天天日| 中字幕视频在线永久在线观看免费| 夜夜骑操AV| 精品久久99| 99热久久最新地址| 永久天堂日本| 婷婷五月天奸女| 日本操碰碰| 天天色综网| 五月天激情播播网| 亚洲成人网址在线观看| 婷婷综合精品| 五月丁香婷婷婷婷综合网| 激情综合网激情五月婷婷| 五月四色婷婷| 婷婷五月精品中文字幕| 色播综合| 极品人妻VideOssS人妻| 成人色五月天婷婷| 大香蕉丁香五月| 久久婷婷五月| 成人片久久网站| 五月综合人妻| 五月丁香婷婷福利| 日韩AV无码影片| 五月婷在线| 麻豆AV一区二区三区| 久色网五月| 中文字幕性爱视频| 色综合天天| 五月丁香激情综合网| 亚洲色激婷| 久爱综合| 婷婷的99视频网站| 五月久久丁香| WWW.夜夜操.com| 99热8在线| 婷婷综合亚洲| 精品皮股午夜AV| 91.com男女操| 北条麻妃伊人| 伊人激情| 91碰视频| 色色色色av色色色色| 人妻综合网| 日韩AV无码影片| 色五月天影视| 五月婷婷第四色| 婷婷精品免费久久| 九月久久婷婷| Aaa久久| 超碰超碰在线| 伊人婷婷五月天| 狠狠另类视频| 9色在线| 9久精品| 色婷婷五月天激情久久| 五月婷婷精品视频| 五月婷婷少妇之| 久久久久久久久久久97| 99人人爽| 色爆五月| 丁香六月婷婷| 六月婷婷中文字幕| 日韩婷婷| 伊人网碰碰| www.俺去也com| 精品人妻伦| 97人人爱人人操| 丁香婷在线| 日木狠狠干| www.综合久久.com| 久热9热| 三级黄色大片视频| 色一情一乱一乱一区91Av| 99这里有精品| 丁五月激情视频免费| 99愛国产| 丁香五月婷中字幕| 久久er99| 思思热精品在线观看| 襙比视频| 精品久久久久久久人妻| 日本在线噜噜| 激情小说视频图片网| 天天干天天干天天干天天干天天干天天 | 久久停停超碰| AA久久| 另类视屏| 婷婷97碰碰| 91互操| 99热99精品| 91无码高清| 99日在线观看视频| 婷婷月综合| 综合AV在线| WWW.婷婷五月天.COM| 亚洲AV第二区国产精品| 人妻激情综合| 影音先锋女人av鲁色资源网小说免费| 日日色五月天| 99热精品免费在线观看| 狠狠五月天| 99色热视频在线| 人妻久久久| 99碰碰碰| 久久这里只有精品99| 婷婷五月天狠狠| 日韩视频99| 96丁香六月婷婷蜜桃综合久久| 天天综合网在线| 偷拍91九色| 色色五月丁香婷婷| 日本三级中国三级99人妇网站| 色五月婷婷五月天| 1024AV视频| 超碰在线94| 狠狠狠狠狠狠色| 色播六月| 天天摸天天高潮天天爽| 色5月丁香婷婷| 五月婷婷色播| 桃色五月天| www.久99| 色综合com| 亚洲乱码日产精品BD| 91日本在线观看| 99色中文| 99er6热在线观看精品6| 一本婷婷丁香久久| 直接看的AV| 婷婷综合五月天亚洲综合| 婷婷综合五月| 五月婷啪啪| 亚洲六月婷婷| 丁香婷婷免费| 伊人五月丁香| 五月综合视频| 欧美日韩精品一区二区三区钱| 91嫩草久久| 5月婷婷视频网站综合| 色五月丁香婷婷综合| 日韩五月丁香| 日韩成人无码| 96精品久久久久久久久| 久热这里精品免费| 超碰人人干| 亚洲AV影片在线观看| 五月天婷婷激情在线色图| 婷婷99狠狠| 婷婷五月骚厕所| 91丨九色丨国产打屁股| 亚洲激情Av| 婷婷五月色| 天天操天天草天天草天天| 99久在线视频| 久操乱| 激情久久五月天| 天天操夜夜肏| 91九九| 金品在线视频99| 激情丰满熟妇五月| 五月大香蕉| 婷婷综合伊人| 久热这里只有精品66| 91啪啪视频| 激情五月天色色色| 五月婷婷伊人在线| 超pen个人视频97| 九九亚洲视频| 五月丁香久久网| 九九九AAA热视频| 日韩狠狠色婷婷| 色婷丁香| 99狠狠色| 99热99极品观看| 九色激情| 婷婷五月美女直播| 人人摸人人干| 亚洲婷婷成人五月天| 97人人草| 亚洲色情免费网| 亚洲午夜电影| 丁香婷婷超碰 | 女人高潮内射99精品| 色色五月天网站| 婷婷五月天堂| 丁香五月综合婷婷| 婷婷性色| 99热99| 久久这里只| 久久成人亚洲欧美电影| 久久久久久久久久人妻| 久久国产成人9999久久久久| 五月天伊人手机在线播放AV| 亚洲99精品九九在线| 婷婷丁香五另类网站| 日韩另类| 天天日人人| 五月天精品| 99热思思在线观看| 亚洲黄网AV| 六月婷婷色宗合| 色五月丁香91| 五月丁香六月婷婷在线观看| 亚洲人人艹| 婷婷五月激情五月激情| 四季AV综合网| 婷婷四色五月| 久热这里只有精品在线观看| 天天碰夜夜操| 色五月色五天免费视频| 日本久久视频| 99热综合| 79色色色色| 日韩精品99久久| 日本美女上人| 婷婷五月黄色激情在线| 超碰狠狠干99| 五月成人网站| 婷婷五月综合在线| 亚洲精品国产熟女久久久| 五月婷婷综合色啪首页| 国产在线自| 亚洲成人免费在线| 色婷婷丁香五月丁香| 五月伊人91| 九色啦蜜臀| 97干在线| www.ywav| 久久九区| 综合图区激情| 色综合久久88色综合天天99| 热久久这里只有精品| 丁香五月欧美激情| 激情综合网丁香| 日本eVa一区=区视频| 丁香六月色婷婷| www.99在线| 射婷婷中文字幕| 开心激情婷婷| 国产五月天激情小说| 久久码久久无清| 色五月AV| 色五月丁香婷婷久草| 青青草a在线| 极品少妇婷婷五月| 五月丁香综合激情| 久久99网| 亚洲五月丁| 久久9热| 亚洲爆乳无码精品AAA片蜜桃| 99热国内精品| 婷婷97色| 婷婷丁香18| 亚洲五月花| 亚洲激情网站无码| 亚洲第一成人无码A片| 色135综合网| 人妻AV在线观看| 天天射综合网夜夜操| 狠狠爱婷婷爱| 玖玖九九9999在线观看视频精品| 激情综合五月天| 五月天天视频| 激情综合亚洲色婷婷五月| 狠狠丁香| 少妇婷婷五月天| 国产午夜精品AV一区二区麻豆| 97人人搞| 五月丁香综合激情网| 五月深爱婷婷| 婷婷五月天堂网| 五月叮香啪| 伊人丁香在线| av大片在线| 婷婷香蕉| 激情五月天色色网| 丁香婷婷九月| 超碰成人av| 色婷婷亚洲精品天天综| 五月综合六月婷婷| 热99久久这里只有精品| xxxx五月激情| 五月激情丁香五月| WWW久久久| 99久re热| 99亚洲视频| 9 大屁股在线视频精品| 丝雨一区二区| 丁香五月 性爱| 国产精产国品一二三在观看 | 99re66热这里只有精品| 国产精品久久久久久白浆色欲| 五月丁香成年黄色| 久久久五月婷婷| 久久九九九九| 婷婷五月激情五月丁香五月| 97婷婷丁香五月天激情图片| 久久女人九九| 9超碰在线| 99婷婷五月天激情| 九九精彩久久| 久久九区| 激情五月深爱五月| 蜜乳.comcom| caopeng超碰| 综合激情网五月激情| 色99亚洲| 日日肏天天操| www.五月天婷婷| 综合伊人久久| 九九人人操| 九九热精品| 婷婷在线视频| 美女久久天堂| 丁香九月激情久久| 久久婷婷色情7777网站| 亭亭玉立国色天香| 丁香五月激情综合网激情五月| 奸逼视频| 天天操天天操天天操天天操天天操| 婷婷狠狠色| 天天色图| 成人午夜视频精品一区| 精品日本视频444| 欧美啪啪网| 97人人干人人操| 色情五月丁香婷婷网| 五月天婷婷伊人| 婷婷五月av| 欧美日韩99| 国产精品色情AAAAA片软件| 67久久| 九九热99视频在线| 99re思思精品视频在线观看| 久热视频这里只有精品| 亚洲欧洲国产精品| 国产全是老熟女太爽了| 亚洲av无码影院| 99自拍网| 国产在线另类五月婷婷| 26UUU欧美激情一区二区| 婷婷色导航| 99啪啪骑| 激情涩涩网| 天天色宗合| 久久五月婷| 久操乱| 色5月婷婷| 婷婷丁香人妻久久在线观看| 中文字幕在线免费| 色和综合网| 玖玖爱资源站| 丁香五月天天高清在线| 99这里都是精品6| 波多婷婷久久| 日本女天天爽| 天天噜| 国产婷婷婷| 丁香五月首页| 六月丁香社区| 中文字幕网伦射乱中文| 成人免费在线电影| 99er视频在线| 伊人久久艹| 久久久久网站| 色色网站免费| 日韩av手机在线观看| 超碰免费人妻| 婷婷五月情| αv中文字幕在线观| 另类专区在线| 丁香婷婷影院| 色婷婷成人色网| 狠狠香婷婷五月| 色呦呦美女| 日韩AV在线电影| 天天做天天爱天天日| 七七九色| 狠狠爱夜夜| 五月天激情啪啪| 少妇人妻丰满做爰XXX| 色色色999| 日日干日日| 九一九九黄色| 欧美激情-区二区三区| 五月天婷婷基地| 久久HD| 九九色播五月丁香| 综合色视频| 国产精品日韩十五区| 51精品国自产在线| 亚洲色激婷| 丁香六月婷婷久久综合| 91操碰| 9l视频自拍9l九色成人| 九九九九综合| 丁香婷婷五月色成人网站| 超碰99热精品| 色婷婷电影网| 日本在线99| 六月丁香婷婷综合狠狠爱夜夜爱| 婷婷性爱视频在线| 五月丁香激情综合久久| 天堂亚洲 在线| 免费在线观看欧美激情xx小视频| 久久五月天 91| 日韩五月丁香| 日韩高清久久| 五月伊人网| 丁香五月婷婷基地| 久热无码| 综合五月天亚洲婷婷| 99热这里是精品| 五月天色婷好好| 国产精品扒开腿做爽爽爽A片唱戏 亚洲爆乳无码精品AAA片蜜桃 | 激情综合丁香六| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | 丁香五月婷婷久久久| 久久机热/这里只有精品| 婷婷五月激情五月丁香五月| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 中文精品在| 丁香六月综合激情| 亚洲激情丁香五月天色| 人妻丰满精品一区二区A片| 天天成人综合| 欧美黄色一级| 久久久久婷| 激情五月综合| 日本一级淫| 五月丁香在线看| 铁牛TV人妻| 欧美激情综合| 怡红院院久久| 九九久久高清| 丁香五月激情综合| 激情综合网亚洲色图| 久久综合香蕉国产国产蜜臀AV| 激情婷婷五月天| 男女99免费视频| 老妇六区| 欧美精产国品一二三区| 成人片久久网站| 91九九九九九九| 色五月婷婷在线| 国内裸舞二区| 色婷婷综合在线| 婷婷五月天亚洲| 天天操天天谢| 97人妻碰碰碰久久香蕉| 97色色网| 日韩淑女人妻luan伦激情精品一区二| 五月天天丁香婷婷| 情色婷婷五月天| 亚洲色欲欧美一区二区三区| 久久 中文 日本| 久久香蕉影院| 五月婷婷草| 深爱激情九九五月天| 日韩五月婷婷| 色婷婷成人做爰A片免费看网站 | bukadeavzaixian| 色五月av| 五月婷婷69| 亚州激情网| 色五月大香蕉婷婷| 色狠狠色噜噜AV天堂五区 | 婷婷97狠狠干| 色综合香蕉| 成人国产欧美大片一区| 婷婷久久五月丁香| 婷婷色情五月| 99热久久这里只有精品| 六月丁香婷婷综合狠狠爱夜夜爱| 婷婷99视频在线| 五月天大香蕉| 99色精品| 婷婷激情啪啪| 天天操夜夜夜夜爽| 任你擦免费视频| 色色9 9| 久久丁香五月婷婷| 婷婷五月综激情| 久久五月综合| 天天摸日日舔狠狠添婷婷婷 | 人人干女人| 日操夜撸| 天天天添天天操| 丁香五月婷婷六月婷婷| 成人在线日韩欧美| 丁香五月婷婷久久久| 99ree6| 欧美色色色| 九九99精品视频在线观看| 天天摸天天舔| 俺去也五月天婷婷| 亚洲婷婷激情888精品久| 青青夜夜狠狠夜夜狠狠| 成人AV在线电影| 欧美在线看| 天天干,天天操,天天射| 色99超碰| 婷婷五月天首页激情| 日韩日比视频在线| 69凹凸成人综合网| 久久精品99国产精品日本| 日韩九九| 99这里只有精品|v| 五月激情婷婷丁香| 精品婷婷| 91色在线/日韩| 人人摸人人操人人爽| 98永久精品| 91九色欧美| 五月天激情综合| 先锋资源91| 九九精品综合| 婷久久| 五月婷在线| 99热在线观看免费精品| 激情五月综合| 图片区 小说区 区 亚洲五月| 婷婷色导航| 大地资源色婷婷视频在线| 五月丁香久久| 九九99九九精品免费| ..真实国产乱子伦毛片| 久草免费福利视频| 伊人激情网| 亚洲成人中心| 六月丁香久久| 色色成人網| 五月丁香六月婷婷色| AV国产有码| 亚洲成人噜噜| 久9无码视频| 久热无码| 9久热精品在线视频| 久久XX日本综合| 综合www色| 久久婷婷网站| 丁香婷婷五月天色综合| 狠狠色 综合色区| 色爱亚洲| 91婷婷在线| 色99视频| 婷婷六久久| AV色婷婷| 六月婷婷五月丁香首页| 婷婷深爱五月丁香网| 婷婷伊人网| 超碰人人在线| 日本欧美成人片AAAA| 久9综合| 91色逼| 久久这里只有精品07 | 婷婷综合性爱网| 久久天堂色| 婷婷丁香五月亚洲欧美| 天天色天天噜| 麻豆雪千夏| 欧美成人精品A片免费一区99| 久久99大| 婷综合| 另类国产综合| 大香蕉久久久| 成人无码精品1区2区3区免费看| 人人操人| 五月丁香六月激情综合网 | 91尤物九色在线| 激情99。| 99熟女啪啪视频| 婷婷久久五月天| 久草五月婷| 99视频地址| 五月久久婷婷成人网 | 久久午夜丁香| VA婷婷| 这里只有精品免费| 久99视频| 亚洲色婷婷五月天| 婷婷六月丁香色| 免费视频无码| 不卡在线视频| 五月丁香| 天天插天天插| 九九婷婷激情综合网| 九九色影院| 色婷婷亚洲六月婷婷中文字幕| 五月丁香激情综合网| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 男女激情久久| 99小精品| 美女激情综合| 久草 tingting| 久久久er热| 日韩av在线电影| 9热成人在线视频| 丁香六月婷婷激情综合| 婷色五月天| 国产精品成av人在线视午夜片| 99综合视频在线| 67194中文字幕| 国产精品24r| 色综合色综合色综合高潮| 五月天丁香网| 五月丁香婷草| 丁香久久久| 国产美女无遮挡裸体毛片A片| 超碰在线人妻| 色情五月婷| 美腿丝袜AV天堂网| 99久久久| yw国产AV| 玖玖福利视频资源| 91九色精品熟女内射| 色综合色五月| 大香蕉久久婷婷| 中文av在线观看| 五月婷婷激情四月| 五月丁香婷婷五月色| 婷婷丁香五月久久| 五月丁香| 蜘蛛女免费观看完整版高清电影| 大香蕉综合| 超碰超碰在线| 在线播放中文字幕| AV在线免费播放| 色女人久久| 五月丁香婷婷综合视频| 亚洲美女网Va| WWW久| 色天五月天在线观看视频| www.爱婷婷.com| 天天日本夜夜谢| 丁香婷婷五月人体| 婷婷六月综合激情| 99热99| 色婷另类| 亚洲欧美成人在线| 色色五月婷| 五月色综合网欧美网| 97色色视频| 婷婷激情五月天网站| 国产这里只有精品| 99热这里只有精品2016| 日本色色色色色色色色一色二色| 天堂五月婷婷| 99综合97| 色五月丁香婷婷| 99熟女啪啪视频| 亚洲精品国产成人AV在线| 久久婷婷色| 99无码视频| 亚洲中文乱字字幕线在永久| 中文字幕人妻一区二区| 99这里| 欧美久久婷婷| 婷婷九月色| 色婷婷六月精品| 伊人激情网| 综合99久久| 婷婷第六色| 激情综合网婷婷五夜| 99色色色色| 99毛片| 婷婷成人五月天成人文学| 欧洲亚洲免费视频9| 丁香六月婷婷操逼网| 99爱在线免费视频| 亚洲综合99| 日曰躁夜夜躁2026| 国产午夜一区二区三区| 另类伊人婷婷| 性做久久久久久久免费看| 在线可以看的av网址| 91久久综合亚洲噜噜成人在线 | 色情久久久| 精品亚洲国产成AV人片传媒| 欧美性丁香色色五月天干干| 久色五月婷婷综合| 4399欧美另类视频| 爱射综合| 婷婷综合激情| 九九热视频首页/这里只有精品| 丁香五月色激情| 99在线精品观看99| 久久婷婷在线| 丁香六月色婷婷| 丁香五月天久久| www.精品99| 国产26uuu视频| 99九九玖玖| 综合aV在线| 婷婷五月色综合| 五月丁激情| 激情五月天啪啪| 被强行糟蹋的女人A片| 久操97| 色婷婷成人在线| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 9久久婷婷国产综合精品性色| 农村熟妇高潮精品A片| 五月丁香六月婷婷啪啪| 亚洲综合网激情小说| 九九十99视频| 七月丁香婷婷 色色| 五月婷婷黄色| 婷婷五月天久久久| 六月婷婷无码观看| 精品久久久999| 麻豆忘忧草午夜| 99综合| 成人亚洲精品| 欧美色色色色色| 色五月天天| 99色在线| 亚洲超级碰| 天堂在线伊久| 九九热精品在线| 黄色三级日本| 天天日综合| 五月丁香啪啪综合网| 天天综合激情| 色婷婷丁香综合中文字幕| 色五月色情| 操操操B| 99精品无码| 深爱五月激情五月| 久99久精品视频| 99热国产免费| 伊人五月丁香| 婷婷激情欧美| 五月色婷婷综合丁香精品无遮挡| 婷婷色中文字幕| BT综合在线视频观看| 超碰伊人碰婷婷五月| 99热在线播放精品| Www.sesese丁香| 九九亚洲天堂| 精品无码久久久久久久久| 久久99热这里只有精品| 成人av在线电影| 亭亭玉月丁香| 韩国激情五月天综合网| 婷婷开心久久| 五月婷婷激情四月| 欧美久久婷婷| 日本 @ va 免费| 亚洲性色XXXXX| 26uuu亚洲欧美另类| 五月天婷婷在线观看精品男人| 色色综合色视频| 天天综合情| 激情色中文| 综合五月草| 在线国产精品色| 性色播| 99热日韩这里只有精品| 亚洲avjiujiur91| 热久久成人| 激情婷婷丁香色情五月天| 色五月丁香激情视频| 丁香六月婷婷综合网| 国产淫熟妇| 99久久97久久欧美综合网| 97在线精品| 一区二区乱视频码| 婷婷激情综合色五月久久91| 色色色色色日韩午夜激情| 婷婷五月丁香综合瑟瑟| 六月丁香成人| 五月丁香色综合| 色哟哟精品| 日韩啪啪网| 99热这里只有精品手机在线观看| 婷久看人爽| 婷婷五月天成人综合网| 思思热精品在线视频| 五月天伊人| 九九热免费| 国产精产国品一二三在观看| 91|疯狂丨高潮丨对白| 日韩在线视频9色| 久久五月婷婷视频| 原琪琪色影院| 久久这里在精品视频| 深爱丁香激情| 色亭亭五月天丁香综合AV - 百度 - 百度| 婷婷欧美| 婷婷久久五月| 91久久久久| 丁香狠狠色婷婷| 一夜福利不卡| 色五月婷婷内射| 蜜臀av粉嫩av懂色av| 婷婷五月天久久久| 日韩久久系列| 啪啪 综合网| 亚洲视频在线观看99| 婷婷丁香色情| 大香蕉综合| 不卡的AV网站| 日本视频欧美观看免费| 亚洲婷婷视频| av在线色五月丁香婷区久| 五月天成人网在线观看| 一本久久亚洲五月婷婷| 操日视频| 久久婷婷五月草视频在线播放| 亚洲精品五月| 欧美丁香五月97色| 成人午夜天| 中文字幕av亚洲| 五月天婷五月天综合网在线观| 婷婷亚洲欧美丁香五月| 亚洲操b| 亚洲无码影音| 99超级碰免费视频| 天天色激情| 六月婷婷综合| 六月婷婷操逼| 操笔无码| www.五月天婷婷| 亚洲无AV在线中文字幕| 综合狠狠干| 色五月婷激情| 日日干天天| 亚洲4区国产欧美| 六月亚洲| 日本婷久久| 五月天丁香婷婷久久九| 国产亚洲在线观看| 欧美丁香婷婷五月天| 国产99久久久国产精品免费看| 色九九七七| 五月天艹天天| 日本五月婷婷| 久久免费试看120秒| 日韩激情婷婷五月天| www.99热在线观看| 一起草日本| 丁香六月婷婷高清| 五月天婷婷久久| 久久婷婷五月综合一| 内射激情在线| 五月丁香六月婷婷啪啪| 狠狠爱婷婷| 成人五月天视频播放| 国产亚洲精品AAAA片APP| 99热这里都是精品| 欧美25p| 五月伊人91| 99人这里只有精品| 久久99热这里只有精品| 五月婷婷偷拍| 五月婷婷综合丁香视频| 97人人干视频| 五月熟妇婷婷久久| 婷婷色婷婷| 九色视频91疯狂| 超碰人人干| 99小视频在线观看| 婷婷久久亚洲| 色五月丁香91| 天天操天天谢| 色色欧美。| 色国产五月| 图片区 小说区 区 亚洲五月| 五月婷婷六月丁香| 九九色逼| 色婷婷狠狠18禁| www.久久久久久久| 丁香五月综合激情性爱| 丁香五月伊人| 欧美WW在线网| 深爱五月婷婷| 色综合偷拍| 99精品视频免费观看| 五月天婷婷色色首页| 亚洲综合热| 97狠狠碰| 色婷婷亚洲婷婷在线观看| 第1影院之五月婷婷| 久久五月天婷婷| 五月婷婷九九热| 狠狠色97| 丁香六月久久| 五月花免费视频| ri电影在线| 亚洲亚洲人成综合网络| 5月婷婷激情6月| www.夜夜爱.com| 天天噜噜|