色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
久久精品国产精品一区 | 超碰这里有精品| 欧成人在线| 无套内射人妻在线播放| ai欧美亚洲小说| 男人亚洲91首页在线| 亚洲天堂日本| 91干熟女| 91性情| 日韩无码成人电影| 伊人网在线点播| 秋霞蝌科网日本一区| 久久精品视频在线观看| 久久天天艹| 欧美一区二区三区大综合| 91骚熟女| 欧亚成人在线视频| 精品国产www久久| 精彩久久中文| 日韩另类色图| a'v在线资源| 98一区二区精品| 一本色道久久综合精品婷婷| 中文字幕精品一区二区精品| 高清无码在线播放网站| 夜夜骑操视频| 18禁超污无遮挡无码免费网| 午夜啪| wwe 天天干.com| 亚洲国产尤物yw在线观看| 欧美天堂亚洲电影院一区在线播放 | 久久一二三四五六七八九区区区| 国产一二三在线视频五十路| 密臀在线免费观看| h无码动漫在线观看| 都市激情人妻一区二区青青操视频| 18啪啪手机免费性爱| 97公开久久| 色色色色电影网| 欧美日韩狠狠爱| 免费观看欧美日韩操逼视频| 国产一级内射高清视频| 2019天天操天天爽天天拍| 偷拍综合亚洲| 激情久久久| 蜜臀99久久精品久久久久| 99国产精品在线观看| 国产一级内射无挡观看| 中文字幕乱妇免费视频| 国产久久一区二区三区野外在线| 蜜桃视频成a人v在线| 乱色老一区二区三区的观看方式| 好吊色在线观看| 欧美爱三级日韩久久| 熟妇激情| 亚洲大色堂| 福利在线黄片| 国产精品分类在线观看| 久久系列| 九九九九一级| 欧美日韩国产男人| 蜜臀久久一区二区| 青青网三级视频| 日逼逼免费看| 日本不卡二区| 老司机福利青青草| 伦理第一页| 热热色国产一二区AV| 91亚洲不卡一区| 免费黄色A片| 视频国产欧美在线播放| 亚州色图欧美色图| 密臀AV在线| 色色婷| 91伊人久| 97啪啪| 天天综合网视频91| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 亚洲av无码成电影在线播放| 九九九一二三| 久久大香蕉97| 另类天堂| 一二三区视频在线观看| 91黑丝操| 老熟妇一区二区三区啪啪| 十八禁网站在线| 新婚人妻扶着粗大强行坐下| 久久久亚洲Av| 色y情视频免费看| 亚洲国产97| 九九九九精品视频| 啊啊啊啊好多水| 伊人性在线视频| 国产99999久久精品| 九九九久千久久激情蜜桃在线看 | 91丨九色丨国产丨人妻在线 | 久久久91福利姬| 久噜噜| 国产性刺激| 中文高清一区二区的| 色99视频| 久热99| 亚洲图片偷拍视频区| 色就色综合| 午夜小电影在线插入淫高潮| 青青草国产欧美非洲黑人| 亚洲春色欧美| 久久系列| 可以免费看黄片的视频| 欧亚性爱在线视频| 伊人五月天激情| 亚洲国产一区二区入口| 操逼www.| 婷婷亚洲综合| 亚洲精品视频二区| 九九热精品免费视频| 91久青| 九九热精品在线| 欧美少妇一区二区三区| 久久久9 9 9精品| 日韩精品一区,二区 九九...老司机| 91路www| 一二三四视频在线社区中文字幕| 久男人久久| 老鸭窝在线视频播放| 综合自拍| 日韩无码a片| 最新岛国大片| 色性欧美| 60秒免费视频| 国内一级精品| 一区二区三区亚洲| 亚洲欧美激情在线视频| 久久最新免费视频23| 97色欧州| 亚洲午夜蜜臀| 午夜操一操| ,成人免费啪啪视频| 五月丁香啪啪| 韩日巨乳美女免费视频在线观看| 婷婷月色| 少妇天堂网络| 人妻色情天天操| 久久黄人人爽视频| 日韩免费福利在线观看| 亚洲成人性爱在线观看| 九色97| 日本淫穴在线| 俺去啦俺来也久久综合| av片在线观看免费播放| 精品无吗久久| 久久婷婷一区| 亚洲无码AV九九九| 嗯嗯啊啊用力视频免费| 国产精品一区在线播放| 日产操逼| 台湾大香蕉99热| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 又大又白奶子| 亚洲国产中文字幕| 日韩免费在线观看不卡| 久久色人体| 国产久久男人天堂| 日韩美女啪啪一区| 裸体美女免费看网站青草| 日韩钢筋无码高清啾啾啾| 午夜福利合集| 亚洲色五月| 伊人一区二区三区| 国产白丝精品在线观看| 人妻熟女午夜精品在线| 国产一区二区久久| 无码精品久久| 好湿好紧好爽 视频| 九七人妻在线| 一级性爱啪啪视频| 日本一二三高清| 四虎在线视频| 岛国视频免费在线观看| 日韩久久艹| 丰满美女一级毛片在线播放| 懂色综合久久久| 久久噜噜噜精品国产亚洲综合| 亚洲h片在线免费观看| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 狠狠操狠狠爱| 亚洲精品97p| 最新日产中文在线麻豆| 日韩精品国模| av绯色| 久久綜合很很很| 搡老女人老熟女91| 97玖玖人妻| 麻豆天美91| 天天爽夜夜操| 天天天干977| 九九黄色网| 四虎免费在线播放| 超91综合网| 99在线精品视频| 黄污污污污| 3P丝袜熟女 色综合| 91强奸乱轮| 啊啊啊啊啊啊啊啊啊啊在线观看| 国产精品日韩在线一区| 成人A片男人的天堂| 日韩一级二级三级免费看完整版| 免费视频在线观看啊啊啊啊啊| 久操免费观看| 91婷婷伊人狠人| 人妻第一页| 99色热| 中文字幕精品码亚洲| 激情六月婷婷| 91综合网站| 96久久科窝| 爆乳免费黄网站| 日本一级特级毛片视频| 人妻美腿丝袜制服诱惑综合天堂-| 国产 日韩,欧美 自拍| 91亚洲精品青草| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 亚洲天天做日日做天天谢日日 | 99免费在线视频| 深夜视频| 99re69综合| 久久青青草原免费视频| 精品美女少妇一区二区| 熟妇人妻一区二区| 欧美日韩激情无码专区| 怡红院亚洲怡春院av| 九热视频| 99色热国产视频精品| 91 偷| 久久久工口| 影视综合无码少妇| 美女爽到高潮91| 懂色AV一区二区三区| 欧美A片中文字幕| 情色五月天网| 懂色AV一区二区三区| 天天上日日上日韩精品| 超碰免费欧美7| 亚洲高潮少妇| 国产成人精品无码久久| 超碰人人干天天射| 97超碰久久色| 五月综合视频| 日韩国产乱子伦App| 久7色| 久久国产免费激情视频| 九九草| 91高跟美女在线播放| 天天肏夜夜肏| 欧美性生活免费网| 97色综合中文网| 区二区亚洲婷| 丝袜喷水在线| 在线播放成人网站| 日韩乱伦视频| 日本操色导航| 黑人娇小av在线播放| 欧美色图在线视频少妇| 亚洲综合在线高清| 免费看毛片操穴| 久久九九视频九九视频| 人人操,人人插| 欧美加勒比| 亚洲丝袜99| 丁香婷婷激情五月天无毒不卡 | 丁香五月天啪啪| 中文字幕一二区二三区人妻专区| av网站国产主播在线| 亚州五月| 97欧美日韩综合| Aa东京男人的天堂| 日本中文字幕一区| 天天摸夜夜操视频| 久久久久七视频| 婷婷久草一区二区三区| 婷婷久久久| 日本护士高潮| 人人透人人操| 激情久久久| 亚洲精品第一| 成人性爱电影一区二区| 粉嫩绯色AV一区二区在线| 尤物黄色在线观看网站| 强奸乱伦Av网| 久久精品高清AV| 日韩美女操b| 久久久久人妻二区精品叶可怜| 人人性爱视频免费| 亚洲欧洲中文日韩女优乱码| 国产福利视频精品视频| 色欲Av人妻精品一区二| 99在线无码精品秘 入口黑人| 欧美大香蕉久| 无遮挡一级毛片视频免费的| 狼狼色丁香久久婷婷综合五月| 自怕偷自怕亚洲精品| 久久午夜鲁丝片| 亚洲一区中文精品| 亚洲最大AV网| 韩国一级婬片A片AAAAA| 丝袜大香蕉| 国产亚洲在线观看| 99热免费| 中日韩久久人妻一区二区| 久久亚洲不卡一区二区三区| 久久骚少妇| 国产成人精品午夜福利| 999久久久久久久久| 亚洲黄色电影| 26UUU欧美日本| 国产精品久久久久久久电影渣男| 欧亚成人| 大稥蕉免费视频这里只有精品| 旡码电影特区| 成人十八禁日韩欧美一二三| 美女91网| 亚洲无码 国产无码| 国产一区在线观看无码AV| 欧美黑人精品一区二区| 十八禁网站在线| 国产传媒日本欧美专区| 色香欲天天天天综合色| 啪啪啪男女亚洲中文字幕99| 最新日本中文字幕| 免费毛片在线播放| 久久大香蕉手机高清| 欧亚日韩三区| 97美日韩视频| 国模无码一区二区三区在线| 亚洲综合小说另类图欧美视频激情小说色五月天| 99热思思| 九区国产| 麻豆成人AV| 天天懆天天日| 亚洲有码 视频一区| 黑人中出21连凳花野真衣| 欧美色图人妻| 中国人高清www色视频免费| 国产野战露脸在线播放| 婷婷久草一区二区三区| 色天堂在线观看| 青青青青操国内视频在线| 乱伦一区二区三区‘| 3p国产欧美99热| 免费的av网| 国产中文字幕在线观看| 男女激烈网站最新| 人妻激情另类| 一区二区三区四区理论片| 嫩草在线视频| 69人妻人人揉人人躁人人精品| 大香蕉日亚洲日本亚大 | 啊啊啊 在线| 国产欧美日本亚洲精品| 台湾佬中文娱乐自偷自拍| 一二三四区操操Av| 北约熟女超碰| 男人的天堂在线2| 精品少妇一区二区| 一区二区视频在线播放| 欧美熟女妇同| 国产精品福利视频| 人妻久久久| 日本性一区| 人人 操人人 操人人| 天天操天天射青青草| 可乐操亚洲蜜911| 小日子操bb在线看| 中文有码第五页| 色噜噜狠狠色综无码久久合欧美| 色色婷婷丁香| 秘书高跟黑色丝袜国产91在线| 欧美一级久久久丰满| 射丝袜高跟鞋99| 男同专区一区二区三区在线| 999岛国大片| 国产日韩欧美| 久久久久久AⅤ无码免费肉站 | 国产精品乱人伊人网| 久久久四区| 99久久综合| 天天操天天干美女网址导航| 久久精品性| 中文字幕欧美精品亚洲日韩蜜臀| 久操精品网| 亚洲精品黑丝| 国产 丝袜 欧美中文 另类| 国产第二页| 日韩一级特黄av毛片| 欧美72网页| 国产狂喷潮在线精品| 91蜜臀在线久久久久| 91久久| 不卡超碰护士AV在线免费播放| 久久啊啊| 色爱综合网欧美| AA级电影三区| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 欧美成人精品一区二区三区| {男男暴菊gay无套网站| 97久久免费| 天天综合网日韩7799| 人妻熟妇久草在线| 很很干很很操| 国产精品久久aV| 农村妇女精品一区二区| 日韩免费性爱视频在线观看| 啪啪自拍九九综合| 精品十三区| 温婉少妇玩3p| 国产99999| 夜夜操91744565| 做爱A级亚欧| 色97综合中文字幕| 久久精品国产精品亚洲艾通辽熟妇| 精品人妻一区二区三区四区不卡在| 青青青国产| 色色香蕉| 亚洲久久久| 免费久久9999| 9 9精品一区二区三区| 美国美女AV在线| 欧美性爱第一页久久| 亚洲综合九| 五月天婷婷久久| 测评在线观看AV| 91欧美性| 亚洲人成色9999精品久久| 国产不良强奸视频免费看| 亚洲精品黑丝| 91天天综合网,天天综合网| 人人考人人摸人人干| 欧美91精品国产自产| 亚洲男人综合网| 国产女人高潮视频| av网页一区二区三区| 美女高潮国产高清| 丰满人妻一区二区中文| 精品四五区| 亚洲色图欧美视频| 日韩性爱视频在线免费观看| 国产60页| 天天综合,91入口| 91人妻视频| 91久久婷婷| av天堂天堂av日韩| 97视频在线免费观看| 亚洲激情欧美色图| 人人噜夜夜操| 中文字幕视频2区| 婷婷五月色| 久久久久久国产精品免费网站| 大香蕉78| 成人性生活高清视频在线播放| 九九九精品一区二区无码| 久久久999日本大片| 日韩成人性爱电影在线播放| 在线欧美69V免费观看视频| 校园春色亚洲| 色噜噜国产精品视频一区二区| 国产麻豆一区二三区| 超碰1024久久| 欧美性战999| 亚洲黑丝在线| 日本欧美国内在线| 91成人精品在线播放| 欧美91在线+|+欧美| 99色色| 久久婷婷亚洲| 91日韩在线| 国产自偷自拍一区| 国产精品视频精品一二| 簧片免费看视频| 唐山老熟妇露脸啪啪叫| 亚洲一卡2卡3卡4卡乱码网站| 操www| 国产精品视频自拍在线| 92性色国产午夜福利在线661| 精品午夜福利| 欧美色女人| 天天综合网91| 综合伊人网12色| 麻豆久久精品亚洲精品88| 99热在线播放| 日韩无码一级黄色av片| 蜜臀一区二区三区在线| 日韩熟女操逼| 大学生口爆吞精| 一级片在线观看高清无码| 日日操免费视频| 中文人妻av高清一区| 国产无码精品高清| av在线一区二区三区| 91精品国产日韩欧美综合| 日本操色导航| 欧美视频边做饭边橾| 亚洲偷拍自拍在线视频| 久久香蕉网| 另类天堂| 无码外流操逼视频| 国产精品自在自拍视频| 91狠狠综合久久久久久| 一区久久久二区| 免费看污网址| 欧中美三级一区二区三区| 97超碰色色| 亚洲欧洲中文日韩女优乱码| 亚洲日韩美国人妻| 99激情视频| 亚洲最大的黄色电影网站。| 日韩无码久久熟女一级片| 超碰在线在公开超碰在线在公开| 亚洲人综合19| 国产无码精品高清| 大香蕉五月天| 国产精品 午夜福利| 97就爱干| 操国产高清| 成人美女av| 久久久久成人蜜桃精品| 久久国99999| 精品十八在线观看| 中文字幕日韩精品久久| 亚洲五月婷| 欧美性区| 亚洲男人天堂2017| 天天操天天射天天日| 中文字幕在线日亚洲9| 日本一区二区三区精品| 久久九九热| 国产又黄又粗又猛大片| 精品久久人妻成人网| 91亚洲不卡一区| 91精品少妇搡搡搡| 乱伦一二三区| 青青草中文-久久青草精品一区二区三| 欧美性,亚州色| 青青草原香蕉日本Ap| 日韩字幕一区| www.婷婷五月天| 中国熟女91| 欧美不卡在线一区二区| 6080yy午夜理论三级一区二区三区无码 | 100啪啪视频大全| 成人AV在线电影| 素颜老阿姨乱情色| 被窝影院午夜看片无码| 先锋精品av色鲁| 久久久久极品| 欧美日本中字另类在线| 嫩草 人人网精品| 射久久| 日韩啪啪视频| 性爱av在线免费观看| 99re在线观看| 超碰免费97| 婷婷五月天激情四射| 亚洲 欧美 综合 91| 男女做爰猛烈动高潮A片免费应用| 九九av| 天天影视91看看| 日本性爱少妇| 国产精品午夜福利视频| 国产精品毛片?v一区二区三区| 美女黄页| 国产 日韩 欧美一区| 国产欧美日韩在线观看麻豆传媒公司| 欧美精品系列| 第一高清av中文字幕| 豆1无夜无码| 欧美一级特黄淫片在线观看| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 麻豆国产97在线| 97综合在线观看| 蜜臀久久99精品久久久久久无删减 | 午夜精品久久久久久久99蜜桃一| 91在线/欧洲| 欧美,日韩综合久久| 欧美aⅴ99久久黑人专区| 熟女这里只有精品6| 神马久久中文字幕| 国产欧美成人第一页在线观看| 艳尻美人妻| 久久久久幕乱码| 91殴美| 欧美少妇一区二区三区| 日韩精品人妻中文字有码在线| 欧洲欧美视频一区二区| 青青草玖玖爱| 国产精品亚洲美女久久久久| 老熟乱一区二区三区四区| 屌色在线97视频| 亚洲情色综合| 口爆欧美91| 日本丝袜人妻内射| 亚洲狠狠入| 欧美午夜精品久久久久久3D | 日韩欧美麻豆大片| Sekablack无码一区| 欧美色一二三| 乱伦系列一区二区| 久久区| 东京成人一区| 18禁超污无遮挡无码免费网| 欧美天天综合在线| 躁躁日曰躁2020| 国产小黄片在线免费观看| 91在线观看,天天综合| 久久超碰久| 久久久久久人妻一区精品色欧美| 蜜桃臀久久| 性色综合网| 欧美色图片91| 久久亚洲精品成人av| 男人久久天堂| 99蜜桃臀久久久欧美精品网站| 精品一区二区人妖| 中文字幕三四区| 蜜桃色院一区久久| 色色99| 操逼免费视频无码国产| 亚洲中文字幕熟女少妇一区二区| 东京成人一区| 亚洲色婷婷| 黄色AAAAA欧美| 欧美不在线| 蜜桃丰满熟妇av无码区不卡| 亚洲 91 在线| 插欧洲美女欧美精品| 伊人天天久久动态图| 天天综合网亚洲综合网| 亚洲情色一区三区| 久草五月| 亚洲精品啪视频| 色色毛片| 色97干| 麻豆黄站| 97超碰逼| 中日无幕一二三四区| 免费精品福利在线观看| 日韩无码操逼片| 色噜噜国产精品视频一区二区| 91麻豆一二三区| 欧洲综合视频| 久久久久免费少妇| 在线观看黄色电话| 激情抓乳插进去啪啪啪日韩 | 亚洲无码成人精品| 欧美黑人熟妇精品91| 熟女91网| 久久亚洲色图中文字幕| 中美日韩毛片| 99超碰色| 嗯啊不要啊在线 | 免費黃色視頻觀看一| 多毛小伙内射老太婆| 中文?日韩?免费?精品| 天天综合色| 色色色天美视频| 日韩免费在线视频观看| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 亚洲国产97| 亚洲午夜精品久久久中文影院| #NAME?| 欧美 日韩 另类 亚洲| 亚洲AV乱码专区国产噜噜亚洲| 综合久久99| 91超级碰碰碰| 婷婷啪啪| 大香蕉伊人色偷偷在线| 久久久一级| 亚洲一区深夜| 久久久久无码| 青青草吊丝| 久久男人网| 激情四射婷婷六月天| 亚洲啪啪啪啪视香蕉| 亚洲91大片| 天天草AV| 深夜激情| 日少妇视频| 曰韩人妻中文字幕在线| 日韩性爱小视频| 精品国产三级av韩国在线| 澳门黄片一香蕉视频| 秋霞一级A片黄色视频| 欧美日韩电影成人在线| 福利视频一区二区微拍| 国产高清成人传媒影视| 成人在线日韩| 色av中文字| 久草新免费| 欧美熟女逼久久久久久| 男人的天堂VA| 99久久久无码国产精品性啊聊| 亚洲欧美国产va在线播放频| 精品国产一区二区三区香蕉欧美| 99在线无码精品秘 入口黑人| 新婚人妻扶着粗大强行坐下| 九九激情网| 欧美美女自慰一区二区三区| 欧美日韩国产男人| 尤物视频网 刘玥| 极品人妻少妇综合| 伊人影院日本| 超碰在线观看av不卡| 国产精品久久久久综合| 久久人妻丝袜一区二区三| 久久亚州高清| 97天天插| 99re免费| 欧亚乱色熟女一区二区| 狠狠狠狠狠狠| 性色国产东北露脸精品视频| 97 国产精品| 97久久久| 日本国产高清色www视频在线| 九九激情网| 99re95| 国产精品白丝www| 无码137片内射在线影院| 深夜国产一区二区三区在线看 | 老司机深夜18禁污污网站| www黄片免费看com| 97色插| 亚洲 欧美 综合 91| 欧美少妇色图| 日日碰狠狠添天天爽超| 91 国产丝袜在线放观看| 超碰在线1234区| 日韩无码人妻| 爱我干综合| 成人熟女区| 日本色日夜干| 黄色片大香蕉| 久久伊人青青草| 91网站18禁| 欧美亚洲日本视频久久久| 18一区二区三区| 少妇人妻在线| 色狠狠 - 百度| 夜夜爽妓女| 久久精品区| 国产69精品久久久久99尤物| 91在线限制级| 国产精品福利视频| 无码自拍SM| 九九自拍伦理| 无码人妻一区二区三区色欲aⅴ| 狠狠狠狠狠狠| 美女上床网站| 成人三一级一片aaa| 蜜桃中文字日产乱幕4区| 亚洲色婷婷综合久久久久中文| 亚洲蜜乳av| n1038 一二三区| 91色拍| 色五月婷婷中文字幕| 搡老女人老91妇女熟女| 美国一区二区三区视频| 麻豆人妻少妇在线免费观看| 99热| 美女啊啊啊啊啊啊啊| BBBBB97COM| 爱我干综合| 91精品国产长腿丝袜美女| 亚欧日韩成人| 欧美熟妇亚洲版| 18禁无码永久免费无限制| 夜夜操老骚逼视频网站| 欧美综合自拍| 91蜜臀熟女| 97综合在线| 亚州色交| 欧美v日韩v亚洲v最新在线| 在线观看一卡二卡| 久久区| 久久人人妻| 99国产精品| 精彩视频日韩| 操逼网站网站| 操人妻逼91| 久久天天艹| 丝袜亚洲91| 欧美日韩性爱无码| 蜜臀久久99'精品久久久| 亚洲一区二区中文字幕| 91精品国产91久久久久久久久久久久| 色香色欲天天综合网天天来吧| 美女上床网站| 欧美性爱五月天| 色姑娘综合网| 精品美女在线视频| 国产av又色又爽又黄| 亚洲欧美综合网站| 五月天激情影院| 亚洲97精品| 9热9热综合网| 激情无码日韩| 亚洲天天天| 97久精品| 精品国产91av一区二区三区 | 亚洲有码第一页| 激情五月天社区| 精品熟女呻吟久久91| 亚洲精品天天影视综合网 | 久热伊人| 亚欧免费观看视频| 超碰97欧美日韩| 婷婷综合在线| 一个色导综合| 久久熟女嫩草成人片免费| 亚洲人人操| 夜夜操美女| 天天日骚逼熟女| 久久色人体| 中文字幕一区二区三区高清| 日日躁天天躁狠狠躁| 67194无码不卡| 久久精品店| 三久久久四久久久久| 久神马| 天堂蜜桃无码视频一区二区| 亚川综合视频| 日逼97| 老女人老91妇女老热女| 大香蕉久操| 成人无码在线超碰网| 9精品久久久久| 精品176精品2| h在线看免费版在线看| 青娱乐欧美激情一区二区| 日日躁夜夜躁狠狠躁超爽| 自拍视频大全亚洲专媒视频/一区二区三区 | 韩国一级婬片A片无码天美 | 日韩精品操少妇| 99只有精品| 久久精品国产亚洲AV嘿嘿| 亚洲欧美高清| 久超碰这里只有精品| 天堂精品小草| 超碰三级秋霞| 秋霞一级视频在线观看免费| 欧美一二三级精品在线| 国产AV中文| 99热99re6国产在线播放| 亚洲色图a| 亚洲色五月| 牛黄色久午久| 不卡一区二区日本视频| 一级做受视频免费是看美女| 日本大香蕉综合网红本杳社区| 色拍偷亚洲| 99国产精品久久久久久久成人热 | 综合操逼| 久久久精品电影| 色综91| 九九热精品视频六| 久久 久久国内精品亚洲| 久插综合| 高树玛利亚无码流出| 97电影院超碰| 91一起操| 丰满人妻av一区二区三区| 麻花豆传媒剧国产MV出差| 中文字幕欧美日韩三级| 久热这里只有精品9| 后入日本1234| 中文字幕乱偷人妻久久艾草网| 欧美中文字幕一区| AV色天香在线| 你操综合| 夜夜爽爽爽| 五月丁香影院| 午夜天堂精品久久久久91| 91精品国产高清久久久久久,亚洲成人 | 天天热精品| 久久久久78| 欧美天堂超碰97| 1二区9| 91欧美美女日韩国产婷婷| 欧美在线色图| 另类av天堂| 东北女人被操| 国产天美传媒精品| 久操在97| 久久久久久久久国产| 一区二三区四区视频大全套| 肉丝中文无码高清| 安微少妇操BBB| 麻豆天美在线| 国产精品9999| 国产美女高潮| 伊人网免费视频| 天天懆天天日| 日韩一性一交一A片俄罗斯| 中文字幕123| 激情五月天社区| 色综合色综合网| 女人的久久久| 啊好爽受不了无码| 欧美日韩大陆黑人少妇99| 啊啊啊好舒服视频在线观看| 亚洲精品人伦一区二区| 大香交| 777超碰| 少妇综合| 亚洲图片婷婷五月天| 大伊香蕉在线视频免费| 五月激情小说| 精品久久久久黄少妇| ai欧美亚洲小说| 亚洲AV不卡在线观看| 美女十八禁| 在线午夜成人无码视频| 激情抓乳插进去啪啪啪日韩 | 国产成人91一区二区三区| 操www| 亚洲偷拍自拍在线视频| 久操综合在线| 神马久久久久久久久久| 亚欧美无遮挡| 亚洲自拍偷拍视频在线| 国产熟女乱论| 亚洲色图超碰在线| 国产少妇高潮| 欧美激情精品| 在线观看无码三级少妇| 色婷婷基地| 亚洲精品骚逼| 天天综合网~91| 74成人在线| 色五月激情网| 人妻无码久久一区二区三区免费| 熟妇女伦乱视频视频| 3PAV乱伦视频| 亚洲天堂无码| 91在线免费观看处女| 激情情色五月天| 国语av狠狠色丁香婷婷综合激情| 97欧美性爱| 亚洲最大的黄色电影网站。| 亚洲脚交| 秋霞网—男女啪啪亚洲免费体验区 | 亚洲天堂资源网| 人妻一区视频| 久久人妻四季| 91性网| 日本操嫩b网| 亚洲美欧999| 亚洲高清欧美总合| 在线观看AV片| 吉川爱美98堂在线| 精品人妻一区二区三区免费视频| 国产对白刺激视频| 精品91摸| 九九九999久久久网站| 天天干人人干天天日97| 日本免费一区二| 夜夜夜爽www精品视频| 成人精品一区二区91毛片不卡| 国产黄a三级三级三级av在线看| 欧美色吧综合| 欧美不卡二区| 欧美日韩国产电影| 百度百度日本操逼| 夜夜操狠狠操| 99热线麻豆| 日本操嫩b网| 亚洲一二三| 久久性爱视频99| 91天天日| 男人天堂欧美| 久久一二三四五六七八九区区区 | 欧美综合加勒比在线| 青草成人免费视频一COm| 精品国产一级久久| 亚州Av天美传媒| 青娱乐亚洲自拍| 色综和网| 日本免费中文字幕在线| 97玖玖超碰| 日本韩国国产精品一区| 久久久久密| 九九碰九九爱97超| 校园春色之综合网| 超碰在线一区二区三区| 中文字幕五区| 日夜伊人网| 天天操av懂色| 激情综合网亚洲| 国产精品91一样| 熟妇综合一区二区三区| 精品久久久中文字幕不| 国产精品久久久吖| 精品久久久久瑟瑟| 日韩免费簧片| 日韩精品人妻中文字幕久久久| 人人干人人操人人爱| 麻豆天美传媒在线视频天堂| 国产传媒午夜理伦精品| 青青草白白色| 91人妻做a观看视频| 中国熟女91| 激情五月天社区| 日韩精品午夜操呦呦不卡影院| 色五月婷婷麻豆在| 亚洲天天在线| 91麻豆天美传媒HD| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 午夜大香蕉| 亚洲全色网| 欧美一区二区传媒| 日本东京热加勒比久久| 男人天堂无码| 亚洲欧洲偷拍一区| 国产兽交视频在线播放| 性欧美精| 99精品久久| 亚洲影院成人| 97碰碰日本乱偷人妻中文的| 一级啊性爱在线视频| 人人妻人人爽一区二区三区| 久9久| 国产精品一区午夜福利| 97国产中文| 艳美熟妇先锋一二三区| 亚洲 欧美 制服 另类 自拍| 蜜臀aV午夜一区二区三区| 九九色热| 午夜人人操| 九九九久| 97干在线看| 啪啪啪精品视频| 啪啪自拍九九综合| WWW.加勒比人妻一区不卡.com| 亚洲色图亚洲无码强奸乱伦| 中文字幕在线免费观看 | 天天综合网合集91| www鬼畜国产男人的天堂| 久久无码成人| 亚洲熟女综合一区二区| 亚州综合图片| 韩日精品四区| 国产宅男宅女在线观看| 中文字幕第2页| 人妻熟妇久草在线| 日韩成人色图| 一起草精品人妻| 91啦人妻| 超碰在线免费一区二区三区| 久久超碰98| 蜜臀久久99精品久久久久久久久| 中文字幕中文字幕一区二区| 人妻一区二区三区熟女| 熟女精品一区二区在线观看| 欧美色三级片91| 日韩AV一起草| 日韩精品国产一区二区| 伊人91| 日本天堂在线播放| 中文字幕制服欧美久久一区| 99热99色| 国产精品呦一区二区三区| 在线综合网| 五月天久久人妻| 桃色人妻在线视频| 夜夜狼人妻| 五月丁香在线| 欧美视频中文字幕区| 亚洲视频1区| 亚洲欧美成人网站AAA| 91久久国产精品| 91N综合网在线| 青青草日本中文字幕| 国产精品一区人妻精品阁在线| 熟妇操花| 日本欧美一区二区三区免费| 人人人摸人人| 天天日天天干天天操| 日韩精品午夜操呦呦不卡影院| 国外91| 中文字幕人乱码中文字的预防方法 | 国产熟女无套内射| 九九这里只有精品| 美女丝袜激情小说| 高潮嗯啊性感美女久久久| 国产怡红院| 亚洲天堂综合AV| 丁香五月激情啪啪| 亚洲欧美精品福利在线| 欧美日韩操逼动图| 激情网色| 精品国产人成在线| 欧美精品一区二区少妇免费A片 | 久久国产精品m码| 国语精品av| 国产精品伦理| 91 偷| 国产精品一区二区密臀| 老熟女天天操| 大香蕉中文网| 传媒在线观看一区二区三区| 综合网少妇| 肥佬影院91| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 97久久久久久久久久| 久久久久久久久久久精| 国产夫妻性生活视频| av橘色网站| 亚洲欧美综合网 | 91 综合网| 欧美97爱| 亚洲AV麻豆Aⅴ无码电影一| 免费家庭乱伦视频| 91深夜夜| 竹菊影视国产一区二区| 午夜男女爽爽爽在线视频| 超碰91在线| 婷婷亚洲中文字幕在线| 岛国小电影| 免费看污网址| 九热超碰| 男人天堂2030| 成人一二| 无码精品久久久天天影视| 欧美亚洲日本视频久久久| 国产亚洲色婷婷久久99精品91| 淮穴色AV| 99在线观看无大码| 99久久9| 色香天天| 欧美传媒| 18禁超污无遮挡无码免费网| 久久激情视频| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 亚洲电影91| 久久久极品| J?P?NESEHD熟女熟妇伦| 国产最新小视频在线播放下载| 亚洲欧洲激情卡通另类文学四射小说网站 | 99xav| 天美传媒精品一区二区三区| 97碰久久| 熟妇的味道HD中文字幕| 日欧操屄视频| 蜜臀亚洲中文| 国产免费一区| 91天堂网| 一类无码操逼视频| 激情五月婷婷| 青女在线| 久9无限国产| 国产精品成人福利在线| 能看的av|