色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 三级片网站在线播放| 日本九九久久99| 91精品国产麻豆国产自产在| 91精品国产91久久福利| 亚洲综合大片| 久久97资源 网| 麻花传媒免费网站在线观看| 激情欧美97| 丰满翘臀美女影院视频| 自拍偷拍 日韩无码| 亚洲资源站| 韩国女主播青草在线| 国内自拍 日韩激情 99| 家庭乱伦国产| 高清无码久操视频| 91女日逼| 佐山爱中文字幕| 色五月激情综合网| 亚洲国产精品有声| 97精品| 精彩久久中文| 精品九九九九九九九| 色婷婷狠狠18禁| 无码直播久久久| 97视频www| 久热69九色熟妇97| 久久婷婷视频| 青青草日本无码| 久久免费99精品久久久久久| 人妻精品视频一区二区三区| 日韩精品午夜操呦呦不卡影院| 丝袜无码a片| 日韩高潮一区| 亚洲nv男人的天堂网| 成人电影一区| 射 色综合| 人妻中文在线| 欧美天天谢综合网| 国产精品久久蜜乳av| 超碰超碰95| 久久艹逼视频| 欧美日韩国产在线| 天天拍天天操| 日本天堂网| 激情第四色| 亚洲欧美激情在线视频| 中文字幕一区 二区三四五 区日 日骚| 色噜噜狠狠色综无码久久合欧美| 久久丁香| 67194无码不卡| 蜜桃视频一区二区三区| 人人妻人人爽一区二区三区| 东京热天堂网| 色综合色色| 久久人人妻| 夜夜嗨AV蜜臀av| 人人操天天爽| 黄久在线| 亚欧免费观看视频| 九九热免费视频| 极品丝袜无码| 色香伊人| 人妻丝袜日本| 亚洲成人性| 精品性爱无码在线播放| 奸色色 男人天堂 天天射| 国产天天骚| 手机av亚洲丝袜美腿日韩第一页二页| 人人妻人人澡人人爽久久av| AA级电影三区| 亚州精人品大香蕉| 久久久久密臀视频| 午夜性刺激视频免费观看| 午夜福利激情在线视频| 欧美亚洲国内自拍| 日本孕妇孕交| 男人天堂电影院| 免费av高清无码| 国产女人91精品嗷嗷嗷嗷| 91大胆欧美| 日韩精品电影| 国产精品午夜AV完会免费| 国产黄色在线播放观看| 久久五月综合| 欧美韩日精品99综合| 国产精品乱码久久久久| 丁香六月综合激情| 亚洲综合另类色图| 欧美性爱免费短视频| 人人操人人摸人| 国产农村妇女精品1区二区| 欧美超碰人妻97| 香蕉视频欧美一卡二卡| 日本中文字幕在线电影| 精品国产久久乱码| 日韩Va亚洲va欧美Ⅴa久久| 6080yy午夜理论三级一区二区三区无码| 9999亚洲精品| 久久精品福利影院| 少妇色综合| 天美精品原创av片国产| 五月婷婷综合激情| 九热久| 欧美综合区| 九区国产| 在线无码网站| 久久久久久久久久黄色网| 欧美国产婷婷久久| 色九月| 亚州欧美综合| 国内精品伊人久久久久影院会| 富二代亚洲精品99| 黄片免费日韩| 91在线美女| 600国产精品视频| 国产91久久九九免费精品无码| 欧美 日韩 另类 亚洲| 日日夜夜免费| 最新AVzaixian| 超碰色97| 亚洲男人的天堂AV| 草草影院最新网址| 97久久国产精品| 国产高清吃奶免费视频网站| 中文字幕三四五区| 婷色五月天| 精品人妻一区二区三区不卡断| 亚洲av无码成人精品国产| 在线观看啊啊啊啊啊| 久久久九九网站| 麻豆av一区二区| 六月色色| 国产亚洲精品久久久久小| 少妇同性| 亚洲一区二区精品福利| 日本一二三免费久久| 人人操人人摸人| 欧日韩一二三f区| 99无码视频| 精品久久久久久中文字幕视频免费| 精品国产一区二区三区av在线资源| 欧美日韩制服| 欧美 传媒 麻豆 日韩 偷拍| 免费看黄视频亚洲网站| 熟妇一区,二区,三区。| 精精夜夜| 熟女字幕| 好吊色综合| 中文字幕乱码人妻一区二区三区,99精品| 欧洲亚洲国产综合在线| 九九久精品| 久久人妻视频| www亚洲免费| 欧亚揄拍偷拍精品视频 | 日本欧美成人片AAAA| 999精品乱码| 国产精品网站www| 国产成人无码网站在线视频| 翔田千里无码一区| 日韩欧美三级| 97色涩| 操逼操操操91| 免费看黄片现成| 97久久久久久久久久| 亚洲美乱| 亚洲中文字幕精品久久久久久直播| 美女诱惑一区| 亚洲同性aV综合| 黄色不卡视频| 熟女丰满人妻一区| 97干在线视频| 在线无码操| 丰满美女一级毛片在线播放| 色久桃花影院在线观看| 欧美性少妇| 亚洲欧洲无码一区夜| 激情99| 在线一道啪| 97在线免费视频| 加勒比无码毛片| 久久久久久久国产| 亚洲国产综合久久久性感熟妇| 偷拍自拍在线视频观看| 操逼逼一区视频| 色色九区| 五月天日日操夜夜操| 亚州色图欧美| 欧美后入视频| 亚洲成人精品久久久| 婷婷综合五月天| 无码免费精品高清| 日本一区二区成人在线| 色色色色日本| 天堂中文资源在线bt| 日本性爱视频一级| 久久国产AⅤ| 国产精品国产精品国产| 97国产超碰| 丰满人妻一区二区三区| 久操国产在线| 天天爽天天操啊啊啊| 日韩成人人妻网站| 香港久久久| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 玖玖综合.com| 日本三级人妻a人妻一在线| 色播五月丁香| 天天欧美欧美亚洲网| www久久99| 中文字幕 码精品视频网站| 操逼逼无码| 美女自卫慰黄网站免费| 99视频精品| 国产久久久久久久久一区二区| 青青草丝袜在线视频| 夜夜躁狠狠躁日日躁av| 亚洲精品啪视频| 亚洲 一区二区 自拍| 色五月综合网| 一区二区 日韩 欧美 国产 传媒| av 模特一区了| 久久久久9999精品九九九| 国产污视频麻豆传媒一区二区| 99久久无色码| 91n.欧美| 国产精品人妻免费精品| 成人a大片在线观看| 国产精品69人妻无码久久久| 8050午夜少妇无码| 少妇二级| 一区二区三区 丝袜高跟| 午夜福利在线合集| 久草精品在线| 大JI巴好深好爽又大又粗视频| 精品福利| 蜜乳AV一区| 亚洲成人综合在线| 久久久精品久久| 欧美色综合网| 国产亚洲深夜激情| 巨爆乳肉感一区二区三区竹菊影视| 日本在线一二 | 夜夜爽妓女| 国产精品视频| 伊人九九九| 色综合一本| 日韩欧美午夜视频在线| 久久手机好看网站| 国产精品高朝久久久久久久| 天天综合中文字幕 91| 久久亚洲中文字幕视频| 影音先锋国产精品| 色婷婷蜜臀av| 99热一区二区三区四区| 亚洲国产精品99久久久| 天天干,夜夜爽| 男人天堂站| 亚洲日精品| 玖玖爱在线视频免费观看| 亚欧Av| 美日韩一卡二卡三卡免费人妻精品| 熟妇高潮精品一区二区三区下载| 91黑丝在线| 一区二区三区 日韩欧美| 久久黄黄| 超碰97久| 在线看片国产精品每日更新| 欧美青青视频| 日韩性爱免费观看视频| 欧洲乱码一区二区| 国产熟女精品一区二区| 天天综合精品| 凹凸 69堂 在线播放| 免费自拍三级综合| 区一二区日韩亚洲乱码av电影| 久久久久久久久久久久97| 国产精品爱欲| 久久夜色一区二区| 91精品国产91久久青草| 丁香六月激情| 玖草在线视频| 性站 | 人妻一区二区三区视频 | 91成人无码| 亚洲一区日韩| 日日骚av| 亚洲成人免费在线| 久久久性少妇| 99热婷婷| 亚洲在线欧美| 欧美中文字幕男人天堂久久精品| 偷拍综合网| 精品一区二区三区蜜桃臀赵总 | 制度丝袜99| 偷拍超碰| 久久久久亚洲av综合波多野制衣| 亚av顶级裸体一区二区三区四区五区| 国产日韩在线播放av| 麻豆区99999| 18啪啪手机免费性爱| 欧美丝袜激情| 啪啪视频亚洲第一| 91美女视频直播| 国产67194| 综合网亚洲在线| 不卡免费av在线播放| 超碰97玖玖爱| 亚洲五码一区二区三区| 国产亚卅97| 天天日天天干天天操| juliaann精品熟女一区| 先锋色眉乱伦资源| 欧美色综合图片| 日本性爱少妇| 天天日天天干天天操| 色哟哟-国产专区| 成人性爱视频在线看| 大香蕉青青9| 天天色播| 一个色导综合| 久久风骚城市| 欧美性区| 久99久视频| 香蕉视频欧美一卡二卡| 欧美性爱网97| 后入美女国产| 国产理论视频在线播放| 9久久久久久| 国产av白丝| 欧美综合自拍| 国产自偷| 亚洲精品国产精品乱码不卡| 五月天婷婷色色| 成人无码在线视频网站| 狠操91,com| 国模吧 一区二区三区| 91天天综合在线| 色色五月天激情| 国产乱色国产精品免费视| 后入综合久久| 嫩草影院永久在线制服丝袜| 久久免费精彩视频| 99热在线观看| 欧美亚洲激情| 91日韩网站| 亚洲限制级| 欧美熟女少妇| 日韩无码专区| 亚洲成人一区二区精品| 日本国产亚洲一区在线观看| 九久9精品| 东京热大香焦| 欧美 日韩 另类 亚洲| 九九这里只有精品| WWW黄片COM| 日韩无码精品综合久久| 超碰精品日韩欧美国产| 五月天伊人网| 久久伊人影院| 亚洲中文字幕熟女少妇一区二区| 国产蜜臀在线| 五月天九九日国产精品一区二区三区| 欧美色日本| 啪啪视频mP4| 99视频内射三四| 久草婷婷| 欧美最婬乱婬爆婬性视频| 日韩三级一区 | 国产精品情侣啪啪| 婷婷四五区| 99这里只有精品| 超碰av在线| 青青草天天亲夜夜操网| 中文字幕av乱伦| 18禁的网站在线| 一级黄色性爱A级片| 在线观看一级α片刺激高潮视频| 操屄日韩| 999精品久久久久久久| 久久久一二三四区| 91爱看| 久久精9| 欧美国产有色电影| 啊啊啊不要嗯嗯在线观看| 97色诱| 欧美老妇女内射网址| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 九九玖玖精品| 天天日日本| 嗯嗯嗯啊啊啊操的我好爽| 91女网站| 懂色AV中文| 懂色AV中文| 亚洲色图 图片| 美女AV一区二区| 久久久成人精品| 亚洲色综网| 成人性交午夜免费片| 夜夜欧美| 另类图片欧美激情综合| 一区不卡在线观看av| 福利操逼| 伊人色综合网电影| 殴美牲| 啊啊啊啊啊啊啊好爽不要| 欧美少妇高潮久久91| 综合一区二区影视| 97爱爱爱| 免费簧片在线观看| www.超碰| 久操在97| 蜜臀久久久99久久久久 | 色色色日本| xxxx网站亚洲精品| 欧美一区二区亚洲天堂| 有码人妻系列| 日本大香蕉综合网红本杳社区| 亚洲成av人片色午夜乱码| 黑丝内射一区二区三区| 99久在线精品99re8a| 亚洲欧美天| 男人亚洲天堂| 999国产精品999| 大鸡吧尹人在线| 欧美高清在线| 18禁止看精品中文字幕| 国产又操| 91爱看| 91夜色| 国产一级做a爰大片免费久久| 天天摸天天插天天日| 大香蕉在线SuP| 草草草草视频| 能看的AV| 天天天堂影视日韩亚洲91| 国产强奸无码乱伦| 丁香五月激情啪啪| 97欧美久久久久久久| 国产一国产一级毛片古装| 97国产高清视频在线观看| 日韩一级二级| 中文字幕黄色一起草| 在线色导航| 午夜精品99久久久久传媒| 尤物视频新赏网鲜网色诱网| 淫荡少妇免费| 欧美少妇性乱| 中文字幕一区二区三区字幕| 九九热精品免费视频| 久久男人| 人人操人人狠狠操| 大香蕉日亚洲日本亚大| 久干9操| www.一本大99| 无码精品久久久久久亚洲| 亚洲啪啪性视频| 超碰在线1234区| 国产精品激情久久久久久久| 亚洲欧美日产国产91毛片| 91人人操| 青青草日韩无码| 99久久免费看精品国产一区| 留下AⅤ黄色片| 一区二区三区成人| 亚乱色| 久草精品一区| 可以免费观看的日韩av毛片| 亚洲欧美日韩国产丝袜自拍中文| 俄罗斯一区二区视频在线观看| 天天看综合网| 久久精品国产亚洲AV清纯| 东京热激情视频一二三区| 欧美写真视频一区| 嫩草 人人网精品| 久久久久久99AV无码免费网站| 北条麻妃99精品青青久久| 俞拍久久国应视频| 久久久久久99999国产精品| 亚欧视频在线| 欧美成人精品一区二区男人蜜臀| 亚洲成人免费电影| 99热销国产这里有精品| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | AV老汉| AV一区观看| 日韩精品电影| 天天操综合网| 凹凸视频在线一区二区| 欧亚日韩三区| 乱色视频中文字幕| 青青操网| 97精品网站| 成人看片网站| 日韩欧美福利视频看看| 中文字幕一区二区三四五区日日骚| 你想操日本小逼吗| 超碰97 线线 在现| 曰本熟女视频| 不卡啪啪视频| 中文乱码字字幕在线第5页| 亚洲熟妇无码一区二区三区| 狼狼色丁香久久婷婷综合五月| 精彩久久中文| 伊色综合天堂色97| 色色香蕉| 日本一区二区不卡| 91影视亚洲| 国色天香av| 日韩 欧美 另类 人妻| 少妇色欲综合网2| 久久超碰亚洲人| 日本日皮视频逼| 亚州综合色| 亚洲性少妇| 伊人亚洲国产一成人久久精品,久久| 欧美成人性爱视频在线播放| 偷拍亚洲情色| 妇人噜噜| 国产黄a三级三级三级av在线看| 26UUU欧美激情一区二区| 精品人妻15区| 加勒比av官网在线| 麻豆乱码久久精| 91色久| 五月婷婷六月丁香网址| 亚洲精品97久久| 熟女一区二区三区四区| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 亚洲天堂男人的天堂| 亚洲日韩XXX| 日本不卡码黄色 | 97亚洲自在精品在线观看| yiren97| 国产丝袜视频| 婷婷激情五月| 欧美日韩岛国大片在线观看| 中文字幕在线观看第二页| 日本护士高潮| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 精品二区久久| 国产99999久久精品| 97这里都是精品| 天天影视综合网欧美精品| 欧美啪啪女女| 亚洲一区二区精品福利| 国产宅男宅女在线观看| 性色生活片久久毛片婬片免费放女人一级毛片 | 国产精品无套内谢| 欧美日本中字另类在线| 男人天堂黄片| 草草影院日本第一页| AⅤ片水多多| 日韩性爱小视频| 综合久久9| 蜜臀久久99精品久久久久久婷婷| 1024精品在线| 天天综合97| 91激情| 国产内射爽爽大片| 日本黄大片在线观看视频| 亚洲av青草久久一区二区| 96久久久久| 精品九九九九九九| 国产色产精品在线观看 | 天天日天天舔东京热| 97视频在线观看播放与子乱对白在线……| 夜夜嗨一区二区| 蜜臀久久99精品久久久老,,| 天天淫人人妻日日色| 亚洲男人的天堂V| 青青草伊人久久| 东北女人操比视频| 丰满欧美放荡少妇在线| 久久国产精品m码| 欧美亚洲中文| 国产成人无码啪| 国产色呦呦| 五月婷婷六月色| 伊人国产av| 久久伦理视频久久大香蕉视频| 亚洲综合骚逼| 熟女91网站| 国产精品久久久久久亚洲色欲| 一区二区三区探花在线观看| 欧美日韩性爱视屏免费看了| www.狠狠干.coom | 26uuu成人影片| 日韩精品碰碰| 激情五月综合网| 乱理日韩中文| 成人av在线播放| 亞洲久久直播| 久久天天摸| 免费看污网址| 熟女91网站| 成人性爱av| 成人在线日韩| 一区二区不卡| 亚洲天堂男| 性爱免费视频成人| 日本91白丝| 老熟女中文字幕高清| 超碰97国产欧美| 国产一区二区三区久久久精品| 婷婷丁香在线| 69久久久久久久久久久久久| 亚洲久久久久| 麻豆这里只有精品| 麻豆国产成人精品| 91亚洲色图| 国产一级做a爰大片免费久久| 老熟女91av| 超碰欧美COM| 日韩无码操逼片| 色综合美国| 欧美综合777| 欧美亚洲国产91在线| 人妻中文在线| 欧美性五月| 色y情视频免费看| 大香蕉碰碰| 黄色交缠性感爆操91国产精品免费一区二区三区| 成人精品在线免费视频| 99热这里是精品| 91美女国产在线| 黄色激情电影在线观看| 夜夜操夜夜爽夜夜高潮| 搡老女人老熟女91| 99色色| 狠久久| 亚欧韩av| 伊人久大| 日本3级一区二区免费| 久久亚码| 色网在线视频观看免费| 日韩精品人妻中文字幕久久久| 在线啊啊啊| 欧美日韩岛国大片在线观看| WWW美腿丝袜香蕉中文| 中文字幕乱在线伦视频中文字幕乱码在线 | 美女露胸露奶头| 欧美高清色| 久久精精区一区二区一蜜桃一区二区| 欧美综合天堂| 色综合五月天| 啊啊啊啊好爽好舒服一区二区易域| AV电影在线播放| 超碰色97| 老色69| 色吧 综合| 中文字幕jul-617人妻熟女| 天美av在线| 日韩内| 熟妇操花| 人妻夜爽夜夜爽| 久99热| 天天影视亚洲| 狼人综合婷婷激情四射 | 日日AV加勒比| 亚洲一级性爱视频免费看| 嗯嗯啊好大| 伊人影院综合是一个与深夜成人在线| 九九九九97| 啊视频在线| 久久久久久九九九九| 久久久久国产亚洲一区欧美色图日韩| 肏逼视频日本| 北条麻妃性愛视频| 亚洲大色堂| 岛国毛片手机在线观看| 欧美瑟综合| 国产欧美美女免费观看视频| 日韩免费高清大片在线| 精品一区二区三区蜜桃臀www| ?亚洲伊人伊成久久人综合网| 一本色道久久综合精品婷婷| 91最新综合| 中文字幕123| 亚洲色图欧洲| 青青草字幕AV| www.99热| 精品少妇人妻av久久免费| 国产一二三福利视频网| 闷骚老熟女15P| 国产18精品亚洲精品| 欧美日韩1234| 加勒比久久av| 婷婷色香| 天天干,夜夜爽| 波多野结衣被操50分钟免费视频| 亚洲欧美91| 女人的天堂大香蕉网| 五月天精品| 操逼逼中文字幕| 亚洲色欧美| 久久精品一区一起草| 欧美一区二区日韩传媒搭讪精品| 免费毛片在线播放| 国产91av在线播放| 欧美亚洲今日在线| a人片中文字幕一区二区| AV 少妇 人妻 偷拍| 操逼国产免费| 人妻性爱一区二区| 97超碰大| 亚洲AV色图一区| 女人一区| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 日本性感人妻91| 97亚洲色图| 4虎在线视频| 99精品网站| 91麻豆天美国产欧美日| 亚洲天堂 视频你懂的| 少妇一级婬片免费放一级a性色.| 欧美日韩中文视频播放| 97中文字幕一区| 动漫av中文| 亚欧中文字幕在线视频| 岛国小电影| 久久99热这里只频精品6学生| 欧美日本国产日韩激情视频| 亚洲图片日本AⅤ欧美在线| 在线亚洲欧美| 九九热三级片| 91人妻人人澡人人爽人人精品| 亚洲欧美啪啪| 少妇久久久免费| 久久精品国产久精国产| 试看福利| 超碰在线97国产| 中出789在线视频| 久久这里精品国产99丫e6| 婷婷六月天| 婷婷久久综合久| 欧美v亚洲v日韩v最新在线二区| 一级片在线观看高清无码| 国产精品内射婷婷一级二| 亚洲欧洲激情卡通另类文学四射小说网站 | 嫩草 人人网精品| 激情图片亚洲色图| 超碰97在线 欧美 国产| 人妻插插人妻人| 美女淫穴| 久日91在线| 亚洲综合射| 亚洲女人毛茸茸91| 97精品熟女少妇一区| 免费看片黄| 人人做天天爱| 亚洲成人无码影院| 亚洲一区二区三区AV无码 | 久久久9 9 9精品| 舔人妻中文免费视频| 日1区2区3区2020| 欧美激情在线观看视频| 亚洲日韩电影| 免费少妇一区二区| av在线免费一区二区| 欧美日韩国内不卡| 日本在线一二| 人人污日韩一区二区| 伊人操操| avav青青草久久夜| 97超碰久久| 777AV电影| 手机看av网站在线看| 蜜桃臀av在线观看| 上床不卡网站| 五月天精品| 3PAV乱伦视频| 日韩中文字幕人妻视频| 日本久久精品| 九九英色视频| 四虎免费在线播放| 91少妇| 亚洲97久久精品亚洲| 久久五月天婷婷| 黄色高清久久无码依人| 欧美激情精品久久久| 人妻欧美| 亚洲AV操| 九九九九88| 性色高清..……| 亚洲一区日韩精品中文字幕| 亚乱色| 亚洲国产一区二区三区在线| x97av| 日本孕妇一区二区视频操逼免费看 | 超碰在线1234区| 男人亚洲天堂| 天天草天天干天天日| 观看免费区二区三区二| 国产精品69久久久久久久| 蜜乳中文字幕a在线| 欧美黄片视频在线观看免费 | 黄色片A级一区二区三区| 26uuu国产免费观看| 欧洲乱码一区二区| 韩日欧亚a级| 亚洲国产精品有声| 97亚洲国产影视| 精品少妇高潮久久| 国产精品女生av| 操人妻丝袜高跟| 老熟女阿 国产91| 九色精品视频导航1| 偷拍欧美激情| 日韩97在线| 日本在线播放不卡一区| 黄资源| а√天堂资源官网在线资源| 亚洲综合色网| 密臀国产在线| 激情综合二| 精品176精品2| 亚洲日韩在线a不卡99精品| 五月丁香啪| 欧美草草高清日韩视频| 在线精品福利免费播放| 亚洲欧美一区二区不卡视频播放| 人妻精品视频一区二区三区| 91美女中出| 久久久啊啊啊| 性一交一乱一交A片久久四色| 欧美激色| 免费操逼视频下载| 中文一区在线日| 懂色av色欲av蜜臀av| 美女淫穴| 国产探花日韩援交| 加勒比综合88| 91站街按摩店老熟女熟女| 久久后入制服| 毛片电影一区二区三区| 亚洲伊人青青草| 熟女六十路| 蜜桃午夜视频一区二区| 欧美v亚洲v日韩v最新在线二区 | 欧美日本国产日韩激情视频| 夜精品久无码| 岛国AB视频| 熟妇一区,二区,三区。| 国产成人无码久久精品| 久久久女人| 这里有精品| 97爱爱爱| 中文字幕88av在线| 国产精品美女在线一区| 欧美中字不卡| 丁香婷婷大香蕉| 92久久| 蜜臀亚洲中文| 在线观看免费视频国产| 1024午夜激情男人的天堂| 亚洲欧美在线观看2021 | 90后性网国产欧美| 色香欲综合| 99国产精品在线观看| 亚洲成人性爱网站在线播放| 亚洲 欧美 综合 91| 久久九九综合| 欧美精品精品一区二区| 国产 大胆 对白| 亚洲各类熟们中文字幕| 人妻丝袜日本| 国产熟妇一区二区| 综合久久欧美| 婷婷色综合欧美日韩| 超碰久久草| 五月婷婷六月天| 欧美十八禁视频| 精久久久| 欧美人妻二区三区| 亚洲黄色a级片| 欧美色欧美| 日产成人久久| 天天干天天操天天拍| 欧美黄片免费在线观看视频| 男人的天堂久久| 97干色天堂| 国产又粗又长又爽又色| 欲香欲色| 一二三四区操操Av| 激情图片亚洲色图| 日本色婷婷| 成全在线观看免费观看| 抽插亚洲无码| 九九热精彩视频| 你操综合| 无遮挡猛进视频免费无限观看| 成人午夜高潮av猛片| 91中文字幕在线观看| 欧美性暴力猛交XXXX | 久热网| 蜜桃精品视频一区| 蜜臀国产AV中文字幕| 亚洲中文日韩欧美大香蕉视频| 91少妇| 亚洲色婷婷综合久久一区二区三区| 亚洲永久AV无码精品秋霞| 狠狠操狠狠插| 婷婷五月天激情网| 人人贴人人摸| 乱伦熟女论坛| 夜夜爽夜夜操| 超碰97综合网| 亚洲日产专区婷婷| 欧美欲色| 神马福利久草| 亚洲精品色| 极品白嫩美女白浆成人福利在线看| 国产精品99精品视频网站| 丝袜综合网| 欧美综合色图网| 久久禁| 97欧美色综合| 成人在线午夜视频一区| 人人综合| 内射黑人| 亚洲熟妇无码一区二区三区| 97国产超湿| 国产刺激视频| 九九热最新| 1024日韩| 亚洲精品色| 九九碰九九爱97| 亚洲色综合| 日日操天天操| 色色五月丁香| 婷婷色在线| 五月天婷婷基地| 九九综合| 亚洲麻豆精品二区三区| 六月丁香五月婷婷| 91蜜桃婷婷狠狠久久综合9色| 久久9视频| 99re在线观看| 精品精品精品| 美女露胸露奶头| 91丝袜美女| 夜夜嗨av午夜成人| 青青草手机在线免费观看| 亚洲色图加勒比| 麻豆人妻少妇在线免费观看| 亚州色图狠狠干| 亚洲第91页| 国产蜜臀在线| 亚洲欧美综合图片| 99re99| 亚洲中文字幕熟女| 26uuu国产亚洲综合| 影音先锋每日最新资源在线观看| 亚洲 欧美 制服 另类 自拍| 曰韩操B| www成人啪啪18秘 免费| 久草大| 色婷婷aV一区二区三区麻豆综合| 欧美亚洲影视| 亚洲天堂资源| 97视频免费| 天堂v无码免费视频| 超碰无码加勒比| 国产女生在线| 女同亚洲欧美一二三区久久电影| 久久久av爱| 欧美综合自拍亚洲综合图| 国产精品97视频| 美日韩男女操屄视频| 国产A v无码专区| 91久久久久久| 2019AV天堂| 伊人国产AV| 麻豆国产精品午夜视频| 岛国视频一二三区| 99久视频| 熟女欧美日韩综合婷婷| 国产精品一二三| 日韩欧美亚洲自拍偷拍| 色欲蜜臀AV| 熟妇人妻精品一区二区视频色欲| 99九九久久| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 日韩性爱啪啪视频| 午夜电影在线观看无码专区| 亚洲美乱| nuu12国产麻豆精品| 午夜舔阴达高潮视频免费看| 日韩乱中文 | ji熟女.com| 婷婷久久五月天| 美日韩一二三区| 激情小说在线视频| 久久久久久精品免费看A级| 色999人与兽| 夜夜嗨一区二区三区三州加勒比| 青娱乐999| 九九内射在线| 欧美天天综合站| 国产内射爽爽大片| 91九色首页| 四虎在线播放| av网站在线看| 婷婷丁香六月天| 97超碰总站| 亚洲av国产av综合av卡| 综合色图区| 亚洲 欧美 日韩另类 麻豆| 人人贴人人摸| 亚洲s在线观看| 91色插| 精品人人插人人操| 嗯嗯嗯啊啊啊干死我吧| 午夜男女爽爽大片免费观看| 婷婷六月色| 后入福利| 国产美女mm131爽爽爽爽| 诱惑人妻欧美一区在线播放| 丰满熟女一区二区三区在线播放| 静品嫩模一区二区| 91老熟女91老女人| 久久男人精品| 麻豆伊人网| 超碰97人妻免费在线| 天天影视综合网欧美精品| 久九九九九九九九热| 亚洲中文字母在线播放| 欧美第二页午夜| 操逼操逼逼操操逼91 | 黄片视频观看| 蜜色网色哟哟| 放黄片放3级黄片没穿衣服| 蜜桃臀av在线观看| 熟女91网站| 婷婷五月天在线观看| 易易A毛视频| 99热精品免费| 麻豆91熟妇人妻中文字幕茄子| 成人精品在线| 91美女在线| 9久综合网| 国产精品九九九| 九一屌逼| 一区二区免费电影久久| 韩国三级三级BD在线| 综合伊人激情| 91性生活久久久| 啪啪啪东京| 欧美在线中M| 国产剧情AV不卡在线观看| 色五月AV在线| 亚洲超碰在线| 国产精品第一页国产大屁股视频免费区| 玖玖在线视频| 亚洲97| 久久伊人青青草| 国产高清在线观看欧美| 久久久久96| 韩日精品四区| 边做饭边操逼逼| 91少妇香蕉久久精品| 在线精品福利免费播放| 久久亚洲日韩熟女精品| 色色无码| 亚洲国产精品成人综合| 天天舔天天日天天射| 自拍偷拍2025在线观看| 日韩精品-原创伙伴| 有码免费观看| 操操逼操操逼操操逼逼| 久操免费视频| 久久久久国产亚洲一区欧美色图日韩| 在线无码视频| 综合网亚洲在线| 久久久久中出| 日本欧美一区二区三区免费| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 97综合在线| 亚洲色香| 26uuu欧美| 青草草免费网站av| 美女t无毒不卡不卡| 色综合潮| 亚洲各类熟们中文字幕| 2024年最新色情网站在线观看| 欧美 综合 亚洲| 国产丝袜视频| 成人 日本A片无码8888| 日本久久超碰| 青青草久草AV| 久久综合18p| 睡产熟女乱伦| 国产精品麻豆成人av| 91插B网站| 九九九九九九成人| 久久极品一区二区| 女人喷水视频在线观看| 91无遮挡| 精品视频一区二区| 欧洲一区二区三区免费| 麻豆人妻精品一区二区| 午夜电影在线观看无码专区| 国产一级内射高清视频| 91精品操美女| 曰本91情色| 色噜噜国产在线| 色墦五月丁香| 国产午夜无码片在线观看影视| 91人妻人人澡人人爽人人精品| 欧美热图99| 国产人妻精品一区二区三区秋霞 | 伊人黄色片| 国产一国产一级毛片古装| 欧美三级偷拍| 欧美一区二区三区成人性生活| 嗯……啊…嗯嗯…啊…好舒服| 99热综合| 日韩性爱播放| 日美免费黄片| 国产黄片在线免费观看| 亚洲无码超碰免费| 日本精品五区| 色香天天| 中文字幕福利视频一区二区三区在线观看| 成人片视频| 青青草乱入乱欲视频在线观看| 男人的天堂成人的社区| 情侣开房子拍 日韩无码 女的很漂亮| 俺去俺来也在线www| 思思热免费在线视频| 蜜乳成人AV| 日本熟女不卡视频| 欧美乱伦专区| 人人操人人色网| 日本一区不卡| 亚洲欧美另类小说| 超碰色97| 丁香九月婷婷| 超碰在线一区二区三区| 久久精品国产亚洲av水密被窝| 国产尤物在线三区| 欧美后入式| 快播电影网日韩新片| 男人天堂导航| 日韩久射综合| 亚洲综合在线第一页| 少妇久久久久| 久久精品人妻一区| 欧美人与动性人交a| 国产福利一区二| 久热影视| 99国产在线 精品 视频| 黄片色区软件| 欧美成人黄网色网站| 激情五月天视频| 美女超碰978| 国产有码一区| 欧美色图 人妻| 丁香7月婷婷|