亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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
返回資訊列表
亚洲蜜臀精品视频久久| 成人精品在线| 婷婷久草一区二区三区| 伊人精品视频| 精品九九| 国产专区路线| 明星性猛交ⅹxxx乱大交| 欧美日本视频一区| 久久久男人的天堂| 精品亚洲国产成人AV制服丝袜| 欧美亚洲一区二区久久久婷精品大包诱| 密臀在线视频| av天堂手机版追回| 国产av色网| 2023天天操夜夜操| 大香蕉啪啪网| 三四中文字幕| 看日韩操逼| julia中文字幕在线观看| 四虎精品永久在线播放| 欧美啪啪女女| 青娱乐黄色录像| 成人国产精品三级A片| 99re在线视频| 久久久久久亚洲中文| 青久操| 亚洲在线网站| 亚州综合AⅤ| 日韩免费av片高清无码| 天美一二三在线观看Av| 欧美性xxxxx狂欢| 欧美激情精品| 乱人伦 国语对白:视频直接看| 日韩无码服务区| 大香蕉久| 吖在线不卡一区二区国产剧情| 日韩精品人妻中文字幕有码午| 日韩精品人妻一区二区| 丰满少妇一区二区三区专区| 操屄日韩| 91老熟女老女人国产老太| 蜜乳AV.COM| 人人手机欧洲亚洲国产人妻| 无码不卡八戒| 精品九九九九九九九九九| 国产成人手机视频激情| 骚妻少妇精品性色无码四色A V| 黑人精品成人一区二区三区| 麻豆天美传媒毛片| 精品无码一二三四区| 国产欧美精选自拍一区| 神马久久免费电影观看| 在线 制服丝袜中出 人妻| 99久久99久久免费精品蜜臀| 四虎884a| 亚欧国产无码精品在线| 91亚洲电影| 在线天堂999| 不卡一区二区日本视频| 国产白丝精品在线观看| 另类av天堂| 國產尤物AV尤物在線觀看| 欧美天天综合站| 亚洲AV成人无码久久精品播放| 亚洲成人在线乱码色午夜| 思思热在线观看| 日本孕妇一区二区视频操逼免费看 | 东北女人操比视频| 99久久久久| 精品欧美老熟女一二区| 毛片麻豆91糖心精品毛情片| 欧美国产日韩清纯唯美| 男女激情黄色网址| 丁香色狠狠色综合久久小说| 97资源站久久| 女一区二区| 国产操操日韩三级黄| 春色综合网| www.高清无码诱惑一区.com | 精品人妻免费观看| 国语精品av| 色五月天AV| 日本网色| 日韩性爱人人爱人人操| 啊v在线观看视频| 99热思思| 亚洲成aⅴ人片不卡无码| 大香久久| 91熟女少妇| 97超碰69| 国产精品熟女乱伦| CCYY草草影院地址入口| 另类欧美色| 嫩草伊人久久精品| 亚洲 中文 女同| 日本熟妇人妻中出视频| 99久久久er直播网址| 精品国产乱码久久久久久网站入口| 成熟熟女国产精品一区二区 | 精品人妻中文字幕高清| 淫穴高潮色图| AV丝袜少妇| 69人妻精品一区二区绯色| 最新三级网址| 亚洲无码国产探花在线观看| 97天天| 操少妞在线视频| 国产在线76页| 久热婷婷| 国产蜜臀精品一区二区尤物| m欧洲一级午老| 天美精品av| 天天看,天天做| 99久久久久久亚洲精品不卡| 国产无码成人无码| 日本性爱视频一级| 麻豆三极片| 精品制服美女中文一区二区三区| 老熟女中文字幕高清| 淫色网综合| 久都青青视频 | 色播丁香| 婷婷AV一区二区三区| 国产女人与拘做受视频免费| 欧美福利视频啊啊啊啊| 三级日韩一区二区三区| 污色区网站| 97超碰9| 午夜欧美精品久久久| 婷婷激情五月综合| 蜜桃臀一区二区三区久久| 欧美性天天影院| 青女在线| 日韩射图| 欧美第二页| 中文字幕一区二区三区人妻不卡 | 乱伦图一区| 久久久一区二区三区三州| 国产综合色精品在线观看| 国产精品久久久午夜夜伦鲁鲁| 夜草欧美| 亚洲综合草草| 人妻熟女一区二区三区视频| 综合网天天| 日日操夜夜操天天操免费观看麻豆| 久久久久九九九九九| 嫩草 我啊~嗯~在线| 在线小视频| 加勒比av官网在线| 熟妇一区,二区,三区。| 蜜臀AV一区二区三区| 天天综合站| 大香蕉手机在线| 后入式999| 久久久女人| 婷婷精品久久av影视| 午夜九九| 亚州综合色| 曰本精品久久久| 亚洲熟妇熟在线电影视频| 亚 欧 美 综合| 青青草日本中文字幕| 国产成自自拍在线观看| 91色综合色| 亚洲区小说| 欧美乱欲| 国产小黄片在线免费观看 | 亚洲国产一区二区入口| 欧美特大黄一级片片免费| 亚洲第一狼人丝袜美女另类 | 99色色网| 成人色女网| 亚洲欧美日韩国产丝袜自拍中文| 熟女熟妇一区二区三区视频| 肏逼视频日本| 久久久久亚洲AV无码专区少妇| 青娱乐国产精品| 97干在线视频| 十八禁黄色成人网站观看| 亚州欧美综合| 日韩一级二级三级免费看完整版| 久草国产在线视频| 天美传媒av 在线| 欧美性爱网97| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 夜夜高潮夜夜爽国产伦精品| 天天综合亚洲综合| 黑人精品成人一区二区三区 | 久久久婷| 精品一级| 天天视频黄网站| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 日本污ww视频网站| 天天欧美欧美亚洲网| 亚洲综合情色| 99热在线观看| 中国探花熟女| 国产传媒日本欧美专区| 色墦五月丁香| 老熟妇综合| 操久久久久| 精品高清一区二区三区三州| 偷窥自拍亚洲色图| 欧美写真视频一区| 色嗨嗨在线| 久久免费老司机精品| 欧美天堂亚洲电影院一区在线播放 | 日本免费二区三区| 蜜桃视频一区二区三区| 98久久| 99这里有精品| 欧美图片校园春色| 亚洲成人久久美女| 97超色| 日韩黄片视频试看| 色第一页| 久久精品福利影院| 国产天天看| 探花精品 一区二区| 婷婷五月天小说| 人人澡人人澡人人| 日韩欧美视频青青| 久久免费少妇| 日本免费一区二| 爱逼综合| 日本久久久久久久久| 99re超碰| 999日韩中文精品观看视频。| 一起草视频在线| av一区二区三区 中文| 校园春色宗合网| 国产Aα| 天堂亚洲精品久久老牛| 黄色一级视| 国产又大又粗又长视频| JULIA一区二区三区在线播放| 亚洲人综合| 在线看免费无码AV天堂的| 劲爆欧美人妖三区91| 黑人狂躁日本妞一区二区三区| 欧美高清性猛交| 一个色导综合| 熟妇高潮精品一区二区三区下载| 二男一女成人A片| 中文字幕伊人| 天天肏夜夜肏| 九九九九9999| 亚洲欧洲自拍图片专区满春格| 亚洲。日韩。欧美| 国产精品日韩在线一区| 日韩青久久| 91操人| 日本506070| 99自拍B亚洲| 秋霞一级A片黄色视频| 黄呦呦在线| 尤物网址| 欧美色交| 亚洲天堂自拍| 国产精品久久久三级无码| 91白虎| 97精品国产97久久久久久户外免费| 久久婷婷电影网| 性性久久| 六月色婷婷| 91免费看一区二区三区| 大香蕉欧美国产日韩高潮| 日本色色色视频| 老熟乱一区二区三区四区| 欧美制服另类丝袜| 成年女人黄网站| 深喉吞精| 久久一二三四不卡| 欧美一区二区亚洲天堂| 亚洲**2021在线观看| 蜜臀久久精品久久久久视频| 成人五月香网在线| 日韩A优精品在线观看| 中文字幕免费在线观看| 嗯……啊…嗯嗯…啊…好舒服| 国语精品内射在线观看| 亚洲天天在线| 舔舔啊| 少妇免费视频| 亚洲一区二区三区欧美日韩| 最新亚洲黄色免费电影 | 94色色电影网| 久久久久78| 狠狠干婷婷| 人妻无一区二区三区| 9.1小视频| 精品十三区| 一本道综合色图| 岛国视频一二三区| 婷婷久久五月综合激情| 国产精品久久久久婷婷二区次| 亚州 综合 色图| 人妻天天夜夜爽一区二区| 96久久久精品| 麻豆乱码久久精| 日本一级黄色电影| 91动漫操逼视频| 曰韩人妻中文字幕在线 | 国产成人一级av88| 色色色日本| 国产精品久久泡妞网站| 中文日韩欧美熟| 一区二区三区四区姦女| 丝袜美腿诱惑亚洲欧美视频在线观看| 日韩av在线免费网站| 久久国产AⅤ| 另类小说欧美激情校园春色| 屁股久久久久久久久| 操人妻逼91| 一区二区偷拍拍视频| 日本韩欧美在线播放a| 久久久久人妻二区精品叶可怜| 殴美性天天| 精品人妻一区二区三区蜜桃视频| 丰满人妻一区二区中文| 亚州综合AⅤ| 欧美精品另类人妖xxxx| 五月天婷婷基地| 国产1769在线| a天堂视频| 日韩性爱视频在线免费观看| 国产午夜精品理论片一二三区区| 国产农村妇女精品| 九九九九九九九九九国产精品| 干妹子| 97精品97久久| 久久久九九九九| 97久久精品国产| 欧亚不卡| 亚州色图片在线色| 欧美大色交| 日韩中文字幕2020| 欧美在线色| 欧美韩国你懂得在线 | 国产白丝在线| 91劲爆| 国产精品久久久久久久免牛肉蒲团| 欧美第38页| 亚洲 图片 欧美 色图| 嗯~啊~快点 死我视频| 97国产精品国| 久久一留热品黄| 91 国产丝袜在线放观看| 91人妻超碰| 真实高潮91| 亚洲国产av中文字幕久久 | 制服乱伦| 久久丁香| www.97在线| 欧美欲色| 我中文字幕6区| 欧美少妇性乱| 欧美精品不卡一二三四在线91| 色欲久久99精品久久| 欧美色97| 亚洲 暴爽 AV人人爽日日碰| 久草精品国产99| 日本成人A片网站| 日韩性爱1级片视频| 天天色综亚洲91污| 天天操女人| 亚洲淫乱骚妇AV| 2017天天透天天通天天擦| 久操影视| www.男人的天堂| 国产精品精品系列在线观看| 国人欧美精品一区二区| 91 亚洲 欧洲| 麻豆伊人网| 亚洲97网站| 久久啊啊| 日韩激情啪啪啪| 国产 三级自拍| 综合色图亚洲欧美| 欧美夜夜骑视频| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 国产精品秘 福利姬在线观看| 首页亚洲国产高跟丝袜诱惑视频| 麻豆婷婷成人一二三| 东北操逼| 欧美综合天天| 亚洲日韩美国人妻| 亚洲色图超碰在线| 亚州国产成人精品女人久久| 久久东京热久久| 免费少妇一区二区| 日本综合久久| 国产中文福利| 这里都是精品| 欧美日韩另类在线播放| 五月婷婷综合在线| 日本天天干天天日一区| 伊人久久综合影院精品久久久| 国产人妻天天干精品| 欧美亚洲玖玖玖| 一二视频神马久久传媒| 又大又大又大又粗爽高潮观看| 思思热久久成人| 女生91网站| 超碰国产精品久| 欧美亚洲日韩人妻在线观看| 激情婷婷丁香| 久久精品久久久久久久久| 日韩不卡av一二三| 国产十八禁视频| 神马麻豆福利院| 狠狠色狠狠色狠狠五月| 日本97久久久精品| TS人妖另类精品视频系列| 极品色www影院| 殴美日韩m| 人妻精品一区二区| 国产亚洲精品第一最新| 美女91在线观看| 亚州一区二区| 久久怡红院| 熟女91网| 欧美顶级黄色大片免费| 精品国产久久乱码| 伊人丁香五月婷婷| 九一屌逼| 久久精品熟女亚洲AV麻豆软件| 无码国产精品午夜不卡(| 久久久久78| 97无码视频在线播放| 久久精品小视频| 日韩欧美久久婷婷网站| 国语av最新自产拍在线观看| 日韩三级性| 国产精品久久久久久久电影渣男| 久久久不能久久久久| 日日摸日日碰夜夜爽视频| 亚洲无线码一区国产欧美国| 后入式999| 男人a天堂手机在线版| 欧美精品久久96人妻无码| 无码精品久久久久久亚洲| 91视频国品一二三区| 人人妻人人爽一区二区三区| 色综合久久久久| www.久久超碰| 亚洲啪啪性视频| 蜜区区视频79 | av九九| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 超碰97人妻免费在线| 视频在线观看一二三区| 天天干人人看综合| 91久久午夜无码鲁丝片久久人妻| 人人操人人干xxx| 国产SV一线| AV在线性爱| 一区二区三区蜜桃成人撸久久东京热| AVE乱伦| 国产超碰在线一区| av网站在线观看了| 青青操视频在线| 福利色色| 超碰97男女| 思思热在线观看| 欧美不卡在线美女| 在线观看亚洲成人精品| 97视频900| 日本一区二区不卡精品| 老熟女综合网| 亚洲精品一区二区三区新线路| 操逼A∨| 天天舔九色婷婷| 亚洲国产ⅴ高清在线观看| 91无码人妻| 国产精品久久久鸭无码的功能| 四虎av在线| 97人妻色| 日韩欧美大力操| 日韩av情韩国爱禁区av一区二区 | 操操碰| 清纯唯美亚洲综合| 久久久18禁| 亚洲二区精品在线观看 | 国产激情在线观看| 碰碰97| 大香蕉在线视频重口味毛片在线| 熟女人妇一区二区三区| 欧美色欧美| 极品粉嫩少妇视频| 久久九九网| 久久亚洲中文字幕视频| 国产不卡的视频| 偷拍 精品另类 凸凹了四区| 国产精品亚洲天堂网址| 色原狠狠天天天| 伊人97色天使| www激情| 午夜亚洲WWW湿好大| 伊人久久亚洲色欲综合网站| 综合色图区| 国产精品无码久久久久2028| 日韩精品人妻一区二区| 无码人妻精品一区二区三区九九 | 五月天激情小说网| 久久首页| 欧在线一二区| 久湿久久 | 老鸭窝亚洲毛片| 福利伊人玖玖国产| 久久久久久久强迫| 国产91丝袜 在线播放| 97 视频在线| 2024人人操人人摸| 四虎影视永久在线免费| 久久精品一区二区| 亚洲 中文 欧美 日韩 在线| 日日夜夜青青草母狗| 九九色色| 人人干人人搞人人摸| 俺去啦俺来也久久综合 | 亚洲在线欧美| 东京热伊久| 青青草成人视频在线观看二区| 日韩啪啪啪啪啪| 欧美日韩 强奸乱伦| 明星性猛交ⅹxxx乱大交| 日本一卡二区在线| 久久久久无码一妻区| xxx亚洲午夜天堂| 超碰国产在线| 久久精品国产亚洲AV片多多| 欧美精品一区二区少妇免费A片| 精品视频一二三中文| 亚洲97网站| 婷婷精品国产一区二区三区日韩| 四季AV综合网址| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 青娱乐 成人娱乐在线| 亚洲精品亚洲人成人网| 久久高清欧美国产| 18禁美女裸体无遮挡啪啪| 91被操| 大JI巴好深好爽又大又粗视频| 九七超碰人人乐| 蜜臀久久99'精品久久久| 国产青青美女玩逼视频| 色婷婷婷五月天激情四射| 东北黄色电影| 日韩一999精品| 玖玖97综合| 亚洲综合网电影91| 丝袜AV一二三区| 五月天婷婷成人网| 九九色综合| 亚洲AV免费在线| 91Chinese在线| 国产成人精品亚洲日本| 色五月综合| 99操碰| 日韩成人综合网| 啊v视频在线观看| 天美麻花大全视频| 久久精品99| 九九激情网| 天天日天天插| 人妻久热在线| 国产超碰在线一区| 亚洲综合九| 美女91色黄18| 久肏视频字幕| 精品视频久久| 日韩国产精品人妻无码久久久| 91肉片| 青青青国产手线观看视频2| 午夜a成v人电影| 国产女同视频在线播放| 少妇xx精品| 欧美顶级黄片AAAAA在线免费看| 青青草天天亲夜夜操网| 日产狠狠干| 99国内精品| 亚洲国成人情色好看电影| 91处女视频在线观看| 久久精品视| 精品无码久久久| 日本三级大片| 日韩精品一区二区高清| 97精品网| 天天澡天天爽日日AV| 就去色综合| 易易A毛视频| 玖色av| 黄页网站成人免费| 九七超碰人人乐| 97久久久久久久久久| 91丝袜人妻| 国内一级精品| 校园春色五月天| 麻豆三极片| 美日韩男女操屄视频| 午夜操逼不卡| 亚洲最大无码中文字幕网站| 国产真实野战在线视频| 亚洲成人在线播放| 97超碰天天| 国产精品香蕉热久久新品| 色色五月丁香| 欧美 日韩 国产传媒| 成人精品一区二区三区| 色婷婷一区二区三区久久午夜| 91操熟女视频| a男人的天堂久久一级A毛片| av无码精品久久久久| 桃色五月天| 欧美熟女妇同| 特色a在线上| 久久精品国产亚洲AV成人直播| 东北黄色电影| 97国产精品久久久久| 女人久久久| 东北丰满熟女国产一区| 日韩伦理视频| 欧姜老司机| 欧美黄片欧美黄片xxx| 亭亭丁香激情| 国产高清自拍视频| 国产一区二区三区影片| 1204av韩国| 久久久久久9| 99热这里只有精品地址| 色大香蕉97N| 久96热在线观看视频| 1024香蕉视频| 久久有码视频| 亚洲强奸乱伦影视网| 中文字幕片| 囯产精品久久久久久久久久梁医生 | 人人操人人操人人操人人操人人操人人人11.CM | 日本二三四区| 色婷亚洲五月在线观看| 蜜桃臀AV在线| 综合久久六月久久婷婷| 精品十三区| 日韩一级性爱无码| 久久久久久久久久久六六| 欧美综合色图片| 精品国产www久久| 亚洲综合色在线| 一本大道不卡一二三区| 日韩人妻无码精品系列| 亚洲精品国产精品成人| 精品国产一区二区久久| 黄骗免费网站| 欧美国产有色电影| 成人免费福利在线观看| 日韩内| 亚洲熟妇极品| 国产精品美女久久久久AⅤ国产馆| 天堂麻豆天美| 97欧美性爱| 久久99干一本高清| 日本大片日本一区二区免费高清 | 色婷五月| 91久久免费视频互動交流| 亚洲吊色| 久久草在线综合视频| 99re视频这里只有精品| 啊嗯好大视频在线观看| 丁香五六月啪啪| 午夜AV污污污| 伊人久久青青草| 日本1区2区不卡视频| 欧洲一区二区三区免费| www99热| AAAA欧美日韩| 校园春色美腿丝袜| 日韩中文字幕av在线播放| 欧美另类精品xxxx| 亚洲天天操| 淫乱图区 | 久久伊人最新网址视频| 91综合天天看| 久久99深爱久久99精品| 人妻插插人妻人| 95人妻爽爽人人做人人澡| 思思热免费在线视频| 麻豆AV一区二区天美传媒| 97超碰亚洲| 夜夜骑夜夜操| 99色婷婷| 久草五月| 欧美色图成人网一区二区| 国产家庭乱伦性爱视频| 超91综合网| 97久久久久久久久久| AⅤ片水多多| 六月丁丁香| 亚洲女人毛茸茸91| 成年女人黄网站| 欧美黄片免费在线观看视频| 日本不卡卡一区| 国产精品乱码久久| 国产11页| 精品传媒在线一区| 色婷婷丁香五月| 欧美少妇高潮视频| 日本污ww视频网站| 蜜屁Av| 以及麻豆国产入口在线观看免费| 97干在线| www.acm成人黄色毛片| 精品一区二区三区蜜桃臀赵总 | 加勒比海成人视频网 | 神马久久久久久久久久| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 色婷婷九月天天综合| 日韩一999精品| 宗合情欲网| 天天干天天日天天射黄色片| 亚洲性网| 久草精品在线| 一区二区三区亚洲| 超碰在线国产| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 蜜臀AV成人精品蜜臀| 国语av最新自产拍在线观看| 丝袜美腿欧美| 国产综合久| 日本色色视频网站| WWW黄片COM| 日韩中字av一区| 超碰9 7女人| 伦激情人妻另类人妻| 日本五十路熟女一区二区| 亚洲欧美九九| 精品人妻伦一区二区三区久久| 免费试看60秒| 天天干天天狼在线视频| 精品无码一区二区| 啪啪啪男女亚洲中文字幕99| 麻豆国产视频精品观看| 久极品在线观看| 少妇激情一区二区三区视频| 国产三级中文有码在线视频| 91精品91久久久中77777| 欧美精品久久久久久久丰满| 久jiu久神马影院| 3d成人精品一区二区| 人人操人人摸超碰| 浪人综合网| 蜜臀在线免费观看在线免费观看| 天堂亚洲精品久久老牛| 精吧天堂| 日韩欧美成人大香蕉| www.夜夜操| 日本中文字幕在线电影| 午夜寂寞欧美| a v网站在线播放| 高清无码 国产精品| 人人操人人操人人操人人操人人操人人人11.CM | 日韩资源网| 蜜乳AV一区| 欧美黄色大香蕉一区二区| 亚洲自拍天堂| 欧美精品三级黄片| 亚洲宅男天堂| 亚洲97在线| 国产成人亚洲精品自产在线| 久9九综合在线| 亚洲 欧美都市激情| 男人天堂网站| 国产福利夜| 日本性爱视频一级| 美女露胸露屁股| 国产精品福利资源在线尤物| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 美女尤物人人操| 国产午夜视频| 日本欧美韩国日产片片在线看免| 久久男人网| 亚洲国产天堂| 九九热视频在线观看| 久久久久夜夜夜夜| 日本一区二区三区精品| 大香蕉日韩| 嗯啊免费视频| 五月婷婷久久综合| 亚洲综合另类欧美久久久| 日韩亚洲97| 亚洲伊人久久综合97| 人妻精品视频一区二区| 99色婷婷中文字幕乱色| 国产sv美女内射| 久久香蕉国产线看观看猫咪av| 91久久国产综合久久| 欧美亚洲色的图| 久久一区二区高清免费| 草蕉影视亚洲无码| 亚洲AV麻豆Aⅴ无码电影一| 日日夜夜干| 中文字幕高清20页视频| 久久思思热| 天天干少妇| 五月婷婷综合激情| 屌逼麻豆| 九九九久久久久| 18啪啪手机免费性爱| 欧美在线l亚洲| 亚洲国产尤物yw在线观看| 91丝袜在线观看视频在线观看| 亚洲 91 在线| 97高清啪啪| 强奸熟女一区二区三区| 日本顶级天天操狠狠操夜夜操中文字幕| 白丝AV网站| 精品无码久久久久| 欧美日韩97在线| 日日摸日日碰夜夜爽视频| 九九热av| 亚洲国产精品成人综合| 欧美日韩黄片精品在线 | 极品色社| 白丝少妇一区二区| 九九九九九九免费视频| 欧美熟女少妇| 丁香六月东京热| 亚洲日韩电影| 中字一区| 欧美另类综合久久| 欧美午夜精品久久久久久超碰| 五月天色图| 九九热re99re6在线精品| 欧美少妇色图| 女同性恋久久| 一本一首道人妻少妇免费久久| 蜜臀无码一区二区| 91丨九色丨东北熟女| 高清国产成人无码| 91精品老女人| 国产精品农村妇女精品| 男人的天堂2000| 日本午夜福利视频| 防屏蔽在线视频| 无码自拍SM| japan日本高清乱xxxx| 国语对白露脸XXXXXX | 日韩黄色成人性爱| 91爱做| 26uuu久久| 密桃99999| 麻豆亚洲AV成人无码久久精品| 园内精品自拍视频在线播放| 人人人人插| 无码人妻精品一区二区中文| 91高跟美女在线播放| 尤物网址| 禁十八久久| 久久久日本电影| 牛黄色久午久| 激情文学 亚洲图片| 国产操逼网站亚洲一级黄色| 九九色热| h色99999| 中文字幕乱妇免费视频| 久久男女激情视频网站| 亚洲好色人妻| 国产福利影视| 大白逼三四级| 每日更新AV| 懂色av中文字幕一区二区三区天美| 秋霞一级A片黄色视频| 蜜桃视频精品一区二区三区| 中日韩免费看男女操逼大全| 精品国产乱码久久久久久久久1| av草草在线电影| 一级性爱视频免费在线| 青娱乐日韩无码| 精久久久91| 亚洲自拍小说| 日本三级网页| 国精综合一二三区影视| 一本久道久久综合狠狠爱一密臀精 | 韩国黄色片精品久久久| 青青草乱入乱欲视频在线观看| 97久久国产精品女不卡| 日本高清有码网址视频| 人人澡综合涩| 肉动漫无遮挡h在线观看| 亚洲一区二区麻豆影院| 亚洲综合 欧美| 久久精品国产99精品亚洲蜜...| 色婷婷在线视频| 成人AV在线网站| 国产精品一二三在线看| 精品久久久久久久久久久久| 日韩性色| 在线视频日韩欧美国产| 大香蕉伊人亚洲| 日韩91网站| 51一区二区三区| 中文字幕88av在线| 亚洲综合97| 淫妻综合网| 欧美日韩不卡传媒| 搡老熟女免费视频| 亚州少妇| 亚洲欧美日韩中文播放| 超碰成人免费| 天天综合91入口| 久久99午夜精品一区人妻| 天天综合网1| 欧美亚洲色图另类国产| 色av中文字幕| 国产中文字幕在线点播| 超碰性爱97| 国产亚洲精品A在线观看下载| 日产国产精品中文久久婷婷| 蜜乳中文字幕a在线| 日韩欧美aⅴ综合网站发布| AV男人天堂网| 爽爽淫人网| 国产隔壁老王影院在线| 亚洲国产成人精品久久久国产成人一区二区| 人妻AV 中文字幕的| 男人的天堂 在线一区| 久久久久久久少妇| 亚洲男人久久综合天堂| 91AV天美在线视频| 色婷婷狠狠| 日B操| 99re6国产精品99re在线| 激情 欧美 亚洲 小说| 国产超碰欧美| 亚洲精品久久久久久久久豆丁网| 色婷婷六月丁香七月婷婷| 亚洲偷91色| 极品五月天噜噜| 操逼操网| 久久精品—区二区三区内射| 婷婷香网站| 日本在线不卡123| 国产自产自拍| 国产在线综合网| 久久久久深夜无码| 日欧美色| 伊人影院中文字幕| 欧美色综合影院| 色黄污美女啪啪啪免费网站| 五十路成人在线视频二区三区| 岛国AV一区二区电影| 蜜乳AV网址| 黑人嘿嘿嘿超爽免费视频| 国产日韩色综合| 中文AV制服乱伦| 欧综合网| 亚洲 欧美综合| 人人操人人插人人摸人人干| 亚洲天堂,男人| 精品人妻一区二区三区夜夜| 亚洲91色| 无码抄逼网| 日韩人妻精品中文字幕| 亚洲av性爱电影| 天天日夜夜| 久久精品国产97欧美精品亚洲| 中文字幕一区二区日韩网| 操操AV电影| 99AV| 五月天婷婷久久| 久久精品无码不卡| 欧美强奸一区二区诱惑| 91天天c| 国产肏逼网站| 欧美在线啊啊| 久久久久亚洲Aⅴ无码| 亚洲午夜免费狠狠干| 99国产在线绯色一区| 91久久久久久久久18| 国产福利在线视频网站| 日本一级婬片试看三分钟| 天天精品| 91精品国产91熟女| 91撸色网 玖玖网 欧美| 亚洲成人免费在线| 91无遮挡| 亚洲drav色图| 欧美大香蕉在线观看| 日韩 国产 欧美自拍| 国产91丝袜 在线播放| 久久97资源 网| 另类小说五月天| 人人看欧美性爱| 精品人妻一区二区三区四区不卡在| 日本999精品| 天天色香欲综合网| 午夜色婷婷| 最新日日夜夜天天干干| 亚洲人久久久久日| 夜夜操夜夜高潮夜夜爽国产精品区| 狠狠狠一区二区三区| 蜜乳AV色欲AVAV无码| 国产又黄又粗的视频| JuliaAnnXXX888| 中国的操老妇女| 91红杏| 九九性视频| 围产精品一区二区三区视频播放| 婷婷伊人五月| 色亚洲欧美| 91欧美丝袜| 粉嫩小泬久久久一区二区| 欧美图片偷拍| 亚洲色啪| 精品国产久热在线观看| 国产9 9在线 | 亚洲| 欧美在线天堂| 97操B| 中文字幕AV片| 91在线丝袜视频| 欧美性爱一内片一区二区三区| 欧美在线播放aaaa| 国产日本久久免费精品| 国产精品无码av| 久久久久久久免费A片国产成a人亚洲精∨品无码| 日韩本不卡视频在线观看 | 操91| 欧美成人一区二区| 五月天婷婷综合网| 婷婷久久网| 国产一区二区啪啪视频| 欧美成人A√在线一区二区| 91这里只有精品| 国产精品96| 国产九九九九九九| 国产91丝袜在线播放蜜月| 爱妻综合网| 久久一本大香蕉 | 偷拍盗拍亚洲色图图片 | 亚洲精品第一| 20cm女自慰在线日韩欧美| 男人天堂电影院| 久久久精品网站| 亚洲极品| 97久久久久久久久久| 欧美日本视频一区| 亚洲色图片区| 97精品视频在线| 四季av一区二区凹凸精品小说| 国产中文字幕在线观看| 一区二三区四区视频大全套| 九一性生活免费视频| 日韩中文字幕精品一二三事国产精品| 超碰这里只有精品| 加勒比五月天| 夜夜做夜夜爽精品视频| 亚洲天天影视色综合| 久草老司机| 精品一区二区三区18| 天干天干天干天天做| 91精品久久久久| 欧美色宗合| 黄色香蕉视频网站一区| 69XX一中文字幕人妻91| 天天色天天干天天爱| 91c色| 岛国艾薇凹凸视频天堂| 久9热| 午夜天天碰综合视频| 欧美少妇一区二区三区| 少妇色| 97国产色综合| 丰满美女一级毛片在线播放| 欧洲精品久久| 色色激情| 中文?日韩?免费?精品| 四虎视频在线观看| 影音先锋中文字幕日本好一区二区| 欧美激情内射| 99青草| 91高清无码下载| 久久久久久久性爱| 欧洲中文字幕| 美女国产一区二区久久| 亚洲少妇在线观看| 欧美激情久| 亚洲一区中文字幕一区| 亚洲乱码精品一区二区| 日韩精品三级片长长久久| 日韩免费看黄片| 搡老女人911熟妇老熟女| 亚州色阁| 国产精品国产拍高清AV| 97精品国产97久久久久久户外免费| 日韩欧美被操黄免费观看| 少妇人妻在线| 天久久久噜噜噜久久国产精品爽爽| 国产色图乱伦| 黄色AAAAA欧美| 一起草av| 亚洲欧洲久久天堂| 欧美 色 亚洲| 精品无码欧美三级| 精品区国产区一区二区三区| 欧美色五月| 日韩无码精品综合久久| 日韩久射综合| 久久精品老司| 国产熟女少妇一区| 欧美自拍偷拍免费观看| 人人人摸人人| 久草综合网| 99黄页网站| www老逼91| 看日韩操逼| 欧美日韩免费性爱| 一级黄色性爱裸体视频| 精品久久久久综合无码| 欧美精品偷拍| 校园春色欧美色图| 日韩精品一区二区三区四虎影视| 国产成年精品高清在线观看91| av网站免费看| 992视频一区| 日日骚av| 久久少妇人妻| 深夜操逼网| 欧美综合传媒| 99热| 国产一级作爱毛片| 欧美熟女妇同| 亚洲爽图| 国产高清成人传媒影视| 蜜臀AV成人精品蜜臀| 91殴美| 久久九九网| 精品九九九九九九九九九| 亚洲精品久久久久毛片A片拉屎 | 抽插爽| 日韩激情视频| 青青爽| 真实高潮91| 中文有码第五页| 999在线电影香蕉| 9999免费精彩视频| 黑人黄片在线免费观看| 五月天婷精品激情| 欧美日韩国产成人高清| 亚洲?V高清一区二区三区尤物| 97超碰色| 天天草天天日| 日韩无码极品| 乱伦一二三区| 操婢日韩| 殴美在线AⅤ| 岛国视频免费在线观看| 日本一区二区不卡精品| 免费毛片在线播放| 色婷婷五月综合| 色99视频|