日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
久草在| 久久99手机免费视频| 日韩人妻无码不卡网站| 婷婷精品| 色y情视频免费看| 任你干在线视频| 国产 日韩 欧美 人妻 熟女 中文| 亚洲在线欧美| 亚州国产成人精品女人久久 | 色综合98| 亚洲最大无码中文字幕网站| 欧美性爱免费短视频| 亚洲精品蜜桃久久久| 99热这里是精品| 无码WWW免费视频网站| 性爱AV天堂| 在线国产一区二区av| 色噜噜狠狠色综无码久久合欧美| 欧亚成人在线视频| 富二代亚洲精品99| 玖日综合网| 91成人久久| AV天天在线观看| 亚洲美女 晚间男人天堂| 亚洲色图欧美一区二区不卡| 中文字幕国产| 嫩草91| 性爱久久| 天天色粽合合合合合合合| 在线岛| 私人尤物在线精品不卡| 久久二| 九九九九免费视频| 天天综合网亚洲综合网| 无码久| 久久9 9 9精品| 日本人体九九九九九九| 99无码| 亚洲精品国产精品乱码不99| 欧美黑人精品一区二区| 蜜乳AV网址| 欧美高清18A片| 啊啊啊好舒服视频| 欧美色图人妻| 日韩精品三级片长长久久| 后入人妻一区| 三级片大波波| 宅男91视频在线播放| 91在线美女| 国产精品一二三区福利| 999日韩中文精品观看视频。| 日韩一级特黄av毛片| 一线黄色免费性爱片| 欧美人人曰人人操人人射射| 国产精品午夜精品| 青青草依人大香蕉| 97久久超碰日韩精品| 亚洲成人在线乱码色午夜| 韩国毛片一区二区三区| 四虎免费视频| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 亚洲天天做日日做天天谢日日| 狠狠91| 欧美亚洲高清晰| 99热18这里只有精品| 人人考人人摸人人干| 伊人991| 色综合中文字幕不卡| 午夜精品探花| 久久精品毛片免费不卡| 人人做人人妻人人夜视频| 国产精品96| 欧美在线永久天堂| 啊啊啊免费视频| 中文字幕丰满人妻日本| 日韩免费在线视频观看| 99久久99久久综合| 久久超碰97中文字幕| 淫骚熟女一区二区三区| 好吊色青靑草| 97久久超碰| 欧美精品成人在线播放| 秋霞视频一区二区| 亚洲国男人的天堂| 99re69综合| 一本久久精品中文字| 人妻另类| 玖草在线视频| 很很很很操| 天天干夜夜肏| 国产精品久久久久久久久久久久| 国产一区二区三区视频在线看| 国产高清精品福利| 日日日啊啊啊| 97香蕉网| 成人性爱电影网| 九九热免费在线国产视频伊人五月| 91综合国产精品| 夜夜嗨一区二区三区直播内容| 国产欧美日本亚洲精品 | 国产成人五月天丁香花| 无码高清国产AV| 九九热在线视频| 亚洲中文人妻色| 色偷偷超碰亚洲| 欧美爱三级日韩久久| 夜色91| 大JI巴好深好爽又大又粗视频| 无码一区免费在线不卡| 亚洲偷拍自拍在线视频| 另类av天堂| 亚洲情色 自拍| 老熟女乱子伦中文字幕一区二区| 欧美三级一级| 人人妻人人澡人人爽久久av| 97干在线视频| 97超视频在线观看| 狠狠91| 97精品综合久久| 久久久性少妇| 成人精品久久久午夜福利| 色色色欧美| 青青草玖玖爱| 天天操夜夜嗨| 色在线69堂| 不卡av在线中文字幕| 女人香蕉久久毛毛片精品| 国语对白在线播放视频| 日韩精品人妻中文字有码在线| 91人人操| 日韩欧美视频青青| 黑人精品一区二区在线播放| 男人的天堂成人的社区| 琪琪精品免费一区二区三区| 欧洲Au麻豆| 久久精品福利影院| 综合天天网| 国产日韩在线播放av| 亚洲 欧美 小说| 亚洲黄片免费在线播放| 欧美亚洲第1页| 国产精品女生av| 狠狠色色| 成人自拍三级在线观看| 国产精品久久久九九九| 亚洲人妻中文在线视频| 泰国AV在线观看| 欧洲性爱无码区| 亚洲第一成人影院色播| 青青草视频在线观看一区二区| 黄片免费日韩| 亚洲综合九| 在线无码操| 韩日欧亚a级| 少妇99成人麻豆| 久久精品国产Aⅴ| 91性生活久久久| 欧美大香蕉同搞| 久久精品无码不卡| 东北女人av| 夜夜欢天天干| 美女的肌被草喷水视频| 久操不卡视频| 国产又黄又爽| 啊啊啊好舒服视频在线观看| www超碰| 26uuu最新| 日日A∨| 手机在线A片| 97久久国产精品| 亚洲精品男人的天堂| 精品综合久久久久久五月天| 国产美女激情| 丰满人妻一区二区三区四| 免费久久一级毛片大黄| 美女91| 亚洲第91页| 亚洲人人操| 国产隔壁老王影院在线| 天天射天天色成人| 蜜臀av中文字幕| 精品少妇后入一区二区三区四区人妻巨乳 | 亚洲欧美伦综合| 91久久午夜无码鲁丝片久久人妻| 熟女人妇一区二区三区| 国产对白刺激视频| 亚洲中文字幕在线视频一区二区| 人伦四五区| 亚洲欧洲小说图片视频 | 99热综合| 国模无码人体一区二区三| 精品无av| 亚洲情色无码一区二区三区| 久久久久久久久久久久黄色 | 五月天婷婷社区| 国产丰满熟夫69mpp| 五月天色图| ji熟女.com| 亚洲乱熟女一区二区| 色天使大香蕉| 国产极品999| 欧美日韩第一页| 色综合天天| 国产精品爆乳懂色蜜乳| 免费男人的天堂| 欧色性第一页| 精品久久9| 亚洲青色欧美| 97欧美久久久久久久| 91欧美美女日韩国产婷婷| 欧州色图区| 开心五月婷婷激情| www.色99| 久久久久中出| 国产a级精品| 天天色香欲综合网| 亚洲AV免费在线观看| 五月丁香啪啪| 大香樵伊人网| 91丨国产丨白浆| 黄色大片一区二区密桃丝袜| 久久精精区一区二区一蜜桃一区二区| 天天影视综合网欧美精品| 性爱精品一区| 综合一区中亚洲国产成人综合精品| 国产日韩在线播放av| 午夜视频久久久久一区| 探花在线免费观看视频国产一区| 在线A日本| 这里只有精品视频在线观看麻豆| 中文字幕亚洲永久精品| 国产九九九九九九九九| 高清在线偷拍自拍视频| 久久久久久久一级黄色打同平台| 97中文超碰| 亚洲日本男人天堂网| 夜夜爽妓女| 在线女人91| 精爱久久| 青操影院| 亚州综合在线| 天天视频网站黄| 色在线亚洲视频www| 中日韩一区二区三区欧美| 精品九九国产无码| 92人人操人人| 青青草日韩无码| 91久热这里只有精品| 日韩在线视频1234| 欧美少妇色综合| 色九九九九九九| 精品人妻视频一区二区在线播放 | 国产美女在线精品免费看| 一级人妻性爱视频| 午夜福利视频在线一区| 美女啊啊啊啊pc| 欧美青青视频| 久久久999| 日韩三A大片在线观看| 亚洲成人一区二区精品| 国产高清1234区| 综合97亚洲| 久久久久久999| 男女国产精品| 无码精品人妻一区二区三区妖精| 婷婷亚洲天堂| 亚洲 欧美 天天| 久久少妇人妻| 大香蕉伊人网| 人妻系列无码专区中文有码| 青青草九九九九九| 91欧美少妇| 综合伊人网12色| 狠狠激情综合狠狠操中文字幕| 在现视频女上位好爽| 青青青艹在线视频| 老外又粗又长一晚做五次| 99热婷婷| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 欧美精品日韩久久久九| 日韩三级一区| 欧美爱国产综合、| 在线无码网站| 亚洲国产综合久久天堂| 欧美 日韩第一性色| 岛国视频一二三区| 男人久久精品| 我要去看2个日本美女.com曹逼| 国产女人与拘做受视频免费| yazhousetuoumei| 上床啊啊啊| 国产操逼逼网| 色哟哟av网址| 亚洲高清无毛一区二区| 九九拍拍精品视频在线播放 | 精品国产乱码久久久久A| 天天日熟妇| 中文字幕丰满子伦无码专区在线视频最新| 亚洲激情AV| 日日干夜夜骑| 五月婷婷AV| 男人的天堂日韩| 欧美一级久久久丰满| 青青草吊丝| 亚洲最新Av| 欧美精品另类人妖xxxx| 91福利网在线观看| 女人妻一区| 国产91 丝袜在线播放00-百度| 欧美激情五月天| 久久久无码精品人妻二区| 黄网色一区二区三区四区精品| 日本蜜桃| 欧美性爱伊人| 久久精品28| 国产超碰| 亚洲久久久| 美女啊啊啊啊pc| 26UUU欧美日本| 日本精品88888888| 久久国产性爱| 天天综合站| 曰韩无码777| 亚洲精品人伦一区二区| 久9热| 蜜屁av| 国产精品青青草| 青青草依人大香蕉| 成人影 天天操 亚洲| 国产精品人妻一区二区| 九区国产| 污啪啪啪视频| A一区片| 欧美日韩亚洲国产中文永久天天看| 夜嗨影院| 无码人妻精品酒店| 久久久久人| AAA久久| 九七超碰| 日本精品免费一区二区三区四区| 国产精品亚洲无码| 欧美同性恋 的搜索结果 - 91n| 天天做天天爽| 国产啊v在线免费播放| 久久久久久久久女黄| 超碰三级秋霞| 围产精品一区二区三区视频播放| 国产sv美女内射| 6080yy午夜理论三级一区二区三区无码| 99无码狠狠久久| 4虎在线视频| 开心婷婷五月| 欧美一级特黄淫片在线观看| 久久精品一区二区三区四区五区| 超碰碰激情97+久| 欧美99| 一本色道久久天天射天天干| 90后后入| 330dv亚洲成年视频网| 大香蕉人妻| 日韩中文字幕人妻视频| 亚洲国产综合图区中文字幕 | 欧美97| 嗯~啊~轻一点 视频| 97亚洲国产影视| 大色综合网| 久久国产逼| 91亚洲网站| 色天欧美| 91骚妇| 欧美美女自慰一区二区三区| 亚洲欧美激情在线视频| 中文字幕日韩人妻视频| 亚洲精品一区二区日本| 一本久道久久综合狠狠爱一密臀精| 狠狠中文字幕| 毛片视频白嫩| 亚洲国产一区二区三区四区国产| 国产h小视频在线观看免费| 俺也射| 国产视频一区二区在线| 久久免费老司机精品| 思思热在线观看| 日韩欧美国产高清视频| 狠日操| 欧美激情视频在线一区| 男人女人18禁片免费看网站| 欧美中文字幕精品人妻| 丰满人妻区一区二区三| 91麻豆天美国产欧美高潮| 综合一区二区影视| 物业黑人 AV一区| 色九九九综合| 亚洲精品97中文字幕| 青青青青草av在线观看| 欧美日韩天堂| 欧亚日韩综合精品国产| 欧美中字二区| 国产免费久久精品99re韩国| 亚洲AV资源| 97福利视频| 久久久婷婷| 97操操| 天天爽夜夜爽夜夜爽精| 粉嫩av在线一区二区| 久久性爱网站| 日韩无码专区| 色综合尤物| 中文字幕精品一区二| 啊啊啊水好多| 丝袜美腿亚洲| 精品九九九| 天天日夜干| 97久久超碰| 国内精品嫩模A∨私拍小视频| 操b在线观看| 老司机天天操| 欧美视频中文字幕区| 婷婷五月天网| 亚洲限制级| 黑人干亚洲| 欧美中日韩XXXX| 91精品老女人| 日韩A优精品在线观看| 欧美视频边做饭边橾| 免费看黄片现成| 操逼免费视频无码国产| 丁香婷婷大香蕉| 欧美淫穴| 人妻少妇精品无码专区二区密桃| 91成人无码| 亚洲另类天堂| 精品一二三区久久AAA片| 欧美夜夜狠| 男人的天堂2000| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 熟妇高潮精品一区二区三区下载| 久9爱精品| 国语av狠狠色丁香婷婷综合激情| 亚洲欧美不卡线| 欧美亚洲另类在线蜜桃| 留下AⅤ黄色片| 嗯阿好爽好紧| 9997se| 熟妇乱伦一区二区| 天天色播亚洲综合网站| 亚洲综合影视| 精产品久久| 国产一区二区a毛片| 五月天激情小说| 国产免费久久精品99re韩国| 99久久精品国产系列| 秋霞蝌科网日本一区| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 无码粉嫩白虎一线天b区| 成人线上超碰| 俺去啦俺来也久久综合| 一区二区三区精品视频| 91 手机在线播放 绯色| 欧美视频一区二区三区| 国产99久久99热这里只有精品15 | 伊色综合天堂色97| 久久精品噜噜噜成人看免欧美大片| 国产综合久| 日韩丝袜二区| 97爱b| 国产操逼网站亚洲一级黄色| julia高潮后不停追击中出| 91AV天美在线视频| 一本大道不卡一二三区| 热久日综合| 欧美国产精品久久九九| 96精品在线| 国产精品大屁股999| 自怕偷自怕亚洲精品| 超碰 另类 欧美 | 白天啪啪晚上啪啪视频| 天天日天天射天天干| 91在线欧美| 五月丁香综合| 久久久久九九九| 熟妇熟女视频一区二区三区| 久久久久久久综合,国产| 日韩一级性爱无码| 婷婷色香| 色色网91| 91精品电影18| 日韩无码视频黄色| 97久久免费| 精品无码不卡视频| 精品人妻伦一区二区三区久久| 亚洲h片在线免费观看| 91熟女综合| 天天看天天在线精品| 夜草欧美| 亚洲国产一级精品毛一级精品看免费视频| 青青伊人加勒比海| 亚洲欧美日韩综合在线尤物 | 99热线麻豆| 色综合色| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 超碰色综合| 美女高潮视频91| 成 人 A V免费视频在线观看| 67194无码不卡| 精品国产三级av韩国在线| 国产精品网站免费| 欧美一级黄片免费播放| 女上位精品在线| 国产树林里野战在线看| 婷婷丁香人妻| 亚洲永久AV无码精品秋霞| 久久久久久一日韩字幕无码| 偷拍亚洲情色| 97蜜桃综合| 乱伦1色页| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 亚洲凸凹超碰成人| 另类图片五月| 丰满人妻-区二区三区| 9精品在线| 欧美刺激色黄片免费看| 91综合在线| 色综合99999| 亚洲av无线观看| 欧美色欧美| 成人日本精品九区| 精品国产91内射久久| 天天热精品| 厕所偷拍在线| 欧美性爱在线无码| 久9久| 大地资源在线观看中文第二页| 97在线看| aV中文麻| 久久视频,这里只有精品 | 日本天天色| 国产一区二区精品久久99| 欧美日韩亚洲天堂| 俺也射| 蜜桃视频一区二区三区在线观看| 久久婷婷影院| 无码人妻丰满热妇又大又粗| 永久电影三级在线观看| 97色色,97综合| 97资源制服丝袜| 91被操| 97超碰中文在线| 久久久久久中文| 老女人老91妇女老热女| 97久精品| 很很干很很操| 欧美一级色| 国产aⅴ无码片毛片一级网站| 男人的天堂 在线一区| 99精品无码| ...日韩成人一区二区三区字幕| 亚洲国产剧情少妇激情| 91亚洲人电影| 日本 欧美 亚中文字幕| 日本精品不卡一二三区| 色欲蜜臀AV| 国模私拍一区二区三区神乳| 老熟女乱伦片| 天天做天天爱夜夜爽毛片试看| 超碰97在线中文| 久干网| 天天日老熟妇| 久久久9视频| 亚洲人精| 99re69| 伊色综合天堂色97| 亚洲天堂另类小说男人| 蜜桃精品一区二区三区ww| 国产成人bd在线观看| 日va操| A片 AV一级在线播放观看免费| 影音先锋乱伦资源| 国产一区二区三区久久久精品| 中文AV制服乱伦| 看免费的黄片| 精品成人动漫一区二区| 国产一区在线免费播放| 91精品国产高清久久久久久,亚洲成人| 色嗨嗨在线| 国产一区二区欧美日本| 日本 欧美 国产一区| 丁香久久| 四虎永久在线精品免费网址 | 亚州春色| 欧美伦乱| 黄页| 男女日B国产| 久久黄色性爱视频| 日本精品不卡一二三区| 青青草中文-久久青草精品一区二区三 | 黑人精品久久97| 91无摭挡| 超碰夫妻97| 无码人妻丰满熟妇区毛片| 老熟女阿 国产91| 欧美天天弄| 一道α片欧美| 在线观看日韩av不卡| 午夜久久无码1000合集| 91成人久久| 五月天婷婷色色| 精品人妻一区二区三区-国产| 欧美国产一区二区三区麻豆传媒| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 91狠狠综合久久| 一中国女人毛片水真多| 国产深夜福利| 欧美强奸乱| 欧美色棕合| 神马久久69| 91成人精品| 一区二区三区亚洲| 蜜臀av一区二区三区免费观看| 中文字幕少妇色| 99re这里只有精品2| 色综合国产在线观看| 色官网在线| 七久久久| 国产日韩中文字幕欧美| 免费看黄片现成| 凹凸视频特色日本特黄| 鸥美插入视频| 青青草久草| 欧美国产精品| 无码一区二区三区四区五区六区七区八区九区十区视频 | 久久男女激情视频网站| 欧美熟妇操操视频| 一区二区中文| 色婷婷狠狠18禁| 超碰亚洲97| 国产精品一区在线播放| 熟女人妻一区二区三区免费看 | 日本爽爽爽爽爽爽免费视频| 婷婷激情综合网| 99日免费视频中文字幕| 色香欲影| 亚洲黄网在哪免费看| 淫乱图区 | 伦伦成年午夜免费视频| 久久9亚洲| 9久久久久| 欧亚在线视频| 日本道日本道中文字幕日本道最新日本道在线观看 | 久久三区四区| 99视频精品| 大香蕉伊人在线成人AV在线观看| 亚洲人妻色图| 国产精品一区二区黄片| 国模91| 久久久国产亚洲精品系列| 麻豆久久久久久久久丝袜| 亚洲毛片基地专区| 精品久久視頻在线| 蜜桃中文字日产乱幕4区| 亚洲Av噜噜一区二区三区妖精| 国产白丝精品在线观看| 久久手机好看网站| 亚洲不卡三级手机播放| 伊人97超碰| 欧美亚洲91| 亚州操操穴网| a片自拍直播视频| 超碰在线看| 日韩9区| 九九玖玖精品| 91被操| 神马久久久久久久久久久久| 久久久久97| 日日夜夜干| 啊啊啊啊网站| 久久亚洲不卡| 欧美综合自拍亚洲综合图| 日韩乱伦AⅤ| 99精品伊人| 色色福利| 亚洲男人天堂视频| 日韩性爱免费视频在线网站| 色大香蕉97N| 欧美人妻久久精品二区三区| 一二三卡欧美日韩人妻免费精品| 日韩Va亚洲va欧美Ⅴa久久| 操淫穴亚洲五月丁香 | 欧美激情欧美精品| 3d成人精品一区二区| 久久久9 9 9精品| 欧美亚洲日韩人妻在线观看| 日本三级A片网站com| 韩国嫰模上门援交视频| 久久久精品日本一道| 成人AV超碰免费在线| 老熟妇一区二区三区| 伊人成人中文字幕久久网| 欧美日本成人一区二区| 999 久久久| 99久久e免费热视| 校园春色 亚洲| 男人的天堂一区三区| 在线综合网| 欧美色图人妻| 防屏蔽在线视频| 中文字幕五月婷婷免费| 三及片网站| 中文字幕日韩人妻视频一区二区三区交换夫妻| A V视频日本| 欧美性少妇| 久久綜合很很很| 亚洲精品视频二区| 日本丝袜人妻内射| 日日夜夜摸| 国产97综合| 极品内射| 91久久久久久| 最新的亚洲无吗| 丁香色狠狠色综合久久小说| 天天搞欧美| 欧美美女在线高潮999| 99爱爱| 操逼天美3区| 骚女天天综合网| 啊啊啊啊操死我了| 蜜桃久久综合视频| 熟女人妇一区二区三区| 色哟哟综合| 欧亚日韩中文在线| 麻豆色约约| 啊啊啊啊啊啊啊啊啊在线观看| 素人美腿视频网站| 婷婷丁香久久| japan日本高清乱xxxx| 欧美片第一页| 亚洲天堂男人的天堂| 公司1区2区3区精产精| 国产AV人人 夜夜人人澡| 老鸭窝亚洲毛片| 五月婷婷六月丁香| 五月婷婷综合网| 国产热av| 欧色性第一页| 色盈盈影院| 亚洲天堂色图| 亚洲激情网一二三四区| 亚洲黄色影视| 99久久综合网| 成人av动漫在线观看| 国产精品自拍xxxx| 青娱乐亚洲自拍| ,成人免费啪啪视频| 国产91影院| 3PAV乱伦视频| 色综合av综合久久| 精品人妻一区二区三区在| 欧美综合色,www| 91痴汉| 国产农村妇女毛片精品久久| 久久国产精品视频| 欧美午夜熟妇黑人精品91| 台湾佬中文娱乐网久久久久久久久久com | 国产午夜视频| 亚洲AV无码久久精品蜜桃小说| 中文字日本乱码| 91伊人大香蕉| 亚洲91网站| 91夜夜蜜桃臀1区2区3区| 在线观看一卡二卡| 亚洲中文制服诱惑| 天天综合影院91| 91亚州欧美| 中文久久96| 超碰无码五月97| 亚洲在线综合| 78超碰| 美女天天干| 99国产在线 精品 视频| 日韩探花精品在线视频| 色婷亚洲五月在线观看| 九九毛片这里只有精品| 啊啊啊啊在线观看网址| 超碰一区二区| 好涩综合| 99re欧美| 俺去啦俺来也久久综合| 国产精品一级特黄aaa大片在线观看| 国产女人与拘做受视频免费| 日本女人操逼| 精品无人区麻豆乱码久久久| 欧美色图人妻| 大粗鳼巴久久久久| 26uuu成人影片| 嫩草影院在线观看精品| 五月婷婷六月丁香| 久久一二三四不卡 | 男人天堂2019亚洲| 大香蕉一人在线| 后入人妻无码| 久热精品在线国产| 久99视频| 欧美72网页| 啊啊啊啊无码| 黄片国产精品一区二区| 欧美性生活综合| 高清不卡国产| 9久9久| 无码区蜜乳| 操91| 天天综合网~91入口| 久久久久久久97| 日本激情免费大片| 99热亚洲天堂| 天天综合网亚洲综合网| 午夜福利1区2区3区| 久久久精品视频免费观看| 97啪啪| 欧美日韩理论一区| 91美女片在线| 久久久久久久国产视频| 熟女啪啪视频| 91天美免费| 在线视频免费播放一区| av操操不卡| 嗯嗯啊啊啊好爽| 日本Xx性爱| 啊啊好多水| 青草综合| 欧美色五月| 日韩无码服务区| 在线观看无码三级少妇| 91九久| 99久久99九九99九九九| 国产网站在线播放| 国产一区二区久久| 色哟哟AⅤ| 丁香五月激情综合| 麻豆传媒一区二区在线观看| A级片日韩欧美国产欧美视频精选观看| 人妻嗯啊啊在线播放| 91痴汉| 粉嫩av在线一区二区| 日本中文字幕一区| 国产在线激情视频| 蜜桃在线观看一区二区三区| 91欧美亚洲| 五月婷婷激情网| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 欧美日韩国产色图在线| 久久精品国产精品| 国产一区二区精品久久99| 刺激精品视频| 亚洲欧洲综合av在线| 97超碰逼| 日韩av不卡在线看| 色在线69堂| 中文字幕日韩专区精品系列| 青青操在线亚洲视频观看欧美在线| 中国一级αV| 91色爽欧美| 手机看片日韩人妻| 色网在线| 老司机老司机午夜影院| 欧美体内射精| 欧美黄色片AAAAA| 午夜在线播放| 91N五十路| 人妻丰满熟妇一区二区三| 加勒比综合九九99视频在线播放| 色欲三区| 久草精品一区| 日韩午夜啪啪视频| 九九九九精| 韩日精品四区| 成人情色综合网| 黄片www.| 日本不卡一区二区| 国产精品色哟哟| 国产又大又硬又长又粗| 欧美日韩制服| 超碰 97国产熟女| 性爱视频啪啪啪啪| 伊人9| 9久超碰| 亚洲激情在线观看一区| 东北操逼| 免费看美国人人爽,人人操| 91色人妻| 亚洲在线综合| 日韩中文字幕熟妇人妻| 国产熟女乱论| 蜜臀久久99精品久久久久久-DVD| 亚洲综合另类欧美久久久| 欧美精品日韩久久久九| 精品人妻久久久久一区二区三区| 1204av韩国| 99久久99九九99九九九| 黄色av网站在线播放| 亚洲春色欧美| 亚洲精品1区| 五月天激情网图片| 国产三级多多影院2022国产AA一级毛片无码 | 亚洲无码色| 性暴力欧美猛交在线直播| 日日骚av| 色 亚洲 91| 色色色综合网| 无码操逼网| 欧美91在线| 国产人妻精品一区二区三区秋霞| 日韩在线视频1234| 思思视频免费看网站| 色天天野狼综合社区| 鸥美精品一区二区久久婷婷| 九九99精品视频在线观看| gogogo免费高清看中国国语 | 国产免费久久久久| 国产家庭乱伦性爱视频| 伊香蕉综合久久久久久久噜噜噜| 使劲用力艹少妇视频一区二区| 久久精品人体| 90后性网国产欧美| 高清无码在线播放网站| 欧美精品三级黄片| 欧美日韩亚洲少妇寂寞影院正在播放 | 日影院久久婷婷夜夜网| 97 亚洲 日韩 欧美 在线| 婷婷五月天成人网| 91人妻尻屄视频| 爽极品影院| 欧美激情1区| 黄色一区三区| 97伪v| 好好的日:com久久九九| 91啪9色| 欧美黑人性猛交91| 大香交伊人网| 大香蕉五月天| 久久精品色欧美aⅴ一区二区| 影视综合无码少妇| 国产第12页| 狠狠91| aa片毛片| 久久精品| 欧美日韩在线视频网站| 97视频在线| 久伊人网78| 久久9精品网站| 欧洲精品区| 亚洲超碰综合网| 亚拍在线| 亚洲天堂久| 日韩国产九九精品一区二区三区毛片| 欧美一区二区成人一卡| 久久內射| 天天看高清麻豆| 久久久久久久久久久久九| 99热导航| 五毛骚逼极品美女怕怕| 99re6国产精品99re| 国产人妻精品一区二区三区秋霞| 精品久久久不卡一区二区| 强奸少妇AV导航网| 懂色AV一区二区三区| 99re这里只有精品中心播放| 97人肏| 色五月69夫妻| a片亚洲一本通视频| 国产乱子伦一区二区三区免看| 精品成人女人久久| 丝袜狠狠草尤物 91| 亚洲 中文 欧美 日韩 在线| 色网亚洲人| 久9无限国产| 极品销魂美女一区二区 | 天天摸夜夜摸| 夜夜 中文视频rt| 啊啊啊啊啊舒服| 性欧美91| 国产91av在线播放| 成人性爱美曰韩| 一起草av| 和协无码影院| 天天情欲宗合网| 91精品人妻一区二区三区蜜桃| 极品色| 亚欧视频在线| 天天爽天天干| 怡红院视频在线| 东京成人一区| 啊啊啊轻点在线观看| 1区2区3区视频| 91精品女厕偷拍视频| 色综合久久久久| 亚洲人在线| 综合天天。| 91天天综合| 最新中文字幕在线亚洲| 天无日色综合| 国产第二页| 国产少妇内射| 国产黄色影片在线观看| 久久久工口| 2020天天色综合| 天天射天天| 最新一二三区视频| 天天摸天天操视频| 大象AV在线| 综合熟女| 久操电影网| 777超碰| 五月婷婷六月丁香网址| 最新日韩黄片| 狠狠操狠狠插| 丁香六月婷婷| 精品久久久亚洲AV成人网站| 日本一二三高清| 欧美骚少妇| 欧美专区在线| 午夜影美女日鸡鸡天天视频国产| 精彩国产视频播放1区2区| 精品人妻伦一二三区久久| 九九色综合| 欧美有码激情视频一区二区三区| 一区二区三区精品视频| 天天综合香 ld视频| 大学生美女口爆| 午夜超爽| 日韩欧美经典在线观看| 欧洲与亚洲欧美精品中文字幕| 97久久国产精品女不卡| 国模精品娜娜一二三区| 日韩中文字幕2020| 亚洲中字幕日本一区二区三区| 国产亚洲精品自在线亚洲情侣| 亚洲男人天堂2016| 午夜美女福利视频| 人妻少妇色综合| 色偷偷综合91久久噜噜| 欧美日韩国产黄色片| 91色黑人少妇| 亚洲天天综合| 日韩精品中文字幕二区| 九九热只有精品| 久久精品国产免费观看99| 青青草玖玖爱| 免费一级a毛片久久久久久鸭绿欲| 一二三啪啪专区| 99re9| 亚洲熟妇极品| 亚洲97在线| 麻豆国产免费影片| 人妻熟女一区二区在线视频| 亚洲精品日韩国产欧美| 97国产综合欧美| 亚洲最大网站av| 亚洲大色鬼| 日本三级R| 大茄子熟女AV导航| 欧美99| 久久97超碰| 长长久久88视频| 欧洲一区二区| 99热91| 亚洲欧美黄| 国产性感骚丝袜在线| 国产精品久久久吖| 97露脸精品丝袜| 免费一级特黄特色大片在线观看看| 超碰午夜在线| av网站在线观看了| 男女性扦B| 91热爆在线| 草草草草视频| 熟女在线视频| 日韩熟女乱伦中出| 欧美极品少妇| 欧美久久人人网| 国产蜜臀精品一区二区尤物| 激情综合五月婷婷| 白丝av| 国产熟妇一区二区| 成人性爱高清视频免费看| 97在线免费公开视频| 激情综合五月天| 久久国产AⅤ| 欧美一品道| 丁香五月AV| 高清无码久操视频| 亚州高清av| 五月丁香六月| 成年人黄色视频免费| 久久视频少妇美女| 99热超碰| 91欧美网| 色天欧美| 亚洲麻豆精品二区三区| 伊人五月天婷婷| 欧美78| 99热66| 91伊人久| 久久久久女教师免费一区 | 欧美丰满熟妇XXXX性ppX人交| 伊人在线大香蕉视频久久| 日韩一区二区精品视频| 欧美自拍偷拍综合图片| 亚洲精品国产拍免费91在线| 国产精品对白内射| 伊人久操| 97免费在线视频| 日韩av情韩国爱禁区av一区二区 | 又大又长又爽| www成人啪啪18秘 免费| 日韩欧美大片免费高清啪啪| 亚洲男人天堂视频| 艾草av| 久久久中文| 亚洲天堂人妻熟妇视频| 97干色| 超碰69| 亚洲涩涩| 红桃视频高潮| 九月丁香婷婷| av在线一区二区三区| 99国产精品| 亚春色色| 久久久久精| 欧美久久九九| 色香色欲天天综合网天天来吧 | 炮色五月| 五月天色色网站| 亚洲91在线播放影院| 91久久久亚洲| 日韩射图| 人妻美腿丝袜制服诱惑综合天堂-| 婷婷五月天成人网| 成人八戒网站| 成人日韩3| 人人操 欧美| 黑人综合网| 熟女露脸激情自拍视频| 天堂资源站| 青青草黑寡妇男人天堂| 91N欧美| 五月天激情网站| 亚洲九区| 午夜福利成人免费视频| 欧美亚洲素人制服精品| 天天看天天日天天操| 农村妇女精品一二区| 极品少妇久久久久| 精久久久| 伊人午夜福利视频| 九区国产| AV色五月天| 少妇99| 五月天欧美色图| 天天干1区2区在线|