国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成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
返回資訊列表
国产精品久久久亚洲一区| 亚洲熟伦熟妇AV无码春色| 校园春色 亚洲| 日韩精品色呦呦| 亚洲精品 大香蕉| 九九久精品| 亚洲综合另类小说色区亚洲成av人片在www | 狠狠干综合| 色婷婷综合久久中文字幕雪峰| 欧美啪啪天堂| 狠狠色噜噜狠狠狠狠狠色综合久久| 91丝袜在线观看视频在线观看| 青青草在线视频美女| 日韩免费看在线黄色片| 中文字幕精品专区搜索结果91| 97中文字幕一区| 欧美日韩插逼视频| 大香蕉天天看妹子| 国产综合色精品在线观看| 色情乱伦AV| 天天热精品| 国产精品麻豆成人av| 在线观看中文av字幕| 日韩情色AV| 男女国产精品| 丁香五月AV| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 久久精品一区二区三区四区五区| 丰满的三级少妇欧美久久久| 一二三四区电影| 蜜乳AV网址| 久草精品视频| α√在线| 97干在线视频| 妇女视频网站| 精品一区二区三区四区女| 日韩特级毛片免费观看全集| 午夜福利免费福利视频| 乱伦Av网| 色欧美在线| 99久热| 国产麻豆91欧美一区二区久久婷婷国产精品| 亚洲va有码在线天堂| 999精品国产高清一区二区| 五月天婷婷影院| 亚洲双插| 精品国产少妇高潮视频| 狠狠婷婷亚洲中文综合久久| 婷婷五月天无码| 青娱乐二区免费| 一区 欧美 日韩 麻豆| 中文字幕一区二区三区字幕| 日韩专区久久久| 中文字幕交换人妻| 易易A毛视频| 神马久久久久眼| 精品视频在线观看精品| 亚洲图片 激情小说| 国产色精品午夜大片| 超碰97人人乐| 青青操97| 伊人网在线点播| 国产男女无套视频免费观看| 亚洲天天操| 亚洲精品骚逼| 亚洲成?V人片在线观看福利| 成人一级性爱| 欧美大波激情xxxx| 国产自产自拍| 亚洲在线a| 婷婷亚洲五月***久久| aV中文麻| 超碰久久草| 免费久久精品麻豆一区二区av| 日本不卡中文| 久久久久久91香蕉国产| 日韩午夜啪啪视频| 日韩性爱再线视频| 翔田千里Av在线| 国产真实野战在线视频| 玖玖爱免费观看视频| 91香蕉国产尤物视频| 精品久久久久黄少妇| 成人麻豆av电影网站| 精品免费囯产一区二区三区 | 久久久精品九| 亚洲欧美日韩国产丝袜自拍中文| 亚洲无套久久嗯嗯| 亚洲操逼视频网站| 蜜桃视频成a人v在线| 久久粉色| 人妖欧美一区二区| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 老司机天天操| 国产国产亚洲一二三久久| 国产传媒美日韩av| 精品久久久久久亚洲| 91成人久久 | 操逼逼福利视频| 久久性爱视频免费看| 亚洲自拍青操视频| 久久久久人| 亚洲男人的天堂AV| 亚州综合色| 亚洲综合 欧美| 性交一区二区在线播放| 国产偷仑| 美日韩在线不卡人妻| 国产精品青青草| 亚洲欧洲网站免费观看| 1024人妻熟女一区二区三区| 尤物黄色在线观看网站| 欧美大香蕉久| 日韩成人性日韩成人性爱视频在线免费观看 | 少妇啪啪自拍| 国产亚洲精品无码三区| 精品人妻中文字幕4399| 国产AV无码AV| 亚洲操人| a v网站在线播放| 久久久精品电影| 男人天堂电影院| 欧美啪啪天堂| 啊啊啊啊,啊啊好多水| 99在线啪| 精品超碰色| 中日韩久久久免费看| 97伦乱| 国产成人天堂| 91nbbbbbb| 美日韩成人| 激情五月天色色| 日韩成人性爱AV| 日韩国产成人自拍视频| 日本熟妇人妻一区二区三区| 日本成人A片网站| 色天使亚洲综合在线观看| 一中国女人毛片水真多| 野狼福利社区| 欧美传媒| 欧美日韩91| 激情六月婷婷| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 在线岛| 密乳AV免费观看| 亚洲免费人妻在| 五月天色图| 欧美性Fer办公室秘书| 久久久97| 美美91成人国产精品欧美精品久久久久久久| 欧美色图天堂网m| 午夜成人福利影视| 精品少妇一区二区| 多乙久久久久久| 97在线资源| 欧洲一区二区三区四区在线观看| 欧美区亚洲区偷拍区| 欧美日韩国产色图在线| 丁香五月久久| 精品无码秘 人妻一区二区| 综合久久久久久久综合网| 国产67194| 天操天操夜操夜月月年年操操 | 欧美色青| 清清一区二区三区四区不卡视频| 亚洲激情视频| 国产精品久久久 | 嗯……啊…嗯嗯…啊…好舒服| 啪啪啪男女亚洲中文字幕99| 五月婷婷丁香| 啊啊啊啊啊啊啊国| 中文字幕久久精视频久久大全| 欧美九一精品久久久熟妇| 91久久青青草原精品| 九九人人操| 久久精品国产97欧美精品亚洲 | 97亚洲中文| 曰韩av中文字幕专区| 啊啊啊久久久视频| 九九色逼| 精品毛片av一区二区| 中文久久96| 九九热精品视频六| 六九九九| 久久久久国产精品片区无码直播| 欧美加勒比| 中文一区二区婷婷视频| 日韩 欧美 视频 在线 一区| 久久老熟女| 精品少妇后入一区二区三区四区人妻巨乳 | 呦呦一区| 超碰97.com| 超碰 另类 欧美| 亚洲欧美中文日韩视频中国语| 无码久久国产| 天美传媒婬乱在| 欧美一级专区免费大片| 美女人妻色网站| 熟女人妇一区二区三区| 日韩不卡一二三四| 在线日韩日本亚洲国产| 激情久久日韩精品中文字幕麻豆| 日韩少妇丰满亚洲| 亚洲无套久久嗯嗯| 99热66| 性爱综合一区二区| 九久久九九久视频| 蜜屁Av| 久久伊人大香蕉| 日韩偷拍一区二区三区| 99999精品| 暴力av在线| 嗯嗯嗯啊啊啊干死我吧| 欧美情色贴图| 成人熟女视频一区二区三区| 免费黄色片子| 日本久久99| 欧美日韩国产三级黄色| 亚洲色图91| 欧美少妇高潮视频| 亚洲熟女综合网| 啪啪啪综合| 麻豆av一区二区| 94色色电影网| 91看黄片| 日本精品不卡一二三区| 国内精品999| 成人熟女视频一区二区三区| 91男同| 后入式福利| 91亚洲黄色网| 青青草久草| 91性网| 久久内射| 色综合国产在线观看| 久久神马| 无码精品蜜桃一区二区三区ww| 日本三级网页| 久久久影院| 中文字幕文字幕无码一区二区三区电影99| 久热精品在线| 啊啊啊好想要| 国内亚洲高清无码| 九九干| 亚洲 欧美 偷拍 唯美| 美国人人操人人操| 天天干,夜夜爽| 天天摸天天碰天天添青青| 亚洲图片在线| 蜜臀久久99精品久久久| 久久性爱城| 另类av天堂| 久久超碰com| 日韩不卡在线一区二区| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 亚洲欧美啪啪| 国内亚洲高清无码| 中文久久爆乳| 久久久久久久久久久999| 97chaopenrihan| 久草资源在线| 五月丁香六月婷综合成人综合| 丰满少妇高潮无码| 国产精品无码成人精品| 九一屌逼| 玖草在线视频| 99亚亚热| 九九九九九精品视频| 色网在线视频观看免费| 五月天综合网| 9色国产精品一区粉嫩| 操逼网站地址| 99国内熟女露脸视频| 亚洲精品国产精品成人| 五月丁香| 日韩欧视频| 国产操逼逼网| 国产超碰欧美| 超碰av人人人| 亚洲精品九九九| 五月丁香综合| 婷婷五月天激情四射| 另类小说五月天| 99精品高潮| 岛国在线免费视频| 97视频www| 伊人黄色片| 麻豆一区在线| 国产美女口爆吞精| 亚洲天堂人人妻| 懂色中文一区二区三区| 青青草国产亚洲精品久久 | 欧美熟爽综合| 日本三级网页| 国内黄色精品| 欧美一区二区三区另类精品| 91天美免费| 亚洲aV无码成人在线观看| 操熟女91| 国产美女精品| 免费视频a级毛片免费视频| 日日爱99| 国产第二页| 久久精品99| 极品白嫩美少妇在地板上位骑射淫水泛滥| 91麻豆天美传媒HD| 激情综合五月| 色欲av一区二区三区蜜芽| 亚洲啪啪啪啪视香蕉| 亚洲福利中文字幕在线| 十八禁视频一区二区| 色综合久| 国产美女裸体秘 永久无遮挡| 91欧美综合在线| 日韩三级一区| 日本激情免费大片| 一本大道不卡一二三区| 91啦人妻| 亚洲在线欧美| 欧美色图99| 欧美72网页| 午夜免费视频1000| 欧美强奸乱能| 精品九九国产无码| 国产精品久久aV| 另类欧美综合| 骚鸭AV| 欧美天堂第二区| 国产天天骚| 熟女乱伦二区| 超碰人人在线| 日韩欧美国产高清视频| 少妇人妻太紧太深av| 欧美色999| 女优免费一区二区永久| 高跟丝袜AV专区国产| 日韩免费在线观看不卡| 啊啊啊啊啊啊啊啊视频| 四虎影视欧美| 午夜福利合集| 欧美日韩少妇色情| 黄呦呦在线| 亚洲91网站| 区一二区日韩亚洲乱码av电影| 丰满人妻一区二区三区在线| 青青草视频在线观看一区二区| 日韩av熟女一区二区三区成人| 日韩精品人妻中文字幕有码午| 午夜情侣自拍网站| 欧美老妇女内射网址| 九九热五区| 天天碰操中国年青熟妇| 97自拍一区| 久久AV无码1区2区3区| 妇女性内射冈站HDWWWCOM| 自拍六区| 中国AV美女| 飘花国产午夜精品不卡| 一区二区三区四区免费视频| 伦理片秋霞免费影院| 97人人操人人摸人人爱| 天天干天天狼在线视频| 九九热视频在线观看| 屌逼麻豆| 极品出轨视频网站| 精品无码一区二区三区| 一区二区三区黄片免费观看| 亚洲一欧洲中文字幕在线 | 欧美日韩一干二干| 夜夜夜夜久久久久| 秋霞无码av鲁丝片一区| 伊人色综合超碰| 99在线精品观看视频中文| 7月婷婷综合| 在线中文AV| 天天澡天天狠天天天做| 高清国产av无码| 欧美成不卡网| 欧美丝袜91| 一区二区免费电影久久| 狠狠色婷婷7777久| 97日视频| 亚洲精品久久久久久久蜜桃臀| 97超碰热线| 最新精品久久蜜桃| 国产色产精品在线观看| 欧美成人亚洲精品| 岛国毛片在线观看免费| 久久香蕉网| yy少妇精品久久| 人人妻人人澡人人爽久久av| 色婷婷六月| 黄页视频网站野外| 啊啊啊啊啊啊啊好爽不要| 91天天综合网| 久久熟女人| 九九九网站| 亚洲另类在线观看| 91超碰在线观看| 精品亚洲黄色片 国产精品导航一区二区| 国产伊人自拍| 蜜臀在线视频| 国产成人资源| 亚洲色图欧美色图另类图片| 久久婷婷五月天| 四虎精品亚洲| 免费AV播放| 91欧洲入口| 久久一区二区三区入口| 丰满少妇精品一区二区| 中文字幕av乱伦| 亚洲熟女乱熟乱熟妇综合网二区| 91狠狠综| 久久久久久性爱免费视频| 曰韩操B| 性性久久| 久久精品色欧美aⅴ一区二区| 国产和美国毛片| 人人摸人人干人人拍97| 99999亚洲| 97久久国产亚洲精品超碰热| 一区二区高清视频| 日本三级人妻a人妻一在线| 亚洲男人天堂网| 亚洲欧洲视频小说在线观看| 日韩无码精品综合久久| 嗯~啊~轻一点 视频| 欧美亚州手机在线| 干干干天天| 中文字幕人乱码中文字的预防方法 | 国产精品白丝AV| 97精品一区二区视频| 熟妇人妻一区二区| 亚洲情色1区| 天堂男人网| 久草毛片电影怡| 色五月综合| 囯戸精品高潮呻吟旡码| 性爱视频啪啪啪啪| 97免费视频网| 九九久久精品| 久久亚洲欧美中文字幕国语| 亚洲中文字幕久久无码精品| 欧美美女在线高潮999| 久久99综合| 一级日本牲交大片好爽在线看| 亚洲精品一区二区免费在线观看| 一级性爱aaaa| 久久AV色| 麻豆一区在线| 91久久18禁| 久久免费老司机精品| 国产69精品久久久久99尤物| 欧美黄色大片在线观看| 国产精品一区av在线| 综合久久久久久久久91| 黑人免费福利视频| 国产肏逼网站| 色在线综合| 美女操逼A A| 搡老熟女免费视频| 国产午夜在线观看| 亚洲精品国语在线播放| 国产精品黑人一区二区三区| 免费视频在线一区二区不卡| 日本成人免费一区二区三区 | 人妻少妇一区二区| 无码一区二区三区四区五区六区七区八区九区十区视频 | 成年人一级黄色毛片大全在线观看| 一区二区三区黄色片a| 国产一区在线观看无码AV| 亚洲一区二区三区不卡国产欧美| 久久久久免费看少妇A片特黄| 在线岛国新天堂8| 国产精品福利视频播放| 免费人成在线观看网站品爱网| 国产又猛又粗又爽又黄| 国产成人午夜视频网址| 日韩欧美国产高清视频| 欧美日韩国产中文精品字幕自在自线| 乱伦Av网| 日本久久精品| 成人久久无码www| 午夜精品久久久久久久99| 大茄子熟女AV导航| 中文字幕在线免费观看2| 成人资源中文字幕在线观看| 91欧美情色| 国产精品一区二区久久精品| 天天干天天狼在线视频| 九九九午夜| 少好三P| 69麻豆天美| 尤物视频一区| 色五月激情综合网| 亚州成人a∨| 亚欧美综合网。| 深夜激情| 色黄污美女啪啪啪免费网站| 在线只有精品| 色 亚洲 91| 天天综合色图| 久久五十路熟女人妻| 日韩精品99999| 久久久性少妇| 亚洲AV无线| 超碰性爱97| 992视频一区| 黄片com.| 亚洲强奸乱伦影视网| 美国美女AV在线| 亚洲图片偷拍欧美| av绯色| 伊人综合色网| 可乐操亚洲蜜911| 日韩欧美中文| 亚洲天堂日本| 五月婷亚洲精品天堂| 国产91精品福利在线| 91蜜臀熟女| aV中文麻| h在线看免费版在线看| 欧美成人贴图| 韩国久久97| 四虎精品永久在线播放| 色综合美国| 97天天| 毛片视频白嫩| 麻豆视频国产一区二区| 97色涩| 美国aaaaa一级黄片| 黄色大香焦1级‘′‘| 亚洲91网站| 国产熟女完整版中字| 亚洲精品美女操逼| 国语对白在线播放视频| 天操天操夜操夜月操月年年操操| 女同性恋久久| 蜜汁欧美| 日韩亚洲美州欧洲综三区一品在线| 日本精品加勒比海一区| 丁香激情五月天| 大香蕉中文在线| 超碰 另类 欧美| 无码一区二区精品视频久久久春药 | 亚洲精品一二区| nuu12国产麻豆精品| 激情综合久久| 亚洲精品乱码线路中文字幕| 吊色| 草b在线| 日韩黄片视频试看| 精品国产a∨一区天美传媒| 婷婷五月天福利| 日产操逼| 人妻熟女一区二区| 天美麻豆精品视频99| 国产精品人人爽人人做可爱福利| 久久久草草精品| 江都AV在线| 日本天天操| 91人人操| 97超碰总站| 超碰国产在线| 国产精品色片一区二区| 操逼逼一区视频| 热99re69精品8在线播放| 热的中文 热的有码 热的国产| 大香交伊人网| 欧美视频在线视频免费va| 日本人妻中文字幕精品| 欧亚日韩中文在线| 色香天天| 国产污视频麻豆传媒一区二区| 中日韩久久久| 秋霞Av理论一级在线| 欧洲一区二区三区四区在线观看| 人人澡人人爽人人精品| 婷婷导航| 黄网在线播放| 另类 日韩 熟女| 男人的天堂2019| 天操天操夜操夜月月年年操操| 久热大香蕉网站| 夜夜 中文视频rt| 操b网站亚洲无码| 国产久久一区二区三区野外在线| 欧美成人亚洲精品| 欧美天堂第二区| 中文字幕神马久久| 日本黄页视频在线观看| 青青草国产一区二区三区| 91久久国外网| 97人人夜| 亚洲欧美综合| 国产精品成人久久一区二区三区 | 大胆91| 超碰日本97美女人妻人人玩人人爱 | 亚洲免费人妻在| 丁香婷婷色五月| 91在线色综合| 男女激情中文字幕| 九九超碰综合网| 大香蕉狠狠爱| 黑人精品XXX一区一二区| 中文字幕日韩电影人妻| 手机在线视频国内精品| 激情丁香五月| 欧美熟女妇同| 亚洲射综合网| 91爱综合| 91久久久久久久| 国产免费一区2区3区| 蜜乳AV.COM| 亚洲色诱惑| 91国产大片| 人妻 欧美亚洲| 日逼97| 一线黄色免费性爱片| 国产视频一区二区免费| 岛国小电影| 欧美第一页| 91精品国产91综合久久蜜臀| 亚洲精品啪视频| 天天肏美女| 色噜噜狠狠色综无码久久| 日韩欧美性吧婷婷乱伦大香蕉| 日韩精品视频在线观看一卡二卡| 色噜噜国产在线| 免费视频观看60秒| AV污污污污| 激情图片伦理国产一区二区日韩| 中文字幕一区二区三区人妻不卡 | 亚洲无无码αⅴ每日更新| 超碰人人妻| 精品少妇一区二区| 免费啪啪一级视频| 天操老女人| 免费少妇一区二区| 中文字幕丝袜人妻| 日韩肏逼视频| 精品妇女一区二区三区| 亚洲av资源| 中日高清无码操逼视频| 精品国产乱码久久久久久免费| 18禁美女裸体无遮挡啪啪| 又黑又大又粗| 亚洲一二三四区| 国产一级片| 一区二区播放| 国产亚洲综合欧美一区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 99热这里是精品| 青青草一区二区三区四| 色香网| 91色久| 亚洲 在线| 超碰亚洲97| 中日韩免费看男女操逼大全| 啊啊啊在线观看免费视频| 激情天天视频| 亚洲男人天堂2| www.色五月| 热99re69精品8在线播放| 久久久影院| 日韩操p| 日韩亚洲97| 婷婷五月天色色| 天天综合网网欲色| 一区二区蜜臀| 婷婷激情四射| 国产传媒午夜理伦精品| 中字一区| 亚洲 欧美 中文 日韩超碰 | 人人操人人舒服| 啊啊啊好大好湿| 日本高清一区二区在线| 日本色日夜干| 欧美白嫩在线放| 一级久久久久久久久久久| 在线洲亚线| 人夜夜精品网站香蕉嫩草| 人人摸.人人色| 欧美亚洲韩国视频十五区| 中文字幕 码精品视频网站| 国产精品久久久吖| 欧美综合自拍亚洲综合图| 亚洲图片欧美日韩| 国产AV激情无码久久无码| 啊啊啊啊免费视频| 日韩美女高潮喷水视频| 国产精品一区人妻精品阁在线| 少妇人妻好深太紧了vr91| 欧美性性性| 在线观看综合精品亚洲| 91亚洲综合| 狠狠躁日日躁夜夜躁A| 志村玲子视频一区二区| 免费自拍三级综合| 97天堂| 天堂在线一区二区| 偷拍网站久久男女男| 亚洲欧洲国产综合av| 高清在线不卡一区二区 视频| 国产白丝网站| 国产精品对白自产拍| 欧美日韩天堂| 蜜臀AV成人精品蜜臀| 国产精品青青草| 久碰视频| 五月激情啪啪| 久久亚洲婷婷| 精品人人插人人操| 中文字幕亚韩| 上海一级黄片| 内射小黄片| 偷拍视频青青草在线视频| 久操影视| 人妻黑丝袜电影| 97人妻色| 九久9热| 亚洲操逼网| 女人与公拘交酡2020视频| 欧美一二三级精品在线| 人人插人人摸人人| 狠狠色婷婷7777久| 91麻豆天美传媒HD| 国产绿奴视频在线观看| 欧美一区二区三区日韩| 大香樵伊人网| 加勒比海成人视频网| 亚洲久草AV色图| 91麻豆天美传媒HD| 国产人妖视频一区在线观看| 精品人成视频在线观看| 伊人国产成人av网站| 人人摸.人人色| 色色操| 中美日韩毛片| 久久久久久久综合,国产| 伊人网高清| 亚洲成人无码影院| www.夜夜| 亚洲精品黑丝| 女人精品内射国产99| 亚洲古典另类欧美在线| 亚洲最大91网| 熟女熟妇伦久久影院毛片一区二区 | 五月天亚洲网| 日韩黄片影院| www.激情| 97干综合网| 久久永久无码人妻视频| 久久九色| 一区二区三区成人| 亚洲国产成人精品久久久国产成人一区二区| 93人人操人人| 黄色十八禁网站| 综合色欧美| 色综合久久88色综合久久天天| 亚洲影视综合网| 97欧美资源| 欧美精品xxxwww| 99九九久久| 色噜噜国产精品视频一区二区| 亚洲国产高清福利视频| 国产大片精久久久久久| 亚洲精品久久久久久久蜜桃臀| 日韩精品中文字幕人妻| 电影69乱码96| 久久久精品一区二区| 欧美亚洲一级在线观看| 亚洲情色第一页| 国产日韩美女小穴视频网站不卡| 免费啪啪一级视频| 久久日本熟妇熟色高清| 亚洲伊人久久综合97| 国产玖玖| 亚洲精品人体| 激情五月天婷婷| 欧美亚洲天天| 亚洲av无码成人精品国产| 欧美极品少妇| 久久五月天婷婷丁香中文字幕| 台湾肥佬网一区二区三区| 久久久久久九九九| 天无日色综合| 精品78| 青娱乐 成人娱乐在线| 91bbbbbb| 理论久久婷婷网 8| 中文字幕制服诱惑| 欧美第一页性| 亚洲人天堂| 真实高潮91| 另类TS人妖一区二区三区| 一个人在线看的黄色电影网站| 1769成人国产精品视频| 日韩人妻少妇中文字幕| 国产精品一二三区18| 99999精品视频| 日B操| 性生活久久久久久久久久| 17c在线成人免费A片观看| 大香伊人在线一区| 黄色小视频日本txt| 香蕉色网| 婷婷色婷婷| 国产精品操| 国产农村妇女精品一| 2017人人操,人人摸| 97超碰巨乳| 亚洲成A∨人影院在线欢看| 久久久久久中文| 久久精品小视频| 中文字幕三四区| 男人久久精品| 五月天丁香婷婷综合网站| 91日韩网站| 偷拍欧美综合| 午夜福利av电影在线| 锕锕好爽 死我在线观看| 日本3级一区二区免费| 白嫩妹子国产骚| 黄污污污污| 秋霞成人做爱| 亚洲综合草草| 日本伦理一区二区| 成人八戒网站| 精品999999| 亚洲永久永久永久永久一级一级一级精品| 成人亚欧免费视频| 黄页| 成熟熟女国产精品一区二区| www99热| 无码精品久久久久久亚洲| 人人超碰在线观看黄| 囯产操逼片| 曰韩中文人妻视频| 精品久操| 人妻出轨一区二区三区| 综合操逼| 日韩成年人性爱视频| 天天射夜夜| 黄色大片一区二区密桃丝袜| 白天啪啪晚上啪啪视频| 亚洲图片欧美色| 国产精品久久久久久久免牛肉蒲团| 天天拍天天操| 精品人妻一区二区三区不卡断 | 亲子敌伦对白在线播放| 91劲爆| 操操操操网黑人| 97人人干人人操| 91精品久久久| 欧综合网| 精品少妇一区二区三区| 九九英色视频| 电影69乱码96| www.91色| 综合久久久久久久综合网| 国产精品扒开腿做爽爽爽视频| 狠色婷婷久久一区二区三区_| 玖玖97综合 | 精品人妻一区二区三区视频在线| 欧美日韩婷婷中文| 天堂九九九九九九九九九| 最近的最新的中文字幕视频| 日本成人免费一区二区三区| 超碰九7| 久草免费在线视频| 亚洲偷91色| 色娱乐色呦呦夜夜夜夜av| 亚洲综合97中文网| 久久久久人妻| 日本三级R| 国产一进一出视频网站| 久久女人| 亚洲天堂资源| 一级黄碟在线观看| 亚洲一区二区三区久久 亚洲一区二区| 久久性爱免费送| 久久亚洲AV无码专区首页| 日韩成人精品| 无码137片内射在线影院| 中文字幕三四区| 色吧91| 啊v在线观看视频| 男人的天堂1024| 蜜桃午夜视频一区二区| AV男人天堂网| 好舒服视频| 亚av顶级裸体一区二区三区四区五区| 国产女同性恋视频| 色噜噜人妻丝袜AV资源| 久久做97| 狠狠 91| 国产11页| 骚货| 久久精品免费| 久久久av爱| 一区二区不卡| 国产第二页| 国产精品粉嫩福利在线| 综合久久99亚洲人妻中文在线| 国产一区二区三区久久精品太古里| 91色伦综合| 熟妇人妻一区二区三在线| 天堂资源站| 强奸熟女一区二区三区| 欧洲性人爱视频| 自拍第一页| 欧美国产婷婷久久| 日韩成年人性爱视频| 国产一级高清免费观看| 人人干黄色| 一类无码操逼视频| 99热这里只有精品地址| 狠狠操狠狠| 嗯啊啊啊轻点视频| 人妻少妇三级| 天堂综合| 日本大香蕉综合网| 欧美黄色手机在线观看| 午夜乱轮操逼视频免费看| 色综合久久88色综合久久天天| 久久精品国产72国产精品福利| 亚洲欧美日韩综合在线尤物| 天天天天天干夜夜夜夜夜操| 91xingse| 麻豆精品三区视频| 五月天AV资源| 欧美人与动性人交a| 欧美精品精品一区二区| 国产精品久久久久中文字幕| 久久五月婷| 中文字幕加勒比海高清无码免费视频| 91超碰碰在线| 久伊人网78| 粉嫩av平台| 粉嫩在线一区二区懂色| 激情深爱五月天| 青青草大香蕉在线视频| 久久9免费视频| 国产精品国产亚洲区艳妇糸列| 亚洲AV无码AV吞精久久久久| 亚洲图片欧美在线视频| 97综合国产精品高潮久久| 亚洲男人天堂视频| 日韩在线地址一| 婷婷亚洲综合| 日本日日色视频| 91n处女在线观看| 91午夜无码| 激情第四色| 97精品久久久久中文字幕| 1024精品在线| 成人午夜小视频手机在线看| av操操不卡| 欧美色爱综合| 国产亚洲女v在线观看| 五月天婷婷基地| 啊啊啊啊啊啊啊在线| 久久产精品一区二区三区电影| 高清成年美女黄网站免费大全 | aaaa少妇高潮大片| 欧美午夜色妇色鬼| 96超碰网| 国产69精品久久久久99尤物| 精爱久久| 亚洲中文字幕一区二区| 日韩视频啪啪| 蜜臀在线免费观看在线免费观看| 欧美性高潮| 亚洲精品中文字幕一区在线视频| 久久免费中文字幕在线观看| 欧美亚州综合网图片| 免费av大片| 久插综合| 免费无码婬片AAAA片直播色戒| 欧美精品日韩一区二区| 国产成人精品一区| 草草影院日本第一页| 天天综合AV| 99蜜月精品久久| 国产高清精品一区二区三区毛片| 亚洲欧美精品一区天堂久久 | 97 色综合| 女人被添高潮免费视频| 日韩精品影视| 艹少妇网站| 91欧美美女日韩国产婷婷| 亚洲国产成人精品久久久国产成人一区二区| 无码日韩人妻av一| 18禁久极品美女久久哦哟呀!| 人人操,人人插| 丝袜制服字幕在线| 久久久久亚洲Av无码专区老牛影视| 天天日天天舔| 中文有码9| 丝袜大香蕉| 金典av| 日韩欧美aⅴ综合网站发布| 欲射影视| 亚洲精品成人动漫在线| 91九九九小逼| 蜜乳AV一区| 亚洲黄色网址| 国产精品一区二区 尿失禁| 亚洲欧洲激情| 91久久堂| 在线观看AV片| 日韩成人人妻网站| 久久艹逼视频| 9久久精品| 富二代亚洲精品99| 视频一区二区免费在线| 麻豆福利视频导航| 天天操天天射天天日| B049AV在线播放| 欧美日韩岛国大片在线观看| 久久久久78| 亚洲图片婷婷五月天| 亚洲图片在线| 无遮挡h肉动漫在线观看| 亚洲综合伊人无码久久| 无码99| 成年人黄色视频免费| 欧美日韩亚洲天堂网| 亚洲成a人在线观看久| 91亚洲欧美综合高清在线| 在线99热| 91啦人妻| 超碰天天操| 久久久国产三级黄色片| 亚洲综合九九| 欧美 综合| 国模少妇一区二区三区| 亚洲日韩国产精品| 丝袜综合| 日韩性爱播放| 国产欧美在线观看免费观看| 人人澡综合涩| 婷婷五月综合在线| 色婷婷六月丁香七月婷婷| 亚洲一二三| 日本大片日本一区二区免费高清| 日韩视频中文字幕| 91nbbbbbb| 色综合91| 国产精品人妻无码久久久老鸭窝 | 国产精品肉丝自拍| 欧美人妻一区| 性色aV一区二区三区噜噜| 91色五月俺来也| 亚洲 日本 国产 综合| 色99久草| 欧美中文字幕男人天堂久久精品| 操逼网站网站| 久久久国产护士丝袜美腿一| 小少妇| 美日韩男女操屄视频| 亚洲欧美日韩有码| 久久东京国产精品视频| 国产精品懂色tv影视免费观看| 欧美九九99久久精品| 人妻人人做人人澡人人爽欧美一区| 亚洲小说视频| 神马久久中文字幕| 欧美特大黄一级片片免费| 91无码西班牙视频在线| 大香蕉2017| 欧美91网站| 九九天堂| 99热在线播放| 亚洲九月丁香| 日韩av无码网站| 综合色91| 日韩精品人妻中文字幕不卡乱码| 五月天激情小说| 成人免费在线网站| 精品成人亚洲午夜电影| 男人的天堂2018| 中精品一区二区三区| 欧美乱妇狂野欧美在线视频| 蜜桃传媒一区二区亚洲| 丰满的三级少妇欧美久久久| 岛国黄| 日韩无码操逼片| 亚洲黑人在线| 少妇天堂| 天天色综合影视网| 天堂网 主播 亚洲| 欧美日韩国产男人| 嗯嗯嗯,草死我| 久久人妻办公室视频| 久久露脸国产老熟女| 精品v日韩欧美国产| 久草国产在线视频| 无码高清少妇久久| 欧美人与动性人交a| 丰满人妻一区二区三区蜜桃视频| 四虎免费视频| 97欧美色综合| 激情看片网站| 色成人Www精品永久观看| 人人操人人搞人人草| 夜夜天天噜狠狠爱2021| 亚洲天堂一区二区久久| 日韩有码 一区二区三区| 欧美乱伦专区| 在线毛片片免费观看| 欧美91在线| 亚洲精品久久久久毛片A片拉屎 | 欧美激情1区| 97ai亚洲| 久久αⅴ| 97欧美在线| 日本精品一区二区三| 欧美专区17页| 亚洲欧洲日韩中文字幕一区| 78精品在线| 日本 情色 1区| 91色婷婷综合久久中文字幕二区| 中文字幕国产| 内射黑人| 亚洲欧美性生活| 欧美在线官网| 久久嫩草国产成人一区| 啊啊啊啊啊啊啊好爽不要| 少妇免费视频| 欧美亚综合色图| 97色涩| 内射黑丝袜| 人人爽夜夜玩视频| 美女91网| 蜜桃狠狠色伊人亚洲综合网站| 色噜噜国产精品视频一区二区| 欧美天天| 逼操网站| 国产一区二区三区影片| 国产乱伦性爱AV| 95精品在线| 夜夜福利| 久久人妻无码毛片A片麻豆| 久久大香蕉97| 日本阿v天堂在线观看| 精品人妻1区| 国产精品麻豆视频网站| 午夜色婷婷| 2025亚洲男人天堂| 人妻少妇久久久| 97免费视频网| 欧美性第1页| 国产精品不卡av免费在线观看| 欧美不卡五十路| 国产精品制服丝袜清纯唯美| 91色色色| 久久天天躁日日躁狠狠躁| 风骚少妇视频中文字幕|