日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
日本人人操人人操| 成年男人的天堂| 久久9免费视频| 欧美中日韩XXXX| 亚洲国产精品久久久久久久久久| 自拍啪啪视频| 69综合网| 极品尤物自安慰| 在线观看啊啊啊啊啊| 另类图片五月天| 91A欧美电影网站| 中文字幕丝袜人妻| 国产成人自拍视频在线| 欧美精品三级黄片| 亚洲图片欧美偷拍| 九九这里只有精品| 天天综合日韩网| 欧美性爱系列| 国产人伦a片信息免费片| 精品免费囯产一区二区三区| k频道色撸撸| 东北黄色电影| 丁香五月婷婷基地| 1769精品一区二区三区| 91快色色色色色| 日本成人免费一区二区三区| 五十路熟女人妻一区二区在线观看 | 亚洲91亚洲| 美女黄频a美女大全免费皮| 黄色视频特级毛片| 看一级特黄a大一片| 日本一区二区三区午夜观看| 国产精品内射婷婷一级二| 91无码人妻| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 久操91视频| 国产成人五月天丁香花| 国产精品白丝| 日韩熟女操逼| 久久婷婷综合国际产色怕| 国产熟女乱论| 色五月丁香五月| 天天看,天天做| 一区二区三区在线资源| 黄网站黄视频网站进入口| 欧美韩国你懂得在线| 亚洲最大无码中文字幕网站| 九九精品美女高溯喷水| 深夜视频| 日韩无码一区二区三区| 伦理第一页| 精品少妇一区二区三区免费观看| 女同性恋一区二区三区精品视频| 久久少妇视频| julia国产在线 | 黄色视频特级毛片| 97精品国产97久久久| 一区二区 日韩 欧美 国产 传媒| 日韩中文字幕宗合在线| 九九九九9999| 成人三级片无码| 高潮内射在线| 亚洲狠| 久久首页| 中文字幕在线观看网页| 丝袜加勒比| 欧美一级特黄淫片在线观看| 美女淫穴| 大香蕉欧美| 天天色香欲综合网| 蜜臀久久99精品久久久久电影| 久久精品国产亚洲妲己影视| 中文字幕在线观看AV| 久久久91福利姬| 看免费一级在线播放毛片| 天天插天天操| 青青伊人加勒比海| 91午夜无码| 青青草亚洲一区 | 九九九九AV| 人妻精品一区二区在线| 久妇网| 啊啊啊在线观看免费视频| 久操操| 东京热AV男人的天堂| 亚欧国产无码精品在线| 国产丁香精品露脸视频| 在线观看日韩av不卡| 久久久久国产精品人妻aⅴ天堂| 亚洲精品成人动漫在线| 日产狠狠干| 亚洲欧美在线丝袜| 精品.99999| 久久精品国产Aⅴ| 国产精品乱人伊人网| 中文字幕欧美丝袜07资源| 玖玖人人爱| 日韩精品资源专区二区| 成人久久久精品| 九九99精品| 国产精品白丝www| 亚州精品一区二区三区香中文字幕在线| 久久久青青草| 黑丝日韩av丝袜av| 我要看免费韩日黄片| 亚洲成a人v欧美综合天堂下载| 综合激情97 | 任你艹| 亚洲一区二区三区在线激情| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 久久久久久久久久久999| 乱伦熟女专区| 婷婷国产精品一区二区| 在线天堂999| 成人亚欧免费视频| 激情欧美97| 草蕉影视亚洲无码| 九久久九精品视频| 狠狠激情综合狠狠操中文字幕| 乱伦熟妇一区二区| 久久精9| 美女主播色欲91抠b在线播放| 亚洲性爱高潮影院| 亚洲熟妇无码一区二区三区| 97最新在线播放视频| 91久久久久久久久18| 色人久久| 大香蕉综合| 欧美玖玖爱免费玖玖| 亚拍在线| 啊啊啊啊啊在线| 亚洲日韩人妻中文字幕一区| 无码丰满熟妇一区二区浪潮AV| 国产家庭乱伦性爱视频| 日韩乱伦视频| 天天日日舔舔| 美女天天干| 精品少妇一区二区| 亚洲91色| 国产最新小视频在线播放下载| 顶级丝袜熟女一区二区三区 | 欧美日韩亚洲国产中文永久天天看| 天天日B夜夜干B时时操B| 99激情视频| 国内一区二区三区| 日本在线伊人啪啪| 神马久久久久久伦理片| av在线资源| 欧天美中出| 久久中出| 东京热免费视频| 亚洲视频一二区| 麻豆视频一区二区| 蜜臀AV网站| 熟妇高潮一区二| 99999国产精品| 国产AV超爽| 欧美 熟女 日韩| 女生久久网| 女人被添高潮免费视频| 欧美人妻色| 亚洲老熟妇xxx| 美女黑人91神马| 日本黄大片在线观看视频| 97人人干| 五月天综合网| 精品午夜福利导航| 欧美三级不卡| 97超碰精品| 激情露脸爱| 日本一区二区中文字幕久久| 日韩人体偷拍| 无码不卡亚洲成?人片| www.激情| 黄色视频高清无码网站| 欧美另类色| 色图四区| 一二三四视频中文字幕在线看| 国产日本一区二区三区蜜臀在线观看| 一起草欧美| 国产激情av女片自拍| 淫妻综合网| 久久久无码av精| 亚洲国产激情国产av| 欧美综合自拍亚洲综合图| 免费观看的av| 久9九综合在线| 婷婷伊人綜合中文字幕| 中文字幕视频二区| 日本在线播放不卡一区| 78精品| 免费A片三p视频| 97超碰日韩| 爱爱久久| 欧美日韩免费专区在线| 四虎国产精品永久地址入口| 欧美色图成人网一区二区 | 九七超碰| 97超色| 久久这里| 俺也射| 欧美性色欧美| 9997se| 人妻一区二区三区| 欧美黄色图片| 欧美久久草熟女| 国产精品久久久蜜臀| 青娱乐老司机视频| 啊啊啊啊网站| 91综合在线| 黄网在线播放| 久久精品72| 东京热精品97综合网| 国产伦乱91| 91网亚洲| 欧美丝袜激情| 色97欧美| 国产黑白丝在线| 天天综合~91| 91成人社区| 久久一区二区三区入口| 精品国产Av无码久久久亚洲| 精品无码一区二区人妻久久蜜桃| 大香蕉92| 欧美成人午夜免费福利785| 日逼五月天| 久操大香蕉手机视频在线看| 亚洲黄网在哪免费看| 日日操丁香五月天| 欧美久久婷| 精彩久久中文| 久久久草草精品| 大香蕉伊人色偷偷在线| 炮色五月| 人人透人人操| 日本超碰在线国产一区| 色原狠狠天天天| 国语精品内射在线观看| AV网站高清无码在线观看| 91精品国产一区三一| 大黄片做爱的大的| 亚洲男人天堂网久久| 思思久热在线精品66| 操操操日本的逼| 99热线麻豆| 人妻天天爽夜夜爽精品2| 天天做天天爱| 婷婷丁香五月天综合东京热| 永久免费av无码网站国产app| 亚春色色| 久操大香蕉手机视频在线看| 亚洲综合色在线| 日韩精品电影| 欧美熟女逼久久久久久| 骚鸭AV| 久久久久密臀视频| 性欧美精| 国产精品午夜成人福利| 久久25| AV天堂男人的天堂| 欧美激情片一区二区| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 亚洲91网。| 人妻啊啊人妻啊| 日本有码久久| 青青草日本中文字幕| 91挑色欧美| 国产精品毛片| 易易A毛视频| 啊啊啊操死我| 在线天堂资源亚洲| 香伊人在线| 久久精品 六十路 熟女 欧美| 欧美一区二区日韩三区| 大香蕉免费乱伦视频| 一块操欧美| 97WW精品| 熟女乱伦二区| 天天综合香 ld视频| 久久久78| 国产精品自产拍在线观看社区| 国产成人bd在线观看| 日韩三级一区| 日日碰视频网| 狠狠色噜噜狠狠狠狠狠色综合久久 | 日本精品国产视频| 亚洲 无码 有码 中文字幕| 碰碰97| 丰满的三级少妇欧美久久久| 日本五十路在线| 久久五月天婷婷丁香中文字幕| 成人羞羞视频国产| 伊人96在线| 日韩欧美大力操| 熟妇高潮精品一区二区三区下载| 最新无码国产| 强奸熟女一区二区三区| 午夜精品久久久久久久99蜜桃一| 亚洲天天自拍| 天美国产精品| 欧美日韩性爱无码| 婷婷久久久精品| 亚洲色图大香| 啪啪视频亚洲第一| 久久一留热品黄| 思思久热在线精品66| 青青草日本中文字幕 | 97网址97| 大香蕉免费乱伦视频| 台湾佬大香蕉| 伊人久久大香线综合无码| 亚洲黄色网址视频| 亚洲天堂男人| 精品女同一区| AV丝袜少妇| 日本岛国黄色网址| 91青青草| 免看60秒涩涩视频| 亚州精品丝袜-不卡成人免费| 亚洲影院无码在线| 天天操妹子| 亚洲有码第一页| 亚洲综合色男人网| 亚欧性爱在线无码| 国产极品99热在线播放69| 熟女人妻精品一区二区视频 | 欧美激情精品| 中文在线视频| 色网1| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 伊人四虎综合| 天天日骚逼熟女| 久久人| 亚洲一卡二卡在线免费| 伊人大香蕉在线| 天天视频综合在线观看视频| 亚洲二区精品在线观看 | 久久精品国产亚洲粉嫩| 熟女网站最新| 久久风骚城市人| 欧美福利视频啊啊啊啊| 超碰 国产熟女精品一区| Julia Annxxxxx| 999狠狠综合| 2026国产精品视频| 熟女六十路| 日韩在线76| 亚洲Av无码成人精品国产| 北野未奈加勒比av| 伊人欧美大香蕉视频| 亚洲电影中字一区二区| 91精品免费| 激情五月综合| AⅤ片水多多| 91肉丝| 人妻激情视频| 天天综合网~91综合网| 亚洲欧美日韩精品久久久一区二区| 久久精品一区| 人妻干天天| 999久久久免费精品国产牛牛| 国产传媒美日韩av| 91 在线亚洲| 伊人五月天| 久操婷婷| 91人人看| 久久本道| 伊人大香蕉在线| 麻豆这里只有精品| 亚洲欧美内射| 国产伊人精品在线| 天天干电影| 久久精品国产亚洲粉嫩| 亚洲有码视频二区| 国产强奸乱伦无码视频| 粉嫩av在线| 日本欧美一区二区三区视频麻豆| 国产精品呦一区二区三区| 在线欧美69V免费观看视频| 可能人人看人人摸| 欧美日韩性爱电影在线| 日本人人操人人操| 亚洲色吧网| 97久久精品国产| 伊人久久亚洲色欲综合网站 | 在线观看成人性爱免费小视频| 久久伊人亚洲AV无码网站| 永久免费观看的毛片的网站| 在线αⅴ| 国产毛片在线| 啊啊啊啊一区| 亚洲天堂情色| 亚洲色色色| 77国产精品| 欧美性爱一区二区三区| 美国日韩黄片| 国产精品久久久久综合| 啪啪视频mP4| 日本性一区| 亚洲色91| 青草视频在线看看看看看看看看看| 欧色综合| 亚洲中文字幕在现观看| 日本精品高清一二区一本到| 欧美天堂日韩三级国产传媒| 春色综合免费| 成人羞羞视频国产| 婷婷五月天在线观看| 欧美白嫩女HD| 在线视频97| HEYZO高无码国产精品227| 亚洲国产精品久久久久婷婷青年| 91九色丰满高潮| 国产激情视频一区区三区| 日韩黄色av中文字幕| 男人亚洲91首页在线| 人人操人人肉久久精品| wwwss在线观看| 亚洲精品电影| 看日韩操逼| 精品九九九九九九九九九| 欧色网址| www久久国产精品| 秋霞蝌科网日本一区| 俺去啦自拍| 亚洲欧美国产其他二区| 久久精品操| 做爱A级亚欧| 欧美 亚洲 另类 综合| 无码区蜜乳| 久久久久七视频| 亚洲天天更新| 久jiu久神马影院| 久久加勒比| 亚洲情色第一页| 精品欧美乱码久| 欧美成人9797| www.伪伪| 人妻少妇久久| 国产精品一二三免费网站| 91综合在线| JULIA人妻风俗店中出电影| 久久人妻| 东京热激情视频一二三区| 欧美自拍网| 亚洲免费精品一区| 巨爆乳一区二区爆乳区| 中文字幕av片| 久久久久久久久久黄色网| 久久av一级av少妇av高潮| 国产精品动态一区二区三区四四| 激情自拍 校园春色| 搡老熟女免费视频| 大香蕉2017| 婷婷色网| 丁香五月性| 久久的免费性爱视频| 日本999精品| 婷婷色色网| 香蕉人人操tv| 操逼网站地址| 黄色免费网页无码| 乱操乱伦AV| 激情在线青青操| 麻豆a'v电影| 亚洲精品无码久久AV| 超碰色大香蕉| 久久久内射良家| 狠色婷婷久久一区二区三区_| 色综合99| 极品色社| 日本超碰在线国产一区| 成人三级片无码| 欧美偷拍区| 国产无码精品久久久久久| 亚洲和欧美裸体美女双飞视频| 精品国产肉丝袜在线拍国语| 可能人人看人人摸| 特级毛片特黄久久免费看 | 亚洲 欧美 第一页 | 色婷婷久久综合超碰| 性感女人网页在线观看视频| 久操B网| 亚洲 91 在线| 中美日韩毛片| 久久色情| 91亚洲精品青草| 中文字幕 码 自拍 视频 区| 久久艹逼视频| 欧美黑人精品在线播放| 日本成人A片网站| 久久亚洲欧美中文字幕国语| 国产精品白丝在线播放| 男女激烈网站最新| 深夜国产一区二区三区在线看| 岛国在线一区二区三区| 色色五月婷| 天天肏夜夜肏| 天天懆天天日| 野狼激情网| 女人18精品一区二区三区| 91性感在线| 国产精品点击进入在线影院高清| 日婷婷| 麻豆精品久久久久久久| 九九成人精品| 网友自拍第1页| 久久性爱视频99| 国产成人精品无码久久| 五月天社区| 精品女人999| 91五月天| 麻豆国产精品午夜视频| 色色色99| 美女网站黄页| 玖玖爱视频网站| 国产日韩区| 精品一区二区三区蜜桃臀赵总 | 97超碰久久色| 91五十路| 91亚·色| 免费a级毛片av无码久久精品中文字幕| 啊啊啊啊啊啊啊国| 中英熟女操女| 丁香九月激情啪| 青青操在线视频| 美女露胸露屁股| 欧美性爱日韩高清| 亚洲人综合| 久久国产乱子伦精品免费女人| 国产地址二三| 大屁股xxxxx| 91天天| 亚洲成人av色网| 2019精品国产无码成人| 天综合网欧美| 99热免费| 无码精品久久| 熟人人妻少妇精品久久| 一牛影视久久久一区二区三区| 中文字幕第9页萱萱影音先锋| av东京热男人的天堂| 99久久99九九99九九九| 国产成久久综合片| 国产97/欧美| 91网亚洲| 99久久9| 韩国三级色呦呦| 91日韩网站| 天天插网| 99成人| av一区二区三区四区| 好看的91视频| 国产91乱伦| 天天舔日美女视频| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 九九综合久久| 女生看匆91网站| 日欧美色| 大香蕉伊人久久| 久久双插| 撸撸成人在线视频| 精品久久久久9999| 婷婷色网| 日本综合色图| 婷婷亚洲五月***久久| 日本黄大片在线观看视频| 97超碰色情| 黑人精品欧美一区二区蜜桃| 青青草玖玖爱| 久久6热精品99视频| 亚洲天堂自拍| 欧美中文字幕一区 | 欧美亚洲今日在线| 9九九国产| 蜜臀久久99精品久久久久久成人小说 | 91狠狠| 九九九免费视频| 色妺妺AⅤ| 久久久性| 久久精品久久久久久久| 狠狠入| 乱码人妻一区二区三区| 久污| 天天干1区2区在线| 啪啪啪男女亚洲中文字幕99| 中文字幕1区2区| 欧美精品三区| 看看小穴| 97久久久久久久久久| 怡红院成人视频| 中文字幕一区av| 精品九九| 亚洲视频小说| 夜夜操青青草| 日本欧美国内在线| 亚洲女人91| 亚洲精品97久久中文字幕| 97精品视频在线播放| 肉丝中文无码高清| 欧美91精品国产自产| 国产黄色剧情影片麻豆免费播放| 一二三区精品视频| 国产成人91一区二区三区| 干干干天天| www.狠狠操| av片在线观看免费播放| 东北黄色电影| 日本三级小说中文字幕| 十八禁一区二区无码观看| 久久久久久久97| 在线观看高清AV| 丁香六月婷婷综合| 亚洲极品| 亚洲日本激情| 亚州成人a∨| 国产久久久久久| 97精品免费视频网站| 百度百度日本操逼| 亚洲午夜福利在线影院| 天天天天干| 天天久久久久久| 视频国产精品未满十八禁止在线观看| 日本 成 人 小说 电影 一区二区| 精品乱码在线观看| 国产精品免费日韩| 97视频620| 一个国产在线综合网站| 麻豆60秒| 九七超碰| 日本超碰在线国产一区| 人妻丝袜日本| 男人a天堂手机在线版| 欧美91网站| 夜夜天天噜狠狠爱2021| caopeng97人妻| 91午夜无码| 欧亚日韩三区| 日日操丁香五月天| 欧洲一区二区三区四区在线观看| 日韩av在线播放不卡| 日夜尻逼网| av大香蕉| 国产粉嫩蜜臀av一区二区三区| 不卡在线一区,精品一区二区三区中| 欧美日韩在线小说 | 国产高清精品福利| 日韩无码服务区| 91在线欧色| 熟女精品日韩一区二区三区| 天天干一区二区| 精品九九九九九九| 安徽熟妇视频| 丁香五月天啪啪| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 床上啊啊啊一区二区三区| 蜜臀99久| 欧美页片| 99热免费| 人人摸人人添人人操| 中日韩久久久免费看| 成人免费不卡在线视频| 国产色呦呦| 啊啊啊 在线观看| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 狠狠亚洲| http://qxhbdz.com| 3028国产精品| 69少妇一区二区| 黄色成人网久久久久久| 国产精品人妻一区二区| 亚洲 欧美 综合 91| 色色婷婷五月天| 鲁鲁色综合网| 人妻喷水| 国产av强奸美女| 精品少妇一区二区三区在线视频| 网页导航五月天免费一二三区| 五月激情啪啪| 久9久精品视频| 淫荡少妇免费| 欧美一区二区三区互相| 久久香蕉国产线看观看亚洲女人 | 伊人9| 亚洲第一页综合在线| 国产版a级片直播在线| 国产精品久久泡妞网站| 91丨熟女丨丰满熟女| 亚洲黄色| 亚洲AV无码秘 蜜桃臀国精产品| 日韩欧亚中文在线| 思思热在线观看| 国产91美女视频| 秋霞免费无码视频日韩A片| 男人的天堂激情| 欧美亚洲中文| 天天插天天射| 1000部熟女视频在线观看| 精品亚州18| 色综合天天| 17c在线成人免费A片观看| 精品久热| 日本三级一区二区 在线| 免费人人搞97| 在线综合色| 青草地一本线一区二区三区| 日韩av在线精品观看| 在线v中文字幕一区二区三区| 逼操网站| 久久99999| 亚洲欧美第一页| 99激情| 亚洲久久天堂| 中文字幕一二区二三区人妻专区| 五月天色图| 99色在线| 伊人久操| 久湿久久 | 久久夜色一区二区| rivers-china.com| 99久草| 精品人人插人人操| 一二三卡欧美日韩人妻免费精品| 日韩亚洲中文字幕在线| 91爱欧美| 日韩国产成人自拍视频| 亚洲黄色网址| 一类无码操逼视频| 欧美熟女丝袜| 亚洲二区精品在线观看| 天天在线91| 国产97视频| 日韩紧密久久| 丁香六月婷婷久久综合| 一区二区久久天天干狠狠| 九九无码| 久久九精品| 久久美女国产| 久久国产乱子伦精品免费女,网站| 久久97视频| AⅤ片水多多| 91插B网站| 丁香五月激情五月| 极品综合| 久久精品无码熟妇一区二区三区视频导航| 牛黄色久午久| 国产高清自拍视频| 亚州色图欧美| 爽 好舒服 无码刺激久久| 蜜屁av| 国产强奸超碰AV| 91爱网| 天海翼久久| 欧美精品999| 亚洲另类欧美精品| av草草在线电影| 亚洲s在线观看| 亚洲中文字幕三级在线| 精品日韩人妻精品一二三区| 亚洲欧美伦综合| 亚洲日韩东京热一区| 亚洲无套久久嗯嗯| 在线看免费无码AV天堂的| 91w欧美| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 久久久久久久久国产| 久热99| 国产综合网站在线播放 | AV一起草在线| 91春色| 国产精品视频播放| 久久久艹艹艹| 婷婷亚洲中文字幕在线| 激情九月婷婷| 国产偷拍自拍在线视频| 国产精品女生av| 影音先锋每日最新资源在线观看| 欧美熟妇精品黑人巨大91| 97视频在| 97精品国产精品免费观看| 午夜久久一区二区无码中出| 免费看美国人人爽,人人操| 97人人超| 亚洲一区二区三区欧美日韩| 九九九精品美女| 91bbbbbb| 九九九久久久| 欧美的性爱网站免费| 欧美日韩香蕉| 日韩黄色成人性爱| 五月色综合| www.91色综合| 粉嫩国产精品久久粉嫩| 91爆操视频| 麻豆国产免费影片| 强奸国产在线| 一个人免费HD91视频| 岛国精品视频在线观看| 97电影院超碰| 日韩一级二级在线| 亚洲AO在线| 60秒免费小视频| 九九这里只有精品| 九九九九精品| 夜夜欢天天干| 伊人五月天婷婷| 国内毛片无码一级毛片| 两性色网| 欧美天天插| 日韩八十路老熟女| 精品人妻少妇| 天堂俺去俺来也www久久婷婷| 久久五月视频| 超碰99热中文字幕| 青草园大香蕉| yaouchengrenav| 日韩精品人妻| 男人女人18禁片免费看网站| 男人高清无码一区二区| 男人的天堂2010| 操淫穴亚洲五月丁香 | 欧美色网| 强奸乱伦日韩AV| 欧美曰韩国产精品| 熟妇综合一区二区三区| 亚洲制服欧美另类内射| 久草热制服丝袜在线观看| 狠狠超| 996热| 人人爱夜夜爱| 青青草大香蕉视频| 99re久久| 国产91专区| 日本二三四区| 精品人妻av在线播放| 欧美少妇大量自拍视频在线观看| 中文字幕熟女人妻丝袜丝| 四虎影视永久在线免费| 九九热在线精品视频| 日韩性爱小视频| 亚洲情色五月天| 成人一二| 一本正道久久熟女| 欧美性夜| 97网址www| V A在线| 99国产精品在线观看| 69精品| 欧美综合97www| 日韩成人高清一区二区| 性生活久久久久久久久久| 日本1区2区不卡视频| 日韩99神马视频片| 日韩 欧美 视频 在线 一区| 超碰欧美在线欧美| 五月天啪啪| 国产精品日韩在线一区| 农村妇女精品一区二区| 午夜天堂啪啪| 97综合| 欧美精品久久| 日韩一级欧美一级在线观看| 激情另类激情| 日韩草久视频| 91欧美经典| 麻豆区99999| 蜜臀AV秘一区翔田千里| 欧美91久久久久| 色九九九| 亚洲精品亚洲人成人网| 凹凸视频在线一区二区| 亚洲自拍欧美国产首页网曝 | 歐美一級亂黃99在綫精品| 国产精品原创巨作?v网站| 97超碰免费生活| 骚乳在线| 国产成人网站在线观看| 免费黄色片。| 色综合91好| 情色av电影| 婷婷香蕉| 尤物网站91| 亚洲欧美啪啪| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 国产精品自拍欧美在线| 日韩免费簧片| 夜夜春夜夜操| 在线小视频| 97超碰免费人人性爱| 操比国产| 国产日韩中文字幕欧美| 无码91| 久欲AV| 激情天天视频| 精品少妇人妻av久久免费| 久久久99久9| 欧美色图综合网| 国产成人精品日本视频| 免费的很黄很污的全部视频| 欧美偷拍| 亚洲少妇色| 欧美偷拍区| 亚洲熟妇综合久久久久久| 五月开心网| 精品无码久久久久久国产浪潮| 97操碰| 青青草视频爽一爽| 欧美性爱18观看| 手机在线大香蕉| 91AV天美在线视频| 一区二区三区日韩欧美| 亚洲欧美综合| 蜜桃色院一区久久| 精品福利视频| 日韩草久视频| 黄色视频60分钟| 香蕉人欧美综合| 综合网97| 亚洲综合另类欧美久久久| 美女自卫慰黄网站免费| 国产激情视频一区区三区| 999九九九九国产动| 丁香六月综合激情| 国产综合操逼高清| 91男人综合| 日本ZZ高免费A级视频| 九一综合网| 都市激情人妻一区二区青青操视频 | 97超碰美国| 九色视频91| 亚乱色| 日韩丝袜二区| 色久桃花影院在线观看| 成人性爱av| 操逼逼中文字幕| 强奸乱亚洲| 天天爽天天| 99热免费| 欧美熟妇精品黑人巨大一二三区| 人妻一区二区三区| 伊人影院在线理论播放 | 久久五月丁香| 五月天婷婷久久| 蜜桃色色网站视频三区| 影音综合网| 久久久国产精品亚洲精品| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 成人AV在线电影| 色丁香五月婷婷| 少妇二级| 亚州日韩97| 亚洲熟女av中文字幕| 亚洲无码国产探花在线观看| 影音先锋少妇| 色婷婷影视| 天天影视网综合少妇| 嗯~啊~轻一点 视频| 91成人无码| 91伊人久| 久久夜黄色无码A级大片| 婷婷五月天社区| 久操在97| 亚洲一区二区在线观看91| 欧美日韩 强奸乱伦| 九九热精品在线| 日本高清加勒比| 亚洲不卡三级手机播放| 国产色精品午夜大片| 色综合加勒比四四季| 欧美黑人168页欧美黑人167| 午夜视频久久久久一区| 大香交伊人网| 欧美丝袜激情| 国产 亚洲 一二三四| 97天天摸天天碰| 狠狠躁日日躁夜夜躁A| 无码操逼视频一下| 久久中文色图| 网友自拍第一页| 五月丁香啪| 超碰吊日色| 五月婷婷六月激情| 91精品导航| 久久九色| 夜夜高潮夜夜爽夜夜爱爱一区| 无码视频黄色网战| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 性色av网站| 久草精品一区 | 五月天婷婷社区| 福利在线观看一区二区| 九九九九免费视频| 人人天天干干| 精品丰满熟妇人妻一区| 手机看片1024你懂的国产| 自拍二页| 欧美亚洲激情| 日日夜夜青青草母狗| 精品中文字幕第一页| 欧美美女后入| 国产精品人人爽人人做可爱福利| 午夜久久久| 亚洲AV乱码专区国产噜噜亚洲 | 3P乱轮视频| 97视频在线播放| 黄站在线免费观看| 欧美色日| 欧美第一页性| 国产黄色av大片网站| 蜜臀久久99'精品久久久| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 操操逼视频| 91超碰丝袜制服| 九九热免费在线国产视频伊人五月| 男人天堂2017| 操老熟女AV| 亚州伊人色综台| 日韩精品碰碰| 日本Suv精品一区二区| 色老汉色| 91成人久久| 亚川综合视频| 日本操逼视频免费| 少好三P| 中文字幕视频一区视频二区| 26uuu国产免费观看| 视频国产欧美在线播放| 亚洲 欧美 日本 国内 首页| 天美一二三在线观看Av| 色婷婷综合视频| 精品性爱一区二区| 91东京热男人的天堂| 久久系列| 330Dv国产女人终合视频极品人与兽| 99热国产| 欧美一级A片在线看视频性色| 久久久蜜桃臀无码视频| 欧美成人国产精品| 久久精品夜色国产亚洲AV| 神马久久69| 安徽熟妇视频| 鸥美精品一区二区久久婷婷| 操逼999| 97 国产一区| 亚洲一本大道中文字幕无码在线| 久久久亚洲熟妇资源| 91 手机在线播放 绯色| 国内三级自拍小视频在线观看| 国产无马视频| 国产1727欧美| 99精品欧美一区二区三区桃色| 久久久久久大| 午夜视频好爽啊| 综合网亚| 7777奇米影视久久| 日本三级韩国三级99| 国产精品一区二区三| 久久乐| 日本天天干天天操一区| 很很操在线| 欧美色图天堂网m| A片三级无码| 91狠狠狠| 大香交伊人网| 狠操91,com| 巨爆乳一区二区爆乳区| 91美女视频在线| 手机在线A片| 亚洲久久久久| 91丝袜美女视频| 国产路线专区| 亚洲 欧美 小说| 黄呦呦在线| 搡老女人老91妇女熟女| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 欧美一区二区日韩三区| 性久久| 性爱免费视频成人| 国产69精品久久久久99尤物| 曰韩无码777| 五月婷婷丁香六月| 人妻出轨一区二区三区| 亚州再线| 亚欧操逼片在线观看| 中文久久久| 老司机深夜18禁污污网站| 欧美一区二区三区蜜桃| 国产粉嫩出水在线播放| 免费看毛片操穴| 九九九久久久久| 少妇人妻激情四射| 国产精品网址| 色综合国产在线观看| 日韩欧美综合激情| 3571色综合一区二区二区| 亚洲精品一二三四区| 91亚洲欧美综合高清在线| 熟女少妇视频| 一级二级三级黑人无码| 丰满人妻大屁一区二区| 亚洲性综合9| 91超碰碰在线| 99最新日韩偷拍视频| 国产一国产一级毛片古装| 日日操丁香五月天| 91超级碰碰碰| 97爱b| 亚州欧美在线| 高清国产成人无码| 免费观看欧美日韩操逼视频| 中美日韩毛片| 亚洲av资源| 尤物视频一区| 99视频在线| 综合欧美日韩在线| 97日亚洲欧美| 国产精品制服丝袜清纯唯美 | 黄片com.| 97国产色综合| 十八禁电影伊人网| 最近2018中文字幕在线高清第一页| 在线中文字幕极品av| 一区二区三区男女操逼黄色小电影| 91久热| 国产精品一二三区18| 婷婷久草| 欧美亚洲美少妇一区二区| 色欧美亚洲| 日本午夜精品理论片A级APP发布| 啊啊啊啊啊操我视频| 欧美亚洲手机在线| 国产精品无码av嫩草| 91在线视频免费中出| 精品免费囯产一区二区三区| 被男人添B超爽视频| 日本三级人妻a人妻一在线| 好爽要喷了| 欧美黑人精品在线播放| 欧美日韩理论一区| 久操频道免费在线呗看| 大香网站| 鲁鲁色综合网| 国语精品对白| 日本韩欧美在线播放a| 日本精品免费一区二区三区四区| 啊啊啊啊啊啊好多水| 91精品国产日韩欧美综合| 丰满翘臀美女影院视频| 熟女少妇视频| 日韩乱伦视频| 天天躁狠狠躁av| 偷拍亚洲熟女视频播放| 91色碰| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 樱花蜜乳av| 亚洲 欧美 中文 日韩超碰| 啊啊啊啊免费视频| 在线综合色| 色老久久| caoni国产亚洲av|