210310学习压缩包数据结构课件chap08-查找.pptVIP

  • 0
  • 0
  • 约1.14万字
  • 约 112页
  • 2021-03-24 发布于北京
  • 举报

210310学习压缩包数据结构课件chap08-查找.ppt

关键字类型和数据元素类型 典型的关键字类型说明可以是: 两个关键字比较的宏的约定 对于数值型关键字: H A D $ S $ V E $ E $ R $ E $ I G H $ S $ 例如: 表示关键字集合 {HAD, HAS, HAVE, HE, HER, HERE, HIGH, HIS } 2. 双链树 — 以二叉链表作存储结构实现的键树 typedef enum { LEAF, BRANCH }NodeKind; // 两种结点:{叶子 和 分支} 结点结构: first symbol next 分支结点 infoptr symbol next 叶子结点 指向孩子结点 的指针 指向兄弟结点 的指针 指向记录 的指针 ? H ? A D $ HAD E $ R $ $ E S $ G H $ I ? ? ? ? ? ? ? ? HE HER HERE HIGH HIS … T ? 叶子结点 分支结点 含关键字 的记录 typedef struct DLTNode { char symbol; struct DLTNode *next; // 指向兄弟结点的指针 NodeKind kind; union { Record *infoptr; // 叶子结点内的记录指针 struct DLTNode *first; // 分支结点内的孩子链指针 } } DLTNode, *DLTree; // 双链树的类型 #define MAXKEYLEN 16 //关键字的最大长度 typedef struct { char ch[MAXKEYLEN]; // 关键字 int num; // 关键字长度 } KeysType; // 关键字类型 在双链树中查找记录的过程: 假设: T 为指向双链树根结点的指针, K.ch[0..K.num-1] 为待查关键字 (给定值)。 则查找过程中的基本操作为进行下列比较: K.ch[i] =? p-symbol 其中: p 指向双链树中某个结点, 0 ≤ i ≤ K.num-1 初始状态: p=T-first; i = 0; 若 ( p p-symbol == K.ch[i] iK.num-1) 则继续和给定值的下一位进行比较 p=p-first; i++; 若 ( p p-symbol != K.ch[i] ) 则继续在键树的同一层上进行查找 p=p-next; 若 ( p p-symbol==K.ch[i] i==K.num-1) 则 查找成功,返回指向相应记录的指针 p-infoptr 若 ( p == NULL) 则表明查找不成功,返回“空指针”; 3. Trie树 — 以多重链表作存储结构实现的键树 结点结构: 分支结点 叶子结点 指向记录 的指针 0 1 2 3 4 5 … … 24 25 26 关键字 指向下层结点的指针 每个域对应一个“字母” 0 1(A) 3 4 5(E) 9(I) … … 26 8(H) 4(D) 19(S) 22(V) 0 18(R) 7(G) 19 0 5(E) T HAD HAS HAVE HE HER HERE HIGH HIS ? ? ? ? ? ? ? ? ? 叶子结点 分支结点 指向记录 的指针 typedef struct TrieNode { NodeKind kind; // 结点类型 union { struct { KeyType K; Record *infoptr } lf; // 叶子结点(关键字和指向记录的指针) struct { TrieNode *ptr[27]; int num } bh; // 分支结点(27个指向下一层结点的指针)

文档评论(0)

1亿VIP精品文档

相关文档