色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

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
返回資訊列表
久久婷婷色综合一区二区三区| 91丨国产丨白浆| 欧美激情一区二区| 欧美精品999| 欧美综合另类| 蜜乳av一区二区三区四区不卡| 国产兽交视频在线播放| 亚洲天堂第一页| 日韩一级特黄av毛片| 国产欧美日韩臀 | 欧美亚洲情色| 另类欧美综合| 超碰欧美97资源| 综合色播| 亚洲有薄码区日本系列中文字幕| 日韩av不卡在线看| 日韩一级二级三级在线不卡观看完整| 欧美日日人人天天| 天美精品一区二区三区四区在线观看| 东北夫妻性偷拍| 日日碰狠狠添天天爽超| 久久久久久亚洲中文| 亚洲欧美骚| 亚洲综合射| 中文97国产| 色色99| 亚欧免费| 国产精品分类在线观看| 欧美色性情| 天欧美在线| 蜜臀亚洲中文| 久操99| 日本色色色| 把腿张开老子CAO烂你| 97操| 97香蕉网| 91bbb| 青青草原香蕉日本Ap| 天天天天天超碰| 超碰性爱97| 高清不卡视频| 夜夜操av亚洲一区二区| 久操操| 国产大片精久久久久久| 91最新综合| 中文字幕版| 日本一区三级韩国| 亚洲黄网在哪免费看| 夜夜天天噜狠狠爱2021| 欧美亚洲色图另类国产| 欧美系列在线一区二区| 午夜福利免费福利视频| 国产精品交换一区二区| 少妇 综合| 成人婷婷丁香| yazhousetuoumei| 亚洲av夫妻操穴网| 人妻精品综合中文字幕在线 | 尻女朋友一夜| 台湾佬中文娱乐自偷自拍| 免费看毛片操穴| 亚洲中文字幕三级在线| 丰满人妻一区二区三区免费,| 97色伦欧美| 欧美午夜精品久久久久久3D| 婷婷综合在线观看| 动漫区日韩区欧美区| 嗯嗯啊在线视频| 超碰 97国产熟女| 97香蕉人人乳| 91在线/欧洲| 中文字幕第7页| 美女网站91| 国产97色在线| 国产最火爆久久国产网站网站| 亚洲国产精品无石码久久 | 老司机香蕉久久久久| 色噜噜狠狠色综无码久久合欧美| 夜夜嗨一区| 变态另类专区| 无码一区二区精品视频久久久春药| 久久久久久九九九| 人人贴人人摸| 久久婷婷五月| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亞洲久久直播| 国产欧美一区二区| 蜜桃AV天堂| 屁股久久久久久| 日本东京热加勒比久久| 插日本熟女视频| 日韩女优中文字幕| 激情婷婷丁香网| 91美女视频在线观看| 亚洲图片激情综合另类| 丁香五月天堂| 9长久久精品| 天天干18禁| 毛片久久| 中文久久爆乳| 亚洲欧美经典一区二区| 一区黄二区黄| 亚洲欧美骚| 国产精品点击进入在线影院| 日本特黄f c2| 青青草色AV| 亚洲第一精品在线视频| 亚洲国产一级中文综合久久天堂在线免费观看| 国产三级中文字幕粉嫩| 国产精品96久久久久久| 婷婷丁香久久| 观看免费区二区三区二| 一区二区视频在看| 99热这里只有精品99| 日韩欧美麻豆大片| 激情文学小说一区二区 | 99综合视频一体| 色哟哟1区2区| 国产一区免费午夜视频| 国产精品久久发布| 日本不卡一区二区| 亚洲精品骚逼| 日韩黄色片子| 啊啊啊啊啊啊啊好爽不要| 人人操人人操人妻人| 国产亚洲日本精品在线| 无码视频一区二区| A级片一区| 强上我不卡卡| 日本人妻伦在线中文字幕| 91狠婷| 久久久久久久| 欧美男人一区| 亚洲天堂久久久久久粉红视频| 久热无码| 午夜精品久久久久久久久久久久久| 日韩欧美国产高清视频| 后入福利视频| 免费一级视频特黄色大片| 免费超碰97久久| 天天躁日日躁xxxxx| 欧美成年人性爱视频免费观看| 欧美黄色大香蕉一区二区| 欧美日韩亚洲五月天婷婷| 岛国片在线播放| 欧美激情欧美精品| 日韩性爱小视频| 亚洲宗合电影| 无码WWW免费视频网站| 亚洲污污网站| 99热久| 东京热综合久久一区二区 | 98精品国产乱码久久久久久| 8050无码八戒| 日韩有码 一区二区三区| 97舔舔| www.亚洲黄色| 锕锕好爽 死我在线观看| 人妻系列无码专区中文有码| 91欧美经典| 9久综合网| 国产黄色剧情影片麻豆免费播放| 国产极品久久久| 久久久久久日韩| 快点操死我| 97免费在线观看| 亚洲最大的黄色电影网站。| 精品成人动漫一区二区| 久久中文字幕女同性恋一区| 欧美日韩国产中文精品字幕自在自线,| 色色色色色色色色色色色色色色综合| 超碰精品国产无码| 天天干人人乐| 日日妻色网| 日本一区二区做爱的视频| 91成人无码| 色盈盈影院| 欧美日韩国产高清在线一二三区 | 青娱乐国产精品| 国产精品久久久久久久久久久久久久| 精品美女在线视频| 九九色色| japan日本高清乱xxxx| 国产搭汕a级片| 久久久不能久久久久| 中文字幕一区二区韩| 亚洲欧美清纯| 99色在线| 精品国产国产AV| 国产精品无码论坛| 性欧美999| 国产精品久久久久绯色| 日韩精品99999| 久久性生大片免费观看性| 精品无码一区二区人妻久久蜜桃| 欧美 亚洲 制服 精品| 99久久婷婷丁香| 人妻天堂网| 后入综合久久| 欧美肥臀在线| 久久原创中文| 99re6在线视频精品免费完整版安卓版| 亚洲色图久久成人| 夜夜操天| 亚洲另类在线观看| 欧美性爱一级操| 老熟女乱伦一区| 久久久一区二区三区四区五区| 欧日a| 九九久久首页| 在线天堂999| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 九九九九国产| 精品人妻一区二区三区日产| 97超碰超| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 狠狠色婷婷777| 欧美伊人久久综合网| 精品一区二区三区蜜桃| 桑老女人九区| 国产在线激情| 亚洲 在线| 欧亚韩国999| 99久久久久久亚洲精品不卡| 蜜臀无码视频在线观看| 国产白丝精品在线观看| 欧美第一页| 亚洲天天在线| 久久精品人人做人人看| 欧美特大AA级黄片| 成人免费毛片| 亚洲导航深夜福利| 99啪啪视频| 五月婷婷激情综合| 国产亚洲中文不卡二区| 五月天玖玖资源站| 欧美做爰无码A片视频| 97香蕉碰碰人妻国产欧美| 伊人色综合网电影| 91成人久久 | 久热伊人| 97伪v| 91黑丝操| 清纯唯美第一页| 花花AV导航| a级免费在线观看| 手机在线免费看的av| 天天日天天干天天色| 岛国色情视频在线观看| 亚洲超碰在线| 熟妇人妻一区二区三区| 久久久久国产精品人妻aⅴ天堂| 综合网亚洲在线| 天天澡天天爽日日AV| 免费αV在线视频| 日本肏逼视频在线观看| 精品少妇一区二区三区在线视频| 色五月激情网| 蜜桃久久久久久久久久久久| 欧美高清16| 97色97干| 国产精品一区二区 尿失禁| 久久婷婷五月天| 欧美综合色站| 青娱乐淫乱1314| 国产v片在线免费观看| 日本国产欧美高清在线| 99视频内射三四| 蜜奶av| 成人综合视频久久| 亚洲影视第一页| 天天干天天舔| 日本美女性生活久久久久久久| 久久久∴| 日本一级特级毛片视频| 色婷婷五月综合激情中文字幕| 亚洲激情网一二三四区| 天天躁夜夜躁狠狠躁AV| 91国产操逼视频| 超碰人人超在线观看| 亚洲国产精品久久久久婷婷青年| 超碰欧美97资源| 夜夜草天天| 五月丁香激情综合| 久久熟女久| 精品人妻一区二区三区日产乱码| 欧美成va视频网站| 欧美色爱综合| 天天视频综合在线观看视频| 久久大陆| 亚洲欧洲综合成人av一区| 玖玖爱综合| 黄色工厂这里只有精品| 日韩亚洲国产视频| 动漫av中文| 无遮挡又黄又刺激的视频| 舔人妻中文免费视频| 日韩成人高清一区二区| 欧美制服另类丝袜| 大香蕉日韩| 亚洲高清无码免费观看视频| 久热网| 2017人人操,人人摸| 99久在线精品99re8热| 亚洲欧美日韩电影网站一区 | 1二区9| 女人天堂av在线播放| 五月天大香蕉| 亚洲美女高潮喷水视频| www欧美性爱| 综合色拍| 巨爆乳一区二区爆乳区| 97人人操人人干| 精品欧美日韩在线观看| www成人啪啪18秘 免费| 亚拍在线| 欧美日韩亚洲一区二区在线观看| 天天日日日射| 男人久久天堂| 中文字幕丝袜人妻| 久久久精精精| 久久久9视频| 91在线免费精品视频| 怡红院怡春院| 亚洲精品无码久久AV| n1038 一二三区| 97综合国产| 一区二区三区精品黑丝白丝酒店对鸡| rion磁力链接| 亚洲aw毛茸茸在线| 超碰伊人在线| 无码日韩人妻av一| 亚洲色图欧美色图综合| 欧美永久激情一区二区| 精品欧美А∨无码黑人大荫蒂| 97久久久精品| 嗯啊不要在线| 欧美日韩在线小说 | 草草影院最新网址| 中国熟女网站| 熟女性视频| 人人干黄色| 激情五月天校园春色网| 国模限制级电影| 午夜视频好爽啊| 人妻色情天天操| 男人的天堂在线有码| 国产强奸乱伦欧美| 日韩欧美中文字亚洲慕| 啊啊啊97视频| 久久婷婷五月天| 熟女乱3伦999| 日日嗷| 免费一级视频特黄色大片| 欧美天天射| 欧美熟妇亚洲版| 黑丝少妇| 秋霞曰韩R级| 在线97视频| 91伊人大香蕉| 久久久久久久一级黄色打同平台| 嗯嗯啊啊啊啊轻点视频| 狂操嫩妻视频一区二区三区| 激情小说成人日本无码一| 亚洲日韩美女丝袜美腿人妻视频| 久久久不卡区一区二区三区久久久| 美女一区二区国产精品| 欧美组图日韩亚洲中文字幕| 欧美性第1页| 国产精品第二页| 手机看片1024你懂的国产| 亚洲美女30b| 国产精品电影| 成人免费在线网站| 国内一区二区免费| 亚洲熟女诱惑| 伊人四虎综合| av东京热男人的天堂| ,成人免费啪啪视频| 99精品人妻| 性高潮久久久| 密臀视频一区二区三区| 中文字幕版| oumeisetu综合| 每日更新AV| 国产精品自拍xxxx| 国产精品黄色三级av| 亚洲中文字幕熟女| 91情色在线| 99re6在线视频精品免费完整版安卓版| 日日日啊啊啊| 九九九久千久久激情蜜桃在线看 | 亚洲一区二区性爱电影| 日韩欧美综合激情| 成人无码影片视频在线| 国产精品九九九| 夫妻天天操岛国视频| 夜夜嗨一区| 久久国产乱子伦精品免费女,网站| 羞答答AV中文字| 精品.99999| 九九久久久九九| 日日干日日操五月天伦理视频| 啊啊啊啊嗯嗯嗯用力好爽| 日韩精品黄片免费观看| 9999免费精彩视频| 日日狠狠久久偷偷色综合免费| 中国少妇XXXX做受| 操逼网站地址| 男人天堂一区二区| 欧美少妇第一页| 少妇极品熟妇人妻无码| 精品人妻一区二区三区视频| 看看日B真人视频| 综合熟妇一区二区三区| 99re视频在线播放青草| 高清国产精品福利网站| 日韩国产不卡在线视频| 日本五十路熟女一区二区| 睡产熟女乱伦| 2020中文字幕| 欧美永久激情一区二区| 中文字幕第23区| 玖玖超碰熟| 性欧美91| 国产精品一区午夜福利| 日韩不卡av一二三| 日韩精品 资源| 亚洲熟女乱熟乱熟妇综合网二区| 天天天操天天天爱| 夜夜欧美| 亚洲啪啪综合?v一区综合精品区| 亚洲精品无码久久AV| 国产伦乱91| 婷婷五月综合激情| 人人澡人人爽人人精品| 爱啪精品一区| 天天综合网亚洲综合网| 久久久久亚洲熟妇熟女| 久久久久久久久久久人妻| 99九九久久| 亚洲午夜蜜臀| 性色av大全| 丁香五月天视频| 性性欧美| 97免费视频在线观看| 成人a大片在线观看| 啪啪啪大香蕉| 亚洲综合骚逼| 国产又粗又大硬免费色网视频| 国产亚洲精品美女久久久久久2021| 97在线精品| 先锋音影AV| 啊啊啊啊啊在线| 黄色欧美性爱视频| 级品肉射| 日本操逼视频不卡直接放| 一级性爱aaaa| 国产精品久久久久久久久久久久久久久久 | 欧美一区二区传媒| 欧美se综合| 探花熟女,姿勢到位,體驗感也到位| 欧插网站| 免费试看60秒| 日韩人妻少妇 一区二区三区| 亚洲日韩乱码中文无码蜜桃臀网站 | 欧美激情在线观看视频| 午夜偷拍久久熟女| 丰满精品人妻少妇久久字幕| 蜜乳中文字幕a在线| 久久综合五月天| 99日视频在线免费| 美国人人操人人操| 亚洲揄拍网| 国产成人超碰在线| 成年男人的天堂| 9999久久久| 久久精彩视频| 78精品| 插欧洲美女欧美精品| 亚洲综合性网址| 日韩国产欧美伦理在线| 天天操美美| 99这里只有精品国产| 熟妇人妻一区二区 | 国产精品91一样| 亚欧美色| 91N五十路| 亚洲综合另类| 亚洲欧洲精品成人| 亚洲欧美九九九| a'v在线资源| 老熟女熟妇| 一个色导综合| 97热视频在线观看| 国产精品免费视频不卡| 亚洲熟女乱综合一区二区三区 | 后入内射蜜桃臀| 久久亚洲中文字幕视频| 另类av天堂| 肥臀熟女福利视频一区二区| 少妇综合网| 69人妻精品丰满熟女区| 综合97亚洲| 超碰国产情侣自拍网| 欧美亚洲激情| 欧中日成人免费影视| 亚洲精品一区二区日本| 久久骚少妇| 国产精品毛片| 久久久久久人| 欧美激情 亚洲色图| 91久久国产综合久久| 欧美人妻少妇| 国产农村妇女精品1区二区| 亚洲毛片一级带毛片基地| 欧美一区二区三熟女剧情| 一区二区三区精品黑丝白丝酒店对鸡 | 日韩成年人性爱视频| 九九热视频这里只有精品| 亚洲精品一二区| 欧美久久伊人| 色香欲影| 天天摸夜夜操视频| 人人色97| 国产精品无码AV网站| 中文字幕国产在线天堂| 四虎免费视频| 狠插 制服 自拍| 亚洲少妇中文字幕网址| 欧美日韩国产成人高清| 97欧美色综合| 躁躁日曰躁2020| 柠檬AV导航| 偷拍偷窥与盗摄视频专区| 啊啊啊啊啊舒服| 嗯嗯嗯嗯啊啊啊好紧好大| 国产三级多多影院2022国产AA一级毛片无码 | 超碰吊日色| laoshunv91| 熟妇在线视频一区二区| 久草视频在线视频在线视频在线观看| 99AV| 曰本道人妻久久久在线不卡色视频 | 亚洲精品国产精品乱码不卡| 婷婷99| 免费观看的黄色的网站| 翔田千里Av在线| 易易A毛视频| 歐美一級亂黃99在綫精品| 日韩黄色成人性爱| 亚洲国产精品有声| 日韩熟女无码| 欧亚日韩一区在线| 中出在线视频| 亚洲综合69| 九热大香蕉| 东北黄色电影| 91婷婷伊人狠人| 免费精品AB| 午夜天堂精品久久| 最新加勒比丝袜在线| 蜜乳av首页| 国产精品自拍欧美在线| 日韩国产不卡在线视频| 男女国产精品| 一区二区三区在线日韩影院观看| 97中文超碰| 丁香色婷婷| 日韩啪啪视频| 五月天婷婷小说| 亚洲欧洲网站免费观看| 欧美黄片视频在线观看免费 | 91老女人| 亚洲中字幕日本一区二区三区 | 富二代亚洲精品99| 无码99| 亚洲AV免费在线观看| 天天插天天射| 99热免费| 国产精品午夜成人福利| 欧美色图私拍91| 国产精品亚洲四五区在线观看| av在线浏览| 亚洲av总站| 国产精品欧美激在线| 啊啊啊啊啊啊啊好爽不要| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 手机在线免费看的av| 亚洲av无码国产精品字幕| 欧美爱三级日韩久久| 收看日本人日bb| 激情网色| 婷婷丁香成人| 亚洲成a人v欧美综合天堂下载| 午夜在线播放| 午夜男女爽爽爽影院视频| 性久久久| 影音先锋每日最新资源在线观看| 视频不卡中文字幕| 久久婷婷电影网| 亚洲国产奇米影视久久| 999国产精品999| 久久性爱视频| 麻豆2区1区天美| 婷婷色香| 九九九九九九九九九九精品视频| 热久久无毒不卡| 色网亚洲人| 亚州性9| 国产9区| 精品无码一区二区三区| SS久久| 乱老女人一区二区视频| 国产精品老熟女一区二区| 亚州色站 日韩电影| 91爱看| 一本色道人妻久久| 国产欧美岛国精品一区 | 中文在线久久字幕| 亚洲一区中文字幕| 收看日本人日bb| 五月天开心网| 天天操人人操骚逼网站| 人妻三级在线中文字幕| 入口操逼网站| 91撸色网 玖玖网 欧美| 性欧美999| 岛国大片国产| 九色 人妻 大香蕉| 91激情国产| 91 天天综合| 亚一综合久久久久久久久久| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 亚洲AV麻豆Aⅴ无码电影一| 熟女字幕| 人妻少妇精品久久久| 欧美成人性活片| av国产无码| 国产精品天干天干综合网麻豆| 我要去看2个日本美女.com曹逼| 人人摸人人舔一区二区| 欧美精品一区二区少妇免费A片| 亚洲欧美大| 久久香蕉国产线看观看亚洲女人 | 大香蕉色欲AV| 国产乱伦亚洲| 天天摸夜夜操视频| 国模私拍一区二区三区神乳| 亚洲欧洲日韩国产自在线| 丝袜综合| 欧美Ⅴ性爱| 刺激性视频黄页| 亚洲欧美另类激情小说| 97 亚洲 日韩 欧美 在线| 亚洲天天自拍| www.色综合| 天天综合~91| 操逼www.| 操淫穴亚洲五月丁香| ji熟女.com| 亚洲老司机123专区| 亚洲无线码欧洲精品区别| 国产夜夜艹| 91天天看| 色综合潮| 性饥渴少妇av无码毛片| 无码欧美有限公司| 亚洲 小说 欧美 激情 另类| 蜜臀AV成人精品蜜臀| 亚洲国产成人7777| 99RE在线视频精品,这里只有精品| 日韩极品无码B| 97国产天堂岛| 成人26uuu| 欧美91精彩| 中日韩熟女| 91中文字幕在线观看| 婷婷五月天AV| 天天综合网在线观看| 成人五月香网在线| 亚洲欧美一区二区网址| 国产精品suv一区| 无遮挡男女激烈动态图| 亚洲色图第一页| 久操不卡视频| 欧州91高潮| 欧美久久婷婷| 欧美久久伊人| 国产一级高清免费观看| 久久日本熟女精品一区| 国产成人无码网站在线视频| 九九九九九九九九九国产精品| 成人色女网| 日韩丰满熟妇| 日韩操啪| 人妻精品一区一区三区蜜桃91| 伊人久操| 国产精品午夜AV完会免费| 久久久专区| 欧美激情五月天| 91精片| 亚欧操逼片在线观看| 夜夜一区二区| 99久久久无码国产精品性男| 蜜臀久久99精品久久久久| 欧美色图人妻| 韩国久久97| 国产小u女在线观看| 在线97视频| 素颜老阿姨乱情色| 精品夜夜澡人妻无码| 亚洲国产奇米影视久久| 久久97精品久久久久久久不卡| 久久久久成人蜜桃精品| 亚洲国产成人精品无码专区| 凹凸精品熟女在线观看| 亚洲激情欧美色图 | 大胆91| 国产熟女免费观看久久| 91综合网| 乱老熟女一区二区三区| caorenqi shipin| 日韩无码黄色片| 精品无码一区二区三区色欲| 麻豆一区二区三区在线看| 人妻内射一区二区在线视频| 91老熟女逼| 欧美熟女操屄| 少妇人妻太紧太深av| 欧洲与亚洲欧美精品中文字幕| 91美女视屏| 五月天激情网图片| 久久性视频| 欧美成人性爱视频免费观看| 国产熟女完整版中字| 欧美夜夜草视频| 国产精品播放| 日韩精品午夜操呦呦不卡影院| 嫩草 人人网精品| 国产精品老熟女一区二区| 国产亚州日韩欧美看片| 美中日韩无码| 久久国产免费激情视频| 欧美色www亚洲国产阿娇要播| 欧美激情内射| 青青草原成人| 俺也射| 中出在线视频| 超碰视97中文| 亚洲男人天堂2| 久久久免费懂色| 欧美亚洲AN| 日本特黄f c2| 婷婷情色综合网| 视频分类 国内精品| 欧亚性爱视频免费看| 免费观看的黄色的网站| 久久人人爽人人爽人人片Ⅴ| 色欲日韩欧美在线一区| 中文字幕在线日亚洲9| 久热婷婷| 97网址www| 色婷婷综合久久久久中文一区二区| 欧美超碰96| 色九九九综合| 都市激情人妻一区二区青青操视频| 国产五码丝袜屁眼| 91欧美性| 超碰97首页| 欧美三四五区| 国产精品国产| 久热网| 诱惑网综合| 南澳成人一级片在线播放| 亚洲丝袜少妇在线| 日本影视久久免费| 神马久久久久久| 26UUU欧美日本| 天天草夜夜草高潮片| 免费A V在线播放| 久久成人国产| 国产成人综合网| 无码国产精品午夜不卡(| 男人天堂2019亚洲| 性色一线| 91人妻视频在线| 91天射| 亚洲双插| 91被操| 91成人精品在线播放| 99热精品在线| 亚洲色图加勒比| 亚洲AV在线资源| 欧美激情内射| 日韩熟女乱伦中出| 日本一区二区三区午夜观看| 亚洲精品成人| AV中文在线| 97一区二区三区视频| AV中文字幕剧情1区2区3| 超碰在线免费一区二区三区| 亚洲在线| 亚洲色诱惑| 久久欧美1卡2卡3| 天天操熟妇| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 97欧美色| 大香蕉78| 久99热| 欧美少妇高潮久久91| 97亚洲中文| 18禁美女裸体无遮挡啪啪| 日韩精品区二区三区不卡| 曰韩av中文字幕专区| 日本999精品视频| 欧洲人妻视频| 日韩欧美午夜视频在线| 国产超碰在线一区| 97av在线观看| 天天操夜夜操| 国产精品高潮久久AV| 欧洲久久一二线| 天天操夜夜嗨| 熟妇熟女视频一区二区三区| 欧美综合 站| 影音先锋每日最新资源在线观看 | 中文字幕乱妇免费视频| 天天天天天天天天天天干美女 | 国产精品美女久久久久AⅤ国产馆| 操婷婷逼| 亚洲第一男人天堂| 丁香五六月啪啪| 日本高清电影欧美色图| 夜夜嗨一区| 操逼片中文| 97精品97| 欧美偷拍区| 亚洲、日韩、综合、另类| 成人小电影网站tex| 国人欧美精品一区二区| 桃色人妻在线视频| 黄色电影在线播放综合网站| 自拍盗摄一区| 天天干天天操天天操夜夜操天天操| www.色五月| 超碰精品97| 综合色图区| 亚洲97资源| 大香蕉人妻| 麻豆一区二区AV天美| 亚洲精品aa久久伊人| 久9爱经典视频| 欧美日韩99| 东京热,男人的天堂| 国产精品色色| 精品天堂| 精品无人区麻豆乱码久久久| 一区AV| 神马久久69| 激情综合二| 成年在线视频日本亚洲在线视频区精品江靖宇公司| 一级一性爱免费视频| 96免费视频在线| 午夜一区二区三区国产| 偷拍五区| 亚洲高清无码免费观看视频| 久草看看看| 欧美拳交在线播放| 国产精品白领在线观看| 亚洲日韩AV视色| 99亚洲精品| 亚州色阁| 午夜大香蕉| 东京热一区二区中文字幕| 蜜臀人妻少妇久久在线观看| 370p日韩欧美亚洲精品| 风月影院男女十八禁| 亚洲天堂 视频你懂的| 自拍六区| 欧美老妇女内射网址| 久久久久亚洲av综合波多野制衣| 国产第二页| 国产精品久久久亚洲一区| 亚州综合| 亚洲美腿丝袜香蕉影视欧美成人| 色99在线| 波多野结衣AV无码一区| 色情婷婷久久五月天| 国产小黄片在线免费观看 | 超碰99在线观看| 精品视频一区二区| av东京热男人的天堂| 中日高清无码操逼视频| 日本阿v天堂在线观看| 超碰午夜| 欧美黑人XXXⅩ高潮交| 中文字幕一区二区视频在线观看| www.高清无码诱惑一区.com| 中文字幕jul-617人妻熟女| 夜夜精品视频| 欧美成人色| 91GD.COM| 欧美在线91| 亚洲 欧美 综合 91| 91黑丝少妇| 欧美顶级黄色大片免费| 久久九色| 五月天亚洲网| 欧美爆操91| 日本中文字幕在线视频 | 黄色网址久久精品欧美喷水| 无码WWW免费视频网站| 婷婷10月天青娱乐| 久久久久国产| 免费久久精品麻豆一区二区av| 夜夜草天天| 天天操天天日青青草超碰av| 欧美日韩国第一区| 91亚洲黑人| 久久精品99| 国模精品娜娜一二三区| 国产曰批免费观看久久久| 国产精品直播在线观看直播| 精品中文一区二区| 操一区| 精品久久在线区一区| 91丨九色丨东北熟女| 国产中文精品一区二区在线观看| 亚洲国产丝袜熟女av| 农村妇女精品一二区| 97天天在线| 日韩精品第3页| 欧美国产一区二区三区麻豆传媒| 天无日色综合| 色穴精品| 91操人视频| 欧美婷婷| 久久欧美按摩999| 99热伊人| 女人爽到高潮久久久| 可以免费观看的av| 婷婷久草一区二区三区| 99色天堂| 丁香五月激情啪啪| 色小视频蜜乳| 黄aaaaaaaaaaaaaaaaaa色网站| 国产精品人妻免费精品| 亚洲欧美另类图片| 日韩欧美性爱电影在线观看| 亚洲欧美电影| 中国人高清www色视频免费| 9久久久久| 国产精品自拍视频| 亚洲综合首页| 久久精品久久久久久久久| 欧美中文字幕日韩在线| 无码人妻精品一区二区中文| 国产野战露脸在线播放| 激情视屏国产乱伦强奸| 亚洲啪啪性视频| AV电影在线播放| 99热色这里只有精品| 久操高青| 国产地址二三| 久久亚州大香蕉| av天堂加勒比| 永久免费观看的毛片的网站| 亚洲欧美第一页| 国产传媒操逼视频| 欧美久久伊人| av天堂影视中文在字幕在线中文| 九九成人视频| 久草视频制服诱惑| 日日夜夜干| 久jiu久神马影院| 久久久不卡区一区二区三区久久久| 久久久久久久久久黄色网| 久久伦理视频久久大香蕉视频| 是还免费视频1727我| 天天躁夜夜躁狠狠躁AV| juliaann丝袜| 天天操夜夜操狠很操| 在线岛国新天堂8| 狠狠色综合网| 性性欧美| 国产97/欧美| 18禁无码永久免费无限制| 黄片com.| 中文字幕一区二区三区人妻少妇在线| wwe 天天干.com| 99国产精品自在自在| 张柏芝国产一区在线观看| 人人操人人摸人人看人人插| 日韩操人| 久偷拍| 91中文字幕在线观看| 哈哈操 大香蕉| 99re免费| 国产高清成人传媒影视| 91在线美女| 欧美极品少妇| 操B视频日韩无码| 婷婷五月天av| 1204av韩国| 91热| 国产欧美日韩一区二区三区| 香蕉久久国产AV一区二区| 秋霞午夜视频一区二区| 久久久啊啊啊| 久久riav中文精品| 日韩少妇丰满亚洲| 偷窥自拍亚洲| 18禁网站在线播放| 久久婷婷色综合一区二区三区| 中国熟女网站| 激情五月综合开心五月| 开心五月激情网| 少妇诱惑视频| 亚洲综合在线91| 91在线视频免费播放| 岛国毛片手机在线观看| 91老司机在线视频免费观看| 男人的天堂日韩| 青青在线视频日韩欧美| 在线观看av区| 久久鲁夜| 91日韩在线| 亚洲日韩熟女人妻高清在线| 日本操逼视频免费| 亚洲色图久久成人| 亚洲猛交| 91九色首页| 天堂精品一区| 韩国一级AAA| 操曰本熟女| 收看日本人日bb| 97一区二区蜜臀| av影院十区| 国产男女无套视频免费观看| 婷婷成人久久久精品| 日夜尻逼网| 日美免费黄片| 色大香蕉97N| 深爱伊人影院| 国产强奸超碰AV| 国产AV人人夜夜澡人人爽麻豆| 亚洲男人久久综合天堂| 中文字幕丝袜人妻| 人人看人人插| 欧美色图天堂网m| 日韩成人无码| oumeizonghese,www| 日韩黄片影院| 99精品久久久久久| 三级色综合| 欧美大干日韩| 色综合色综合网| 少妇天堂网络| 人人干黄色| 99超碰色| 黄骗免费网站| 精品99999久久久久久| 欧美影院一区二区三区| 九九在线精品| 91视频综合网| 欧美色一二三| 波多野结衣被操50分钟免费视频| 欧美中字二区| h无码动漫在线观看| 很狠操| 99色在线视频| 熟女激情综合网| 97日视频| 图片区小说区| 欧美色网络| 欧美国产伊人久久久久| 综合97亚洲| 国产精品无码久久久久2025| 久久久久921| 色墦五月丁香| 97免费视频在线观看| 最新亚洲风情电影| 亚洲中文一区二区三区| 嗯嗯啊啊操死我| 亚欧视频在线| 亚洲性天堂| 人妻少妇三级| 欧美婷婷五月天| 久区视频| 欧美最婬乱婬爆婬性视频 | 伊人网综合在线视频| 日本一卡二区在线| 日韩精品三区四区| 一级黄色视频网| 精品97久久| 超碰97最新人妻| 丝袜大香蕉| 国产第12页| 欧美亚洲第1页| 7777欧美成是人在线观看| 少妇被c 黄 免费观看| 亚洲资源网| 激情文学网伊人| 天天操天天干一区二区| 精品传媒在线一区| 熟女91网| 99综合免费视频| 人妻一二三区| 日本成人在线不卡一区二区三区| 噜噜噜无码AV一级一级久久影院| 国产精品久久久久久久AV大片| 欧亚日韩中文在线| 天天综合网91入口| 性爱1区| 亚洲中文一区二区三区| 狠狠操狠狠操操| 久久久久幕乱码| 青青草色情网站视频| 防屏蔽在线视频| 国产大陆天天艹| 国产精品操| 日韩综合第八区国产精品| 任我爽视频在线观看| 凹凸视频特色日本特黄| 中文字幕,人妻,日韩| 夫妻天天操岛国视频| av草草在线电影| 久久精品国产精品| 久久精品视频久久久| 99综合视频一体| 一区二区娱乐网站| 91网站18+| 97伪v| 色女99一级片在线观看| 国产女上位好爽在线| 日本精品一区二区中文字幕| 97在线精品观看视频| 久久中文字幕一区不卡| 97aiaiai| 夜夜 中文视频rt| baiduhicn.com。| 久久久久中出| 欧美天天综| 久久9 9 9精品| 性爱av网站| 日韩精品在线观看网站| 欧美人人曰人人操人人射射| 91精品大奶人妻| av天堂天堂av日韩| 欧美性爱第一页久久| 日韩无限资源| 中文字幕蜜乳av| 天天综合中文字幕 91| 男人的天堂免费| 91精品人妻一品二品三品| 亚洲综合有码| 亚洲欧美校园| 精品丰满熟妇人妻一区| 久久九九97|