日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Trie樹的實(shí)現(xiàn)

Trie樹的實(shí)現(xiàn) Trie樹是保存字符串公共前綴信息的數(shù)據(jù)結(jié)構(gòu),可用于字符串多模匹配普通的非壓縮Trie樹實(shí)現(xiàn)如下第一種實(shí)現(xiàn):每個(gè)分支節(jié)點(diǎn)使用map標(biāo)準(zhǔn)庫容器保存前綴索引#include map #include stack #include vector #include string #include iostream #include random using namespace std; enum Compare_Result {EQUAL, LEFT_IS_PREFIX, RIGHT_IS_PREFIX, NOT_EQUAL}; struct TrieTreeNode //Trie樹節(jié)點(diǎn)類型 { enum NodeType { DATANODE, BRANCHNODE } type_flag; //節(jié)點(diǎn)類型標(biāo)志分支節(jié)點(diǎn)或存放關(guān)鍵字的葉節(jié)點(diǎn) union { string key_in_trie; //葉節(jié)點(diǎn)關(guān)鍵字 mapchar, TrieTreeNode* sub_ptr; //分支節(jié)點(diǎn)的分支字符和對(duì)應(yīng)的指向分支字符對(duì)應(yīng)的子節(jié)點(diǎn)的指針之間的映射關(guān)系 }; TrieTreeNode(const string k) :type_flag(NodeType::DATANODE), key_in_trie(k) {} TrieTreeNode() :type_flag(NodeType::BRANCHNODE), sub_ptr() {} TrieTreeNode(TrieTreeNode be_copied) { switch (be_copied.type_flag) { case NodeType::DATANODE: new (key_in_trie) string(be_copied.key_in_trie); break; case NodeType::BRANCHNODE: { new (sub_ptr) mapchar, TrieTreeNode*(); for (mapchar, TrieTreeNode*::iterator p be_copied.sub_ptr.begin(); p ! be_copied.sub_ptr.end(); p) sub_ptr.insert(make_pair(p-first, nullptr)); } break; } type_flag be_copied.type_flag; } ~TrieTreeNode() { switch (type_flag) { case NodeType::DATANODE: key_in_trie.~string(); break; case NodeType::BRANCHNODE: sub_ptr.~mapchar, TrieTreeNode*(); break; } } }; class TrieTree { public: bool insert(const string be_inserted) const; //Trie樹中插入關(guān)鍵字,true成功false失敗 bool deleteElem(const string be_deleted) const; //Trie樹中刪除指定關(guān)鍵字,true成功false失敗 TrieTreeNode* copy(); //拷貝Trie樹返回指向副本Trie樹的指針 TrieTree() { root new TrieTreeNode(); } void printTrieTree(TrieTreeNode* cur, size_t offset) const; bool isEmpty() const { return root-sub_ptr.empty(); } TrieTreeNode* getTrieTree() const { return root; } TrieTree(TrieTree be_copied) { root be_copied.copy(); } ~TrieTree(); private: Compare_Result static strCompare(const string left, const string right, string::size_type i); TrieTreeNode* root; //Trie樹根節(jié)點(diǎn) }; ostream operator(ostream o, const TrieTree be_output) { if (be_output.isEmpty()) { o NULL endl; return o; } be_output.printTrieTree(be_output.getTrieTree(), 0); return o; } Compare_Result TrieTree::strCompare(const string left, const string right, string::size_type i) { for (; ; i) { if (i left.size() i right.size()) return Compare_Result::EQUAL; else if (i left.size() || i right.size()) { if (i left.size()) return Compare_Result::LEFT_IS_PREFIX; else return Compare_Result::RIGHT_IS_PREFIX; } else if (left[i] ! right[i]) return Compare_Result::NOT_EQUAL; } } bool TrieTree::deleteElem(const string be_deleted) const { TrieTreeNode* run root; vectorTrieTreeNode* stack; vectorTrieTreeNode*::size_type index; mapchar, TrieTreeNode*::iterator stop_branch_node; mapchar, TrieTreeNode*::iterator leaf_father_point_to_leaf; { string::size_type i 0; while (true) { if (i be_deleted.size()) { mapchar, TrieTreeNode*::iterator it; it run-sub_ptr.find(be_deleted[i]); if (it run-sub_ptr.end()) return false; i; if (run root || run-sub_ptr.size() 2) { if (it-second-type_flag TrieTreeNode::NodeType::BRANCHNODE) { index stack.size(); stop_branch_node it; } else { leaf_father_point_to_leaf it; break; } } else stack.push_back(run); run it-second; } else { if (run-sub_ptr.empty() || \0 ! run-sub_ptr.begin()-first) return false; leaf_father_point_to_leaf run-sub_ptr.begin(); break; } } if (leaf_father_point_to_leaf-first ! \0 strCompare(be_deleted, leaf_father_point_to_leaf-second-key_in_trie, i) ! Compare_Result::EQUAL) return false; } delete leaf_father_point_to_leaf-second; run-sub_ptr.erase(leaf_father_point_to_leaf); if (run ! root run-sub_ptr.size() 1 run-sub_ptr.begin()-second-type_flag TrieTreeNode::NodeType::DATANODE) { if (stop_branch_node-second ! run) { for (size_t j stack.size() - 1; j index; --j) delete stack[j]; delete stack[index]; } stop_branch_node-second run-sub_ptr.begin()-second; delete run; } return true; } bool TrieTree::insert(const string be_inserted) const { TrieTreeNode* run root; string::size_type i 0; pairmapchar, TrieTreeNode*::iterator, bool result; while (run-type_flag ! TrieTreeNode::NodeType::DATANODE) { if (i be_inserted.size()) { result run-sub_ptr.insert(make_pair(be_inserted[i], new TrieTreeNode(be_inserted))); if (result.second) return true; run result.first-second; i; } else { if (run-sub_ptr.empty() || run-sub_ptr.begin()-first ! \0) { run-sub_ptr.insert(make_pair(\0, new TrieTreeNode(be_inserted))); return true; } return false; } } Compare_Result compare_result; { string::size_type start_index i; compare_result strCompare(be_inserted, run-key_in_trie, i); if (compare_result Compare_Result::EQUAL) return false; result.first-second new TrieTreeNode(); for (; start_index i; start_index) result.first result.first-second-sub_ptr.insert(make_pair(be_inserted[start_index], new TrieTreeNode())).first; } if (compare_result Compare_Result::LEFT_IS_PREFIX) { result.first-second-sub_ptr.insert(make_pair(\0, new TrieTreeNode(be_inserted))); result.first-second-sub_ptr.insert(make_pair(run-key_in_trie[i], run)); } else if (compare_result Compare_Result::RIGHT_IS_PREFIX) { result.first-second-sub_ptr.insert(make_pair(\0, run)); result.first-second-sub_ptr.insert(make_pair(be_inserted[i], new TrieTreeNode(be_inserted))); } else { result.first-second-sub_ptr.insert(make_pair(run-key_in_trie[i], run)); result.first-second-sub_ptr.insert(make_pair(be_inserted[i], new TrieTreeNode(be_inserted))); } return true; } TrieTree::~TrieTree() { TrieTreeNode* run root; stackpairTrieTreeNode*, mapchar, TrieTreeNode*::iterator work_stack; bool trace_back_flag true; while (true) { if (trace_back_flag true) { if (run root) { if (run-sub_ptr.begin() run-sub_ptr.end()) { delete root; return; } } else { if (run-type_flag TrieTreeNode::DATANODE) { delete run; run work_stack.top().first; work_stack.top().second; //work_stack.top().second run-sub_ptr.erase(work_stack.top().second); trace_back_flag false; continue; } } work_stack.push(make_pair(run, run-sub_ptr.begin())); run run-sub_ptr.begin()-second; } else { if (run root || work_stack.top().second ! run-sub_ptr.end()) { if (run root) { if (work_stack.top().second root-sub_ptr.end()) { delete root; return; } } run work_stack.top().second-second; trace_back_flag true; } else { delete run; work_stack.pop(); run work_stack.top().first; work_stack.top().second; // work_stack.top().second run-sub_ptr.erase(work_stack.top().second); } } } } TrieTreeNode* TrieTree::copy() { TrieTreeNode* be_copied root; stackpairTrieTreeNode*, mapchar, TrieTreeNode*::iterator work_stack; stackpairTrieTreeNode*, mapchar, TrieTreeNode*::iterator copy_trace_stack; TrieTreeNode* root_of_copy nullptr; bool trace_back_flag true; while (true) { if (trace_back_flag true) { if (be_copied root) { root_of_copy new TrieTreeNode(*be_copied); if (be_copied-sub_ptr.begin() be_copied-sub_ptr.end()) break; copy_trace_stack.push(make_pair(root_of_copy, root_of_copy-sub_ptr.begin())); } else { if (work_stack.top().second ! work_stack.top().first-sub_ptr.begin()) copy_trace_stack.top().second; copy_trace_stack.top().second-second new TrieTreeNode(*be_copied); if (be_copied-type_flag ! TrieTreeNode::DATANODE) copy_trace_stack.push(make_pair(copy_trace_stack.top().second-second, copy_trace_stack.top().second-second-sub_ptr.begin())); else { be_copied work_stack.top().first; trace_back_flag false; continue; } } work_stack.push(make_pair(be_copied, be_copied-sub_ptr.begin())); be_copied be_copied-sub_ptr.begin()-second; } else { if (work_stack.top().second-second-type_flag ! TrieTreeNode::DATANODE) copy_trace_stack.pop(); if (be_copied root || (work_stack.top().second) ! be_copied-sub_ptr.end()) { if (be_copied root) { if ((work_stack.top().second) root-sub_ptr.end()) break; } be_copied work_stack.top().second-second; trace_back_flag true; } else { work_stack.pop(); be_copied work_stack.top().first; } } } return root_of_copy; } void TrieTree::printTrieTree(TrieTreeNode* cur, size_t offset) const { if (cur-type_flag TrieTreeNode::BRANCHNODE) { size_t max_length; if (cur-sub_ptr.begin()-first \0) max_length 4; else max_length 1; for (mapchar, TrieTreeNode*::iterator run cur-sub_ptr.begin(); run ! cur-sub_ptr.end(); run) { for (size_t go 1; go offset; go) cout ; if (run-first \0) cout NULL; else { cout run-first; for (size_t go 2; go max_length; go) cout ; } cout |- endl; printTrieTree(run-second, offset 2 max_length); } } else { for (size_t go 1; go offset; go) cout ; cout leaf: cur-key_in_trie endl; } } int main() { vectorstring test { bluebird, bunting, bobwhite, bluejay }; TrieTree test_obj; for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); //for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 刪除字符串 bobwhite endl; if (test_obj.deleteElem(bobwhite)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } cout 刪除字符串 bluejay endl; if (test_obj.deleteElem(bluejay)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; string mod abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789; const int L 9; // 隨機(jī)字符串最大長(zhǎng)度 const int r 2; //相同長(zhǎng)度重復(fù)次數(shù) vectorint LList(L); vectorstring random_str; for (int run 0; run LList.size(); run) LList[run] run 1; shuffle(LList.begin(), LList.end(), default_random_engine()); for (int re 1; re r; re) { for (int run 0; run LList.size(); run) { string r; for (int go 1; go LList[run]; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(r); } } for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; random_str.clear(); for (int i 1; i 7; i) { string temp(mod, 0, i); for (int run 1; run 7; run) { string r; for (int go 1; go run; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(temp r); } } cout 測(cè)試字符串有共同前綴不相等情形 endl; for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; shuffle(mod.begin(), mod.end(), default_random_engine()); for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 插入字符串 mod 的前綴 temp endl; if (test_obj.insert(temp)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 刪除字符串 mod 的前綴 temp endl; if (test_obj.deleteElem(temp)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } return 0; }第二種實(shí)現(xiàn)分支節(jié)點(diǎn)使用數(shù)組保存前綴的索引#include map #include stack #include vector #include string #include iostream #include random #include tuple using namespace std; enum Compare_Result { EQUAL, LEFT_IS_PREFIX, RIGHT_IS_PREFIX, NOT_EQUAL }; struct TrieTreeNode //Trie樹節(jié)點(diǎn)類型 { enum NodeType { DATANODE, BRANCHNODE } type_flag; //節(jié)點(diǎn)類型標(biāo)志分支節(jié)點(diǎn)或存放關(guān)鍵字的葉節(jié)點(diǎn) struct BranchNode { vectorTrieTreeNode* sub_ptr; size_t num; BranchNode() :sub_ptr(128, nullptr), num(0){} BranchNode(const BranchNode B) :num(B.num), sub_ptr(128, nullptr) {} }; union { string key_in_trie; //葉節(jié)點(diǎn)關(guān)鍵字 BranchNode branch_ptr; //分支節(jié)點(diǎn)的分支字符和對(duì)應(yīng)的指向分支字符對(duì)應(yīng)的子節(jié)點(diǎn)的指針之間的映射關(guān)系 }; TrieTreeNode(const string k) :type_flag(NodeType::DATANODE), key_in_trie(k) {} TrieTreeNode() :type_flag(NodeType::BRANCHNODE), branch_ptr() {} TrieTreeNode(TrieTreeNode be_copied) { switch (be_copied.type_flag) { case NodeType::DATANODE:{ new (key_in_trie) string(be_copied.key_in_trie); break; } case NodeType::BRANCHNODE:{ new (branch_ptr) BranchNode(be_copied.branch_ptr); break; } } type_flag be_copied.type_flag; } ~TrieTreeNode() { switch (type_flag) { case NodeType::DATANODE: key_in_trie.~string(); break; case NodeType::BRANCHNODE: branch_ptr.~BranchNode(); break; } } }; class TrieTree { public: bool insert(const string be_inserted) const; //Trie樹中插入關(guān)鍵字,true成功false失敗 bool deleteElem(const string be_deleted) const; //Trie樹中刪除指定關(guān)鍵字,true成功false失敗 TrieTreeNode* copy(); //拷貝Trie樹返回指向副本Trie樹的指針 TrieTree() { root new TrieTreeNode(); } TrieTree(TrieTree be_copied) { root be_copied.copy(); } void printTrieTree(TrieTreeNode* cur, size_t offset) const; bool isEmpty() const { return root-branch_ptr.num 0; } TrieTreeNode* getTrieTree() const { return root; } ~TrieTree(); private: template typename T Compare_Result static strCompare(const string left, const string right, T i); static size_t char_to_index(const char ch) { return ch; } TrieTreeNode* root; //Trie樹根節(jié)點(diǎn) }; ostream operator(ostream o, const TrieTree be_output) { if (be_output.isEmpty()) { o NULL endl; return o; } be_output.printTrieTree(be_output.getTrieTree(), 0); return o; } template typename T Compare_Result TrieTree::strCompare(const string left, const string right, T i) { for (; ; i) { if (i left.size() i right.size()) return Compare_Result::EQUAL; else if (i left.size() || i right.size()) { if (i left.size()) return Compare_Result::LEFT_IS_PREFIX; else return Compare_Result::RIGHT_IS_PREFIX; } else if (left[i] ! right[i]) return Compare_Result::NOT_EQUAL; } } bool TrieTree::deleteElem(const string be_deleted) const { TrieTreeNode* run root; stackTrieTreeNode* work_stack; size_t index; { string::size_type i 0; while (run-type_flag TrieTreeNode::NodeType::BRANCHNODE) { if (i be_deleted.size()) { index char_to_index(be_deleted[i]); if (run-branch_ptr.sub_ptr[index] nullptr) return false; i; work_stack.push(run); run run-branch_ptr.sub_ptr[index]; } else { if (run-branch_ptr.sub_ptr[0] nullptr) return false; work_stack.push(run); run run-branch_ptr.sub_ptr[0]; index 0; } } if (run ! work_stack.top()-branch_ptr.sub_ptr[0] strCompare(be_deleted, run-key_in_trie, i) ! Compare_Result::EQUAL) return false; } work_stack.top()-branch_ptr.sub_ptr[index] nullptr; delete run; --work_stack.top()-branch_ptr.num; if (work_stack.top() ! root work_stack.top()-branch_ptr.num 1) { for (index 0; index work_stack.top()-branch_ptr.sub_ptr.size(); index) { if (work_stack.top()-branch_ptr.sub_ptr[index] ! nullptr) break; } if (work_stack.top()-branch_ptr.sub_ptr[index]-type_flag TrieTreeNode::NodeType::DATANODE) { run work_stack.top()-branch_ptr.sub_ptr[index]; delete work_stack.top(); work_stack.pop(); while (work_stack.top() ! root) { if (work_stack.top()-branch_ptr.num 2) { work_stack.top()-branch_ptr.sub_ptr[char_to_index(be_deleted[work_stack.size() - 1])] run; return true; } else { delete work_stack.top(); work_stack.pop(); } } work_stack.top()-branch_ptr.sub_ptr[char_to_index(be_deleted[0])] run; } } return true; } bool TrieTree::insert(const string be_inserted) const { TrieTreeNode* run root; string::size_type i 0; size_t index; TrieTreeNode* father_of_leaf nullptr; while (run-type_flag ! TrieTreeNode::NodeType::DATANODE) { if (i be_inserted.size()) { index char_to_index(be_inserted[i]); if (run-branch_ptr.sub_ptr[index] nullptr) { run-branch_ptr.sub_ptr[index] new TrieTreeNode(be_inserted); run-branch_ptr.num; return true; } father_of_leaf run; run run-branch_ptr.sub_ptr[index]; i; } else { if (run-branch_ptr.sub_ptr[0] nullptr) { run-branch_ptr.sub_ptr[0] new TrieTreeNode(be_inserted); run-branch_ptr.num; return true; } return false; } } Compare_Result compare_result; { string::size_type start_index i; compare_result strComparestring::size_type (be_inserted, run-key_in_trie, i); if (compare_result Compare_Result::EQUAL) return false; father_of_leaf father_of_leaf-branch_ptr.sub_ptr[index] new TrieTreeNode(); for (; start_index i; start_index) { father_of_leaf-branch_ptr.num 1; father_of_leaf father_of_leaf-branch_ptr.sub_ptr[char_to_index(be_inserted[start_index])] new TrieTreeNode(); } } if (compare_result Compare_Result::LEFT_IS_PREFIX) { father_of_leaf-branch_ptr.sub_ptr[0] new TrieTreeNode(be_inserted); father_of_leaf-branch_ptr.sub_ptr[char_to_index(run-key_in_trie[i])] run; } else if (compare_result Compare_Result::RIGHT_IS_PREFIX) { father_of_leaf-branch_ptr.sub_ptr[0] run; father_of_leaf-branch_ptr.sub_ptr[char_to_index(be_inserted[i])] new TrieTreeNode(be_inserted); } else { father_of_leaf-branch_ptr.sub_ptr[char_to_index(run-key_in_trie[i])] run; father_of_leaf-branch_ptr.sub_ptr[char_to_index(be_inserted[i])] new TrieTreeNode(be_inserted); } father_of_leaf-branch_ptr.num 2; return true; } size_t find_next(TrieTreeNode* cur, size_t run) { for (; run cur-branch_ptr.sub_ptr.size(); run) { if (cur-branch_ptr.sub_ptr[run] ! nullptr) return run; } } TrieTree::~TrieTree() { TrieTreeNode* run root; stacktupleTrieTreeNode*, size_t, short work_stack; bool trace_back_flag true; while (true) { if (trace_back_flag true) { if (run root) { if (run-branch_ptr.num 0) { delete root; return; } } else { if (run-type_flag TrieTreeNode::DATANODE) { delete run; run get0(work_stack.top()); if (run-branch_ptr.num ! get2(work_stack.top())) get1(work_stack.top()) find_next(run, get1(work_stack.top()) 1); trace_back_flag false; continue; } } work_stack.push(make_tuple(run, find_next(run, 0), 1)); run run-branch_ptr.sub_ptr[get1(work_stack.top())]; } else { if (run root || get2(work_stack.top()) ! run-branch_ptr.num) { if (run root) { if (get2(work_stack.top()) root-branch_ptr.num) { delete root; return; } } get2(work_stack.top()); run run-branch_ptr.sub_ptr[get1(work_stack.top())]; trace_back_flag true; } else { delete run; work_stack.pop(); run get0(work_stack.top()); if (run-branch_ptr.num ! get2(work_stack.top())) get1(work_stack.top()) find_next(run, get1(work_stack.top()) 1); } } } } TrieTreeNode* TrieTree::copy() { TrieTreeNode* be_copied root; stacktupleTrieTreeNode*, size_t, short work_stack; stackTrieTreeNode* copy_trace_stack; TrieTreeNode* root_of_copy nullptr; bool trace_back_flag true; while (true) { if (trace_back_flag) { if (be_copied-type_flag TrieTreeNode::BRANCHNODE) { if (be_copied root) { root_of_copy new TrieTreeNode(*be_copied); if (be_copied-branch_ptr.num 0) { break; } copy_trace_stack.push(root_of_copy); } else copy_trace_stack.push(copy_trace_stack.top()-branch_ptr.sub_ptr[get1(work_stack.top())] new TrieTreeNode(*be_copied)); work_stack.push(make_tuple(be_copied, find_next(be_copied, 0), 1)); be_copied be_copied-branch_ptr.sub_ptr[get1(work_stack.top())]; } else { copy_trace_stack.top()-branch_ptr.sub_ptr[get1(work_stack.top())] new TrieTreeNode(*be_copied); be_copied get0(work_stack.top()); trace_back_flag false; } } else { if (be_copied-branch_ptr.num ! get2(work_stack.top())) { get1(work_stack.top()) find_next(be_copied, get1(work_stack.top()) 1); get2(work_stack.top()); be_copied be_copied-branch_ptr.sub_ptr[get1(work_stack.top())]; trace_back_flag true; } else { if (be_copied root) break; work_stack.pop(); be_copied get0(work_stack.top()); copy_trace_stack.pop(); } } } return root_of_copy; } void TrieTree::printTrieTree(TrieTreeNode* cur, size_t offset) const { if (cur-type_flag TrieTreeNode::BRANCHNODE) { size_t max_length; if (cur-branch_ptr.sub_ptr[0] ! nullptr) max_length 4; else max_length 1; int count 0; for (size_t run 0; ; run) { if (cur-branch_ptr.sub_ptr[run] ! nullptr) { count; for (size_t go 1; go offset; go) cout ; if (run 0) cout NULL; else { cout static_castchar(run); for (size_t go 2; go max_length; go) cout ; } cout |- endl; printTrieTree(cur-branch_ptr.sub_ptr[run], offset max_length 2); if (count cur-branch_ptr.num) break; } } } else { for (size_t go 1; go offset; go) cout ; cout leaf: cur-key_in_trie endl; } } int main() { vectorstring test { bluebird, bunting, bobwhite, bluejay }; TrieTree test_obj; for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); //for (vectorstring::iterator p test.begin(); p ! test.end(); p) { cout 刪除字符串 bobwhite endl; if (test_obj.deleteElem(bobwhite)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } cout 刪除字符串 bluejay endl; if (test_obj.deleteElem(bluejay)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; string mod abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789; const int L 9; // 隨機(jī)字符串最大長(zhǎng)度 const int r 2; //相同長(zhǎng)度重復(fù)次數(shù) vectorint LList(L); vectorstring random_str; for (int run 0; run LList.size(); run) LList[run] run 1; shuffle(LList.begin(), LList.end(), default_random_engine()); for (int re 1; re r; re) { for (int run 0; run LList.size(); run) { string r; for (int go 1; go LList[run]; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(r); } } for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; random_str.clear(); for (int i 1; i 7; i) { string temp(mod, 0, i); for (int run 1; run 7; run) { string r; for (int go 1; go run; go) { r.append(1, mod[rand() % mod.size()]); } random_str.push_back(temp r); } } cout 測(cè)試字符串有共同前綴不相等情形 endl; for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 插入字符串 *p endl; if (test_obj.insert(*p)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } cout endl; // TrieTreeNode *copy test_ptr.copy(); for (vectorstring::iterator p random_str.begin(); p ! random_str.end(); p) { cout 刪除字符串 *p endl; if (test_obj.deleteElem(*p)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } cout endl; shuffle(mod.begin(), mod.end(), default_random_engine()); for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 插入字符串 mod 的前綴 temp endl; if (test_obj.insert(temp)) { cout 插入成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 插入失敗 endl; exit(0); } } for (string::size_type i 1; i mod.size(); i) { string temp(mod, 0, i); cout 刪除字符串 mod 的前綴 temp endl; if (test_obj.deleteElem(temp)) { cout 刪除成功 endl; cout 當(dāng)前Trie為: endl test_obj endl; TrieTree copy(test_obj); cout 當(dāng)前Trie的副本為: endl copy endl; } else { cout 刪除失敗 endl; exit(0); } } return 0; }每種實(shí)現(xiàn)應(yīng)該都能適用于空串的插入刪除自己沒有驗(yàn)證過感興趣可自行驗(yàn)證
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天久久久噜噜噜久久国产精品爽爽| 在线日韩日本亚洲国产| 日韩精品免费高清视频在线| 老熟女91视频| 久久黄黄| 激情五月婷婷综合| 在线可观看的黄色网址| 亚洲一区日韩精品中文字幕| 亚洲国产精品久久久男人的天堂| 日本成人A片免费看| 日产成人久久| 中文字幕在线24| 极品销魂美女一区二区| 97伪v| 私色综合网| 欧美性爱第一区| 午夜传煤十二区精品| 久久久久久久9最新免费视频观看| 五月天我淫我色av| 97国产|免费| 精品视频97| 天天干天天做| 盗摄女人妻在线| 久草加勒比一区在线| 国产人妻精品一区二区三区秋霞 | 亚洲精品乱码久久久久久蜜桃麻豆 | 一块操欧美性爱| 国产精品久久久亚洲第一牛牛_在线观看 | 影视综合无码少妇| 欧美片第一页| 放黄片放3级黄片没穿衣服| 60秒免费视频| 国产精品久久久999| 亚洲激情久久| 在线观看日韩av不卡| 人妻精品免费一二三区| 乱伦一二三区| 亚洲乱色熟女一区| 一级性爱视频免费观看| 伊人加勒比| 97在线免费看视频| ..日韩av毛片精品久久久| 乱伦熟女论坛| 国产在线观看一区二区三区| 青青草国产欧美非洲黑人| 香蕉综合网| 亚洲 欧美综合| 欧美碰碰综合色| 深喉吞精| 大香久久| 久久大黄片| 日本操逼aaaaa| 超碰精品国产无码| 欧亚性爱在线视频| 欧美亚洲色图另类国产| 日逼国产| 91爽啪| 午夜免费视频1000| 欧美中文字幕男人天堂久久精品 | 免费操逼91| 极品色综合| 国产sv美女内射| 国产精品白领在线观看| 性爱Av免费| 国产亚洲日韩在线三区黑人| 综合欧美激情网| 蜜桃视频成a人v在线| 色综合网1| 狠狠爱综合网| 久久亚洲天天做| 97精品久久久久中文字幕| 91nbbbbbb| 天天操熟妇| 综合亚洲网| 超碰色97| 婷婷精品视频| 亚洲性综合9| 青青草视频久久久久| 国产精品91ai| 婷婷丁香人妻 | 性爱欧美五月| 男女香蕉一区二区| 欧差乱伦二三| 免费综合亚洲中文| 在线啊啊啊啊| 日韩av电影网站| 中文字幕欧洲有码| 精品免费视频国产一区| 国产成人网址| 色九九久九九| 无码操逼视频一下| 日韩国产中文字幕| 色九九九九| 夜夜国自区| 96久久久久| 人人贴人人摸| 夜夜操老骚逼视频网站| 狠狠操狠狠燥| 中文字幕一区电影在线观看| 厕所偷拍在线| 加勒比aⅴ| 377p欧洲日本亚洲大胆| 嗯嗯嗯,草死我| 午夜噜噜噜| 国产Aα| 中文字幕永久在线| 新怡红院| 人人摸人人添人人操| 亚洲日韩青青草色月| 噜噜噜噜天天狠狠| 最新岛国大片| 欧美一区二区三区大综合| 黄站在线免费观看| 亚洲色图欧美色图日韩色图| 第二页中文字幕| 亚洲骚逼少妇| 六月婷激情福利天堂69| 国产性爱在线视频一区二区| 3P丝袜熟女 色综合| 九久久九九久视频| 亚洲古典另类欧美在线| 殴洲老熟女| 久久精品熟女亚洲AV麻豆软件| 国产一区二区久久| 熟女字幕| 91大学精品激情戏| 色香欲影| 99青草| 色97国产69香蕉| 欧美的性爱网站免费| 日本有码影片下载| 秋霞色色影院| 熟妇人妻一区二区三在线| 日本韩国国产精品一区| 亚洲s在线观看| 久久人妻熟女一区二区| 伊人黄色片| 欧美色图成人网一区二区 | 无码精品久久久久久亚洲| 丁香六月婷婷| 亚州欧美在线| 日本三级韩国三级99| 四虎精品一区二区| 97露脸精品丝袜| 欧美性爱第一页久久| 亚洲不卡不卡中文字幕不卡| 超碰日韩人妻| 国产精品一区二区后入| hd成人一区二区在线| 天天草AV| 女优视频第10页| 午夜一区| 亚洲天天更新| 青草青青久久久久久国产| 97资源久久| 久久黄色网址| 亚洲性爱无码乱伦av| 日日玩天天干| 国色天香av| 国产强奸乱伦无码视频| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | JULIA一区二区三区在线播放| 懂色综合久久久| 欧美在线播放| 91无摭挡| 麻豆av一区二区三区| 精品人妻一区二区三区在线视频不卡| 欧美性五月| 日本人妻伦在线中文字幕| 欲色影视综合吧| 久久伊人亚洲AV无码网站| 亚洲区限制级| 开心五月激情网| 超碰97久久| 91N综合在线| 亚洲欧美国产其他二区| 狠狠操,使劲操| 一区二区三区国产精产| 成人短视频在线观看| 欧美AB在线| 丝袜制服字幕在线| 国产精品久久久久av| 91久久青青草原精品| 亚洲一本色码中文字幕| 小草精彩毛片| 亚洲夜夜欢无码一区二区| 尹人免费观看视频在线| 亚洲天天自拍| 精品国产乱码久久久兰草影视| 亚洲色人阁| 中文字幕乱码人妻一区二区三区,99精品| 青青草影视蜜久久| 国产精品网站免费| 国精品一区二区三| 国产操逼逼网| 午夜福利免费福利视频| 隔壁邻居波多野结衣中文字幕| 99热97| 99色热国产视频精品| 亚洲一区制服诱惑| 午夜精品久久久久久久男人的天堂 | 色婷婷日韩精品一区二区三区| 女人午夜视频777| 国产精品ww久久| 亚洲精品蜜桃久久久久久久| 白丝1区2区3区| 黄网色一区二区三区四区精品| 91精品免费| 久久99国产综合精品女同| 欧美特大黄一级片片免费| 又大又大又大又粗爽高潮观看 | 伊人一区二区三区| 78综合网| 精品一区二区啪啪啪| 高清在线偷拍自拍视频| 日韩AV中文字幕电影| 最新国产亚洲精品精品国产亚洲综合| 熟妇一区,二区,三区。| 亚洲十八禁止| 亚洲欧美激情小说| 国产精品高朝久久久久久久| 国产精品久久久午夜夜伦鲁鲁| 免费看日本操逼视频| 强奸乱伦日韩AV| 插日本熟女视频| 欧美一级黄色18片免费看| 久久久久久电影| 国产黄色影片在线观看| 日韩激情小说一区二区| 婷婷久久五月| 欧美午夜精品久久久久久超碰| 国产精品久久久啊| 三级日韩一区二区三区| 99精品欧美一区二区三区桃色| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产在线精品偷| 亚洲中文日韩欧美大香蕉视频| 亚洲阿v天堂在线| 综合网欧美| av中亚| 日韩欧无码一区二区三区免费不卡| 夜草欧美| 欧美久久久| 国产搭汕a级片| 色五月av| 亚洲码在线中文在线观看| 国产女同在线观看视频| 成人性爱免费播放| 人妻熟女字幕一区二区| 好吊色一区| 亚洲精品国产av天美传媒| 亚洲日韩熟女人妻高清在线| 97在线日韩中文字幕| 91在线观看,天天综合| 天天综合官网| 亚洲阿v天堂无码z2018| 大香网伊人久久综合| 爆乳免费黄网站| 欧美猛交黑寡妇中文字幕| 爱丝福利| 91中出| 欧美一区二区福利在线| 97亚洲国产影视| 国产熟女| 无码高清操逼网址| 人人操人人大香蕉| 美腿色图| 亚洲天堂资源网| 乱伦av麻豆| caorenqi shipin| n1038 一二三区| 久久久精| 国产成人www免费人成看片| 亚洲色图超碰在线| 91超碰丝袜制服| 中文字幕国产在线天堂| 午夜丁香婷婷| 最新制服中文第一页| 91搞逼视频| 日本欧美国内在线| 中文欧丝袜诱惑| 91五十路| 婷婷香蕉欧美在线一区二区三区| 夜夜免费视频| 色图综合网| 91精品久久综合熟女| 日韩欧美丝袜诱惑| 极品欧美一区二区三区| 91视频国品一二三区| 99re在线视频国产| 色哟哟综合| 精品久久久久黄少妇| 一起草视频在线| 日本操BAV| 91/欧美| 青春草莓视频在线观看网址| 久操高青| 九九九九九九视频免费| 亚洲天堂电影精品一区| 久草精品在线| 尤物一级在线免费观看| 欧美另类丝袜熟女| 日本道久久综合色色| 国产精品久久久999| 久久精品国产AV一区二区三区| 人妻一区视频| 综合色图亚洲欧美| 亚洲熟女综合网| 国产激情在线观看| 亚州精品人妻一二三区| 五月丁香婷婷色| 久草精品一区| 无码聚合| 精品一区二区三区蜜桃| 强奸xx国产| 噜噜噜亚洲精| 精品福利视频| 国产成人拍国产亚洲精品| 97干com| 国产乱伦搜索结果91P| 999久久久久久久精| 人妻人久久精品中文字幕| 美国aaaaa一级黄片| 超碰中文字幕人妻草一区| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 欧美,日韩,亚洲视频| 国产久久日| 国产高清在线观看欧美| 中出20p| 中文自拍欧美影视| 91爱| 久久97资源 网| 久草国产在线视频| 欧美自拍网| 二色av| 国产高清视频无码在线| 土豪酒店各种姿势玩弄极品幼稚| 韩三级a视频在线观看| 久热久| 欧美成人性爱视频免费观看| 97精品在线| 日韩激情啪啪| 久久亚洲AV无码白度| 欧美内射少妇| 禁十八久久| 人人摸人人入| 日韩成人人妻网站| 91精品电影18| 中日韩欧美精品无码AⅤ一区二区| 江都AV在线| 亚洲av综合色区图片亚洲| 日韩本不卡视频在线观看 | 91露脸熟女专区| 不卡一区视频| 激情图片伦理国产一区二区日韩| 好涩综合| 一区二三区四区视频大全套| 吻戏激情性巴克| 少妇啪啪自拍| 国产精品爆乳懂色蜜乳| 嗯嗯啊啊好大好爽| 快点操死我| 国产麻豆一级精品视频| 亚洲人妻中文在线视频| 少妇精品久久| 超碰视97中文| 蜜桃狠狠色伊人亚洲综合 | 97日韩超碰超碰中文字幕| 欧洲乱码一区二区| 后X久久| 亚洲AV无码国产精品久久久久| 神马午夜久久久| 久久九九99| 亚洲 欧美 偷拍 唯美| 青青草华人在线欧美在线| 精品一区二区三区四区女| 水澄无码AV| 日韩不卡毛片Av免费高清| 国产精品人妻无码久久久互動交流| 日本99久久| av爱爱爱| 97香蕉网| 亚洲全色网| 97久久国产亚洲精品超碰热| 熟妇国产免费一区| 五月婷婷六月天| 91久久久久久久| 大香蕉专区| 大香蕉www.超碰| av三级电影在线播放| 欲香欲色综合天天伊人| 四虎影视欧美| 九九九免费视频| 超碰97导航| 欧美在线视频观看一二三四区高清| 无码视频黄色网战| 日韩人妻 中文字幕| 国产极品粉嫩馒头一线天av| 久久精品国产亚洲AV嘿嘿| 中文?日韩?免费?精品| 亚洲人久久久久日| 久久伊人影院| 91性感在线| 亚洲精品久久久久毛片A片拉屎 | 亚洲综合97| 另类欧美色| 国产精品视频内谢女人| 日躁天天爽爽| 绯色一区二区三区不卡少妇| 久久久久久久免费A片国产成a人亚洲精∨品无码| 人妻久久| 亚洲巨爆乳一区二区三区四季网| 亚拍在线| 99999国产| 国色综合天| 97视频网站| 色欲无码人妻日韩欧美精品| 亚洲二区精品在线观看| 欧美日韩性爱精品| 99re视频在线观看这里只有精品| 强被迫伦姧在线观看无码网站| 欧美久久婷婷| 97精品人妻一二三四| 综合亚洲网| 骚女天天综合网| 1769成人国产精品视频| 操逼无码操逼| av片在线观看免费播放| 日本免费不卡二区| 91AV天美在线视频| 婷婷人妻激情| 久久欲| 激情av| 欧美亚洲丝袜美女电影| 久久久精| av网站国产主播在线| 成人免费看吃奶视频网站| 99热伊人| 天天天天天天天天综合| 久久人妻熟女一区二区| 国产亚洲精品农村妇女| 黄色网址久久精品欧美喷水| 天欧美在线| 国产91 丝袜在线播放00-百度| 色偷偷综合91久久噜噜| 91肉丝| 嫩草一区二区在线观看| 欧美第一页性| 中文字幕激情小说| 日韩综合无码色欲vv| www.狠狠操| 熟女一区二区三区| 97天天摸天天爽| 亚洲精品国产精品乱码不99| 亚洲第一二区另类图| 欧美色另类| 免费超碰97在线观看| 久久久九97| 超碰在线1234区| 偷拍三区| 国产农村妇女精品一| 果冻传媒一区二区三区| 思思视频免费看网站| 超碰99热| 天天操人人操骚逼网站| а√天堂资源官网在线资源| 国产欧美日韩在线观看麻豆传媒公司 | 爱射综合| 日韩二区三四区五区六区在线看| 男女啪啪啪18禁网站| 综合操逼| 丝袜亚洲91| 国产精品久久久久无码Av网曝门| 强奸乱伦Av网| 四虎免费看黄| 五月丁香黄色网| 久久久无码国精品无码三区三区| 91成人国产综合久久精品蜜月| 69超碰综合| 久久久999国产| 99久久婷婷丁香| 久久99手机免费视频| 最近二区三区视频大全| 国产精品一二三免费网站| 在线观看啊啊啊啊啊| www.人人cao| 天天在线91| 久久精品店| 久久成人午夜狠狠| 欧美黑人精品一区二区| 蜜臀AV一区二区三区| 日韩性爱高清免费视频| 夜夜高潮夜夜爽国产伦精品| 婷婷五月激情综合| 久久人妻熟女一区二区 | 玖玖人人爱| 日日摸天天爽夜夜欢| 91N欧美| 极品色综合| 天天流夜夜操| 一类无码操逼视频| 老鸭窝日丰县女人| 91丨九色丨国产打屁股| 99热思思| 免费精品无码一级毛片牛牛影视 | 久久久少妇诱惑精品视频| 老熟女搡BBBB搡BBBB视频| 1204av韩国| 国产精品欧美日韩久久| 日韩成人人妻网站| 玖色AV| 亚洲一区二区久久久久| 超碰精品人妻狠狠干| 亚洲欧美日韩综合在线尤物 | 久久久免费高清中文视频| 亚洲精品色| 99久久久无码国产精品性啊聊 | 午夜天天碰综合视频| 人人做天天爱| 在线亚洲丝袜视频网站| 久久香蕉网| 成人免费性爱视视| 久久一本大香蕉| 天天爽人人综合免费7799| 久久久久久中文字幕中文字幕最新| 男人下部插入女人下部| 大香蕉色欲AV| 天天天天干| 黄人人操人人操| 东京热99999| 九九九九久久久| 久久国产免费激情视频| 亚洲图片欧美偷拍| 婷婷美人网| 玖玖在线视频| 亚洲黄色网址视频| 国产精品爆乳懂色蜜乳| 色欧美色交综合| 国产视频一区二区在线| 国产高清无码一区二区三区四区皇冠| 精品久久久久黄少妇| 成人a大片在线观看| 久久精品无码熟妇一区二区三区视频导航 | 亚州色国| 精品一区96| 国产无码一二三区| 伦激情人妻另类人妻| 岛国天天午夜影院传媒网| 欧美性性性| 中文字幕日韩精品一区二区三区| 国产精品不卡高清在线观看| 97爱啪| 台湾大香蕉99热| 日韩中文字幕在线视频观看| 国产美女自拍AV| 伊人久久AV诱惑悠悠| 国产av色网| 成人精品视频一区二区| 国产熟女少妇一区| 亚洲一区中文字幕一区| 成年女人黄网站| 综合久久少妇中文字幕| 91少妇人妻| 久久久九| 久久激情视频| 成人色女网| 婷婷国产精品九区| 久久婷婷亚洲| 免費黃色視頻觀看一| 久久av成人无码免费| 中国AAAAAA黄色片| 污色区网站| 久久中出| 国产1024在线播放| 国产高清午夜成人在线观看| 中国乱伦一区二区| 亚洲性猛| 黄久在线| 中文字幕一区二区三区蜜桃视频| 操婷婷逼| 影音先锋视频在线| 中文字幕一区二区在线日韩精品| 曰韩精品九九无码| 美女黄页| AV九九| 99热99在线| 大地资源在线观看中文第二页| 东京热99999| 国产成人精品一区| 91天堂丝袜美腿| 天天综合站| 91综合天天| 夫妻AV网站| 国产91 丝袜在线播放| 欧美日韩在线小说| 91福利网在线观看| 亚洲一区二区三区中文字幕| 嗯啊抽插大香蕉网页| 一级黄色性爱A级片| aⅴ日韩成人电影av在线免费看av大全| 夜夜欢天天干| 精品熟妇视频一区二区| 国产精品天堂| www.久久制服糖| 国产亲戚伦亲在线| 久久美女福利是上海美女| 色99视频| 成人精品在线| 亚洲91网。| 97精品97久久| 91天美| 国产精品一区av在线| 亚洲一区二区精品福利| 99久在线精品99re8热| 伊人色综合超碰| 超碰久久综合| 免费岛国一级片| 中日亚韩免费视频| JULIA一区二区三区在线播放| 日小BB小视频| 九九综合色| 国产乱码久久| 天堂综合| 免费精品无码一级毛片牛牛影视| 欧美色视| 成人aⅴ一区二区三区| AV 少妇 人妻 偷拍| 久久大陆| 色图综合网| 色色色色电影网| 青青草精品| 婷婷激情四射| 色色色天美视频| 天天日老熟妇| 国语精品对白| 大色综合网| 亚洲 欧美 小说| 日日AAvv| 强奸乱伦AV网站| 日韩在线观看中文字幕视频| 欧美精品久久| jizz啪啪| 一区二区久久天天干狠狠| 免费看片黄| 人人色人人操在线| 精品视频久久区| 操逼视频亚洲| 黄网站黄视频网站进入口| 国产老女人久久毛| 丁香五月性| 99爱久久视频频| 老鸭窝成人免费毛片视频| 黄网色一区二区三区四区精品| 国产伦精品一区二区三区在线观| 综合五月天| 少妇熟女视频一二三区| 黄色AAAAAAAAAAA大片| 爱射综合| 丰满人妻一区二区三区| 99成人| 欧美激情内射| 五月丁香啪啪网| 人妻激情视频| 久久久久久人妻| 欧美传媒一区| 玖玖玖玖精品国产剧情| 东北操逼| 操逼网免费无码视频| 超碰视97中文| 熟女视频久久| 九七超碰人人乐| 丁香婷婷大香蕉| 999九九九九国产动| 五月丁香婷婷啪啪| 天天噜| 99青草| 国产免费黄色一级大片| 麻豆性爱视频在线播放| 国产精品成人久久一区二区三区| 色狠狠色| 女人综合网| 在线啊啊啊啊| 人人爱人人乐人人操| 桃色六月天| 尤物网址| 大香蕉日亚洲日本亚大| 午夜精品视频777| 亚洲欧洲激情卡通另类文学四射小说网站| 久久久久亚洲av综合波多野制衣| 99热婷婷| 日韩一级欧美一级国产一级台湾 | 久久久亚洲欧美综合| 91国产丝袜美女| www.激情| 夫妻天天操岛国视频| 九九无码久久精品视频| 艹精品| 国产熟女一区二区| xxx亚洲午夜天堂| xxxx网站亚洲精品| 欧美色干| 伊人网在线观看| 久久一区二区三区入口| 91美女网站| 我爱搞逼综合网| 五月丁香| 无码日韩人妻av一| 啊啊啊无码| 成人精品欧洲亚洲| 五月天开心网| 国产午夜在线观看| 国产一区二区久久| 91黑丝在线播放| 视频黄色国产一级| 91日韩国产欧美亚洲另类精盘州至城都 | 蜜臀久久久99久久久久| 欧美精品 - 91爱爱| 欧美日韩第一页| 91在线欧美| 91国内外在线| 偷拍欧美激情| 夜间福利片1000无码| 日本加勒比无码专区| 91爱看| 色性欧美| 熟女色综合久久| 国产肏逼网站| 干B网| 天天综合麻豆视频| AV天堂电影网| 日韩人妻精品久久久久| 人人摸人人叼| 国产精品视频自拍在线| 97爱亚洲| 97精品人妻一二三四| 男人的天堂在线| 麻豆AV一区二区| 日韩三级一区| 色播综合| 日韩精品永久在线观看| 小日子操bb在线看| 国产午夜精品理论片一二三区区| 殴美综合色88| 天堂蜜桃无码视频一区二区| 国产精品熟女丝袜一区二区| 国产成人自拍视频视频| AV乱伦专区| 懂色Av| 精品日日人妻| 91久热| 中文字幕福利视频一区二区三区在线观看| 天天综合网站| 看一级黄色视频| 国产激情在线| 色婷婷激一区二区三区| 免费人成在线观看网站品爱网| 天天天堂影视日韩亚洲91| 日本一天色道久久久精品视频| 无码丰满熟妇一区二区浪潮AV| 情色五月天网| 亚洲情色一区二区三区| 日本99一区二区| 91夜夜蜜桃臀1区2区3区| 欧美日韩222| 中美日韩毛片| 精品人妻一区二区乱码一区二区| 成人性爱美曰韩| 日韩一性一交一A片俄罗斯| 欧亚成人| 亚洲 欧美 手机在线观看| 中文字幕精品资源在线| 日本福利二区视频| 亚洲性爱无码乱伦av| 综合久久中文字幕综合日韩精品| 超碰78| 国产成人91一区二区三区| 国产在线能看的你懂的| 国产无马在线| 精品少妇人妻av久久免费| 视频黄色国产一级| 日本午夜福利影院| 91操操| 大香蕉AV丝袜| 中文字幕-区二区三区四区视频中国 | av一区二区三区四区| 欧美日韩*字幕一区| 在线无码视频| 国产吞精a级片激情电影| 99热欧美| 抽查国产福利主播| 色噜噜国产在线| 最新中文字幕av| 亚州再线| 亚洲色图 91| 综合夜夜| 免费伦费视频在线观看| 国产AV激情无码久久无码| 亚洲精品天堂久久A∨51成人漫| 亚洲 欧美 日韩 国产一区二区 | av无线看| 七久久久| 亚洲AV不卡在线观看| 黄色视频高清无码网站| av一区二区三区 中文| 亚洲色图 欧美热图 清纯唯美 另类自拍| 99热精品在线播放| www.91欧美| 久久久久久性爱免费视频| 国产又黄又爽又刺激久久久久久| 国产v亚洲v日韩v欧美v片另类| 综合色久欲| 97国产精品在线观看| 一级性爱视频免费观看| 国产日本久久免费精品| 无码heyzo高清一区| 久久超碰av在线| 欧美色亚洲| 国产情侣自拍在线播放| 欧美亚洲20p| 97伊人超碰| 亚洲无码成人精品| 丁香五月AV| AV色五月天| 成人国产视频在线观看| 人妻人人操| 欧美色一二三| 神马久久久久久| av一区二区三区 中文| 91亚州欧美| 少妇综合网| 丁香五月偷拍| 日韩毛片9| 亚洲欧洲综合成人av一区| 殴美,日韩国产伦精品| 天天综合站| 三级特黄60分钟播放| 欧美大香蕉卡久久| 男人的天堂一区| 国产免a费看黄片在线| 97青青操视频| 91精品人妻一区二区三区蜜桃| www.acm成人黄色毛片| 欧美91色| 久久99九九九九6666免费观看软件| 神马影院午夜福利久久久| 欧美日韩在线视频网站| 97视频在线免费看| 亚洲另类天堂| 打av高清| 午夜.DJ高清在线观看免费7| 欧美综合色站| 国产精品毛片?v一区二区三区 | 91操人| 一本色道久久综合熟妇| 一区三区啪啪| 中韩中文字幕在线观看| 国产91美女高潮| 999久久久| 欧洲亚洲人妻无码中字久久三区四区 | 日日躁夜夜躁狠狠躁超爽| 亚洲AV无码成人精品久久| 91模特在线观看| 五月丁香色色网| 亚洲无 码A片在线观看麻豆| 九九九九日本 | 十八禁视频网站| 国产2.3.4区| 五月天综合| 国产 日韩 欧美一区| 午夜精品久久久久久久99热影院 | 亚洲 日韩 欧美 国产综合体| 伊人久久亚洲中文字幕不卡| 曰韩成人免费视频| 9久久精品| 九热大香蕉| 大色综合网| 中文字幕一区二区三区50路| 亚洲天堂自拍| 思思热影视| 色妇综合网| 美欧老女人97| 尻女朋友一夜| 国产亚洲中文不卡二区| 亚洲Av诱惑| 自拍视频大全亚洲专媒视频/一区二区三区 | 精品国产人成在线| 91美女精品| 97亚洲资源| 99精品网| 中文字幕日韩精品久久| 日韩日韩日韩-国产乱码精品一区二区| 欧美一级久久久丰满| 日本媚薬中文字幕在线| 激情欧美日韩女同久久| 亚洲午夜AV| 日本高清视频xxxx| 欧美肥臀在线| 九草在线大香蕉| 色五月av| 欧美性巨大╳╳╳╳╳高跟鞋| 伊人久久大香线综合无码| 欧美日韩中文亚洲v在线综合| 九九九精品色乱九九九| 花野真衣| 秋霞影音一区二区三区| 国产精品日本无码A片| 欧美第五页| 亚洲天天影视色综合| 97视频在线免费看| 九九RE视频在线精品| A 在线网址| 亚洲最新Av| 91制服丝袜中文字幕| 黑人干亚洲| 超碰97最新人妻| oumeisetu综合| 五月婷丁香| 亚洲欧洲日韩国产自在线| 精品日韩人妻精品一二三区| 后入国产| 96久久久久久久| 乱伦一二三区| 欧美日韩狠狠爱| 99re在线视频这里只有精品| 日韩电影天堂视频一区二区| 超碰在线974| 亚洲精品丝袜-不卡成人免费……| 人妻91少妇| 999久久久久久久久| 亚洲诱惑天堂 | 午夜精品久久久久久久99蜜桃一| 久久亚洲日韩熟女精品| 91欧美巨乳| 嗯嗯啊啊啊啊轻点视频| 加勒比海成人视频网| 精品国产99| 区一二区日韩亚洲乱码av电影| 免费精品中文字幕| а√天堂资源官网在线资源| 啊啊啊啊啊在线| 欧美亚洲情色| 2024黄色视频| 日欧操屄| av无线看| 国产亚洲精品美女久久久m| 精品人妻一区二区视频| 蜜乳AV一区| 中文字幕123| 日韩国产中文字幕| 日本九九九九| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 婷婷五月天激情小说| 91操人| 97视频观看| 天天综合有色网| 金典av| 国产精品一区二区麻豆| 亚洲熟女一区二区| 久久啊啊啊| 国产区日韩区在线观看| 九九精品99| 国产树林里野战在线看| 99热在线观看| 欧美性爱97超碰| 四虎884a| 无码人妻毛片丰满熟妇精品区| 亚洲熟妇无码一区二区三区| 今日头条成人一区二区三区四虎精品| 国产激情综合| 日本一区三级韩国| 9久久美女首页| 国产精品久久久九九九| 97在线欧| 国产色产精品在线观看| 又大又长又粗又爽又黄| 欧美精品日韩一区二区| 午夜男人天堂| 风骚少妇视频中文字幕| 国内一级精品| 老子午夜伦不卡影院| 操逼视频免费日韩无码| 激情五月综合网| 久久精9| 中文字幕黄色一起草| 午夜小电影在线插入淫高潮| 欧美日本一区二区a人| 日韩97超碰中文字幕| 密臀AV在线| 久久久91| 国产一区二区a毛片| 激情开心五月天| 2017大香蕉国产精品久久| 欧美九九九| 欧美1区二区三区公司| 91综合在线| 天堂射| 丁香九月婷婷| 日本一片一区| 天天摸,夜夜摸| 欧美猛交黑寡妇中文字幕| 国产久久天堂资源| 1人人看人人摸人人操| www.婷婷| 98福利在线视频| 亚洲天堂精品日韩电影| 五月丁香社区婷婷日韩欧美精品影院| 三级日本一区二区三区| 最新中文字幕在线亚洲| 久久久艹艹艹| 亚洲图片小说欧洲| 超碰在线观看av不卡| 九九九久千久久激情蜜桃在线看| 97干com| 玖色av| 老熟女乱子伦中文字幕一区二区| 久久夜黄色无码A级大片| 国产日韩精品一区二区三区| 日韩人人精品| av天堂精品久久| 欧美人妻二区三区| 中文字幕激情小说| 黑人黄片在线免费观看| 国产白丝在线| 中文字幕在线免费观看2| 丁香五月综合| 亚洲情色 无码专区| 熟女精品va中文字幕| 九热大香蕉| 在线免费观看高清无码视频| 久久久久久亚洲精品不卡人乳 | 乱人乱色一区二区三区免费| 久久av一级av少妇av高潮| 日韩AV中文字幕电影| 啊啊啊啊网站| 亚洲情色电影网| 美女性91| 91粉芽高清在线一区二区| 欧美色蜜桃97| 狠狠综合| 亚洲黄色AV电影| 丁香五月婷婷色| 久久久亚洲精品中文字幕人妻| 免费精品无码一级毛片牛牛影视| www.99色| 色色99| 热久久国产| 97在线观看免费视频l| 亚洲小电影免费涩涩成人在线高清| 中文字幕一区电影在线观看| 精品小视频在线| 99久国产精品午夜性色福利| 欧美日韩大陆黑人少妇99| 最新国内自拍av免费| 欧美A√综合网 | 搡老熟女老女人老熟妇免费视频| 六月色婷婷| 人人澡人人干| 青青11操操操操操操操操| 色综合一区二区三区| 国产精品经典一卡久久久| AV乱伦专区| 亚熟hd视频在线| 日韩午夜精品一区二区三区电影| 丁香六月婷婷久久综合| 人妻一区二区三区熟女| 久操高青| 欧美亚洲国产91在线| 久久神马影院| 亚洲人妻中文高清| 亚洲,欧美,综合网| 日韩精品一二三四| 香蕉国产精品麻豆亚洲欧美日韩| 九九色图| 三上悠亚在线毛片91| 黄色不卡视频| 日韩在线观看中文字幕视频| 色香天天| 亚州再线| 中国探花熟女| 综合色一区三区二区| 青青草五月天| 中文久久爆乳| 久久久久久久久999| 九九夜精品九九在线| 日本亚洲熟女视频| 啊啊啊好想要| 欧美变态激情网| 五月天成人综合| 国产无码久久高清| 天天在线91| 日韩中文字幕熟妇人妻| 中文字幕狠狠玩| 性无码专区2020| 亚洲精品人伦一区二区| 久久国产精品91| 首页中文字幕中文字幕免费| 精品九九| 精品无码产区一区二| 高树玛利亚无码流出| 亚洲欧洲国产综合av| 人妻一区二区三区四区视频| 肉丝无码中文高清| 欧美色图亚洲色图成人在在线| 久久一区二区蜜桃| 青青伊人久久| 大香蕉伊利av| 日本精品高清一二区一本到| 夜夜骑夜夜操| 少妇色欲综合网2| 亚州 综合 色图| 久久久9视频| 99久久网站| 95自拍视频在线观看| 欧美天天性| 久久久性爱| 久久人体一区二区| 精品人妻一区二区免费蜜桃| 午夜丁香婷婷| 日韩不卡a级视频专区| 日韩成人精品| 久久久久99999| 91天天综合在线| 欧洲亚洲人人爽爽视频| 亚洲国产一级中文综合久久天堂在线免费观看| 91九色在线| 91在线精品| 啪啪啪精品视频| 四虎影视永久在线免费| 久久五月综合| 东亚亚洲无码高清| 五月天我淫我色av| 色汉综合| 亚洲无码日韩电影| 国产AV线| 五月天亚洲网| 日欧毛片久久| 欧美成人色| 精品97久久综合| 亚洲97精品| 天天添天天干电影| 亚洲av资源| 五月大香蕉| 野狼福利社区| 亚洲欧美另类少妇精品| 97天堂| 操人妻少妇中文 | 亚洲情色电影网| 91麻豆天美国产欧美高潮| 加勒比在线观看一区二区| 亚洲精品久久久久久久久豆丁网| 开心五月婷婷激情| 精品九九淫乱男| 国产一区二区三区视频在线看| 一区二区三区黄色片a| 熟女丰满人妻一区| 久9热| 人人看人人插| 人人澡人人澡人人| 欧美日韩丝袜| 91高潮|