一、简述

静态查找表又分为顺序表、有序表、静态树表和索引表。以下只是算法的简单实现及测试,不涉及性能分析。

二、头文件

/**

author:zhaoyu

date:2016-7-12

*/

#include "6_3_part1_for_chapter9.h"

typedef struct {

int key;

}SElemType;

//静态查找表的顺序储存结构

#define ElemType SElemType

#define KeyType int

typedef struct {

ElemType *elem;//数据元素储存空间基址,0号留空

int length;//表长度

}SSTable;

//这里简化了键值

//实现 EQ

bool EQ(int a, int b)

{

return a==b?true:false;

}

bool LT(int a, int b)

{

return a

}

//实现创建 SSTbale

void createSSTable(SSTable &T)

{

//先输入长度 length

//再输入 length 个 元素

scanf("%d", &T.length);

T.elem = (ElemType *)malloc((T.length + )*sizeof(int));

for (int i = ; i <= T.length; i++)

{

scanf("%d", &T.elem[i].key);

}

}

/**

algorithm 9.1

*/

int Search_Seq(SSTable ST, KeyType key)

{

//在顺序表 ST 中顺序查找关键值等于key的数据元素,

//若找到返回元素在表中位置,否则返回0

ST.elem[].key = key;

int i;

for (i = ST.length; !EQ(ST.elem[i].key, key); --i);

return i;

}

/**

algorithm 9.2

*/

int Search_Bin(SSTable ST, KeyType key)

{

//在有序表 ST 中折半查找其关键字等于 key 的数据元素

//找到返回其位置,否则返回 0

int low = ;

int high = ST.length;

while (low <= high)

{

int mid = (low + high) / ;

if (EQ(key, ST.elem[mid].key))

{

return mid;

}

else if (LT(key, ST.elem[mid].key))

{

high = mid - ;

}

else

{

low = mid + ;

}

}

return ;

}

9_1_1.h

//6_3_part1.h

/**

author:zhaoyu

date:2016-6-18

*/

#include "head.h"

#define TElemType char

//----二叉树的二叉链表表示----

typedef struct BiTNode{

TElemType data;

struct BiTNode *lchild, *rchild;

}*BiTree;

Status Visit(TElemType e)

{

printf("%c\t", e);

return OK;

}

Status RecursionPreOrderTraverse(BiTree T, Status (* Visit)(TElemType e))

{//采用二叉链表存储结构,Visit是对数据元素操作的应用函数

//先序遍历二叉树 T 的递归算法

if (T)

{

if (Visit(T->data))

{

if (RecursionPreOrderTraverse(T->lchild, Visit))

{

if (RecursionPreOrderTraverse(T->rchild, Visit))

{

return OK;

}

}

}

return ERROR;//这一行由于 Visit 函数只 return OK,貌似没什么用

}

else

{

return OK;

}

}

6_3_part1_for_chapter9.h

#include "6_3_part1_for_chapter9.h"

typedef struct {

char key;

float weight;

}SElemType;

//静态查找表的顺序储存结构

#define ElemType SElemType

#define KeyType char

typedef struct {

ElemType *elem;//数据元素储存空间基址,0号留空

int length;//表长度

}SSTable;

//实现创建 SSTbale

void createSSTable(SSTable &ST)

{

//先输入长度 length

//再输入 length 个 元素

scanf("%d", &ST.length);\

getchar();//输入老师犯错误

ST.elem = (ElemType *)malloc((ST.length + )*sizeof(ElemType));

for (int i = ; i <= ST.length; i++)

{

scanf("%c", &ST.elem[i].key);

getchar();

scanf("%f", &ST.elem[i].weight);

getchar();//很是懵逼

}

}

//my code

void FindSW(float *sw, SSTable ST)

{

float sum = ;

for (int i = ; i <= ST.length; i++)

{

sum += ST.elem[i].weight;

sw[i] = sum;

}

}

/**

algorithm 9.3

*/

void SecondOptimal(BiTree &T, ElemType R[], float sw[], int low, int high)

{

//由有序表R[low...high]及其累计权值表sw(其中sw[0]==0)递归构造次优查找树

int i = low;

float min = abs(sw[high] - sw[low]);

float dw = sw[high] + sw[low - ];

for (int j = low + ; j <= high; j++)

{

if (abs(dw-sw[j] - sw[j-]) < min)

{

i = j;

min = abs(dw-sw[j] - sw[j-]);

}

}

T = (BiTree)malloc(sizeof(BiTNode));

T->data = R[i].key;

if (i == low)

{

T->lchild = NULL;

}

else

{

SecondOptimal(T->lchild, R, sw, low, i-);

}

if (i == high)

{

T->rchild = NULL;

}

else

{

SecondOptimal(T->rchild, R, sw, i+, high);

}

}

/**

algorithm 9.4

*/

typedef BiTree SOSTree;//次优查找树采用二叉链表的储存结构

Status CreateSOSTree(SOSTree &T, SSTable ST)

{

float sw[];

//有有序表构造一颗次优查找树T, ST的数据元素含有域weight

if ( == ST.length)

{

T = NULL;

}

else

{

FindSW(sw, ST);//按照由有序表ST中各数据元素的weight域求累计权值表sw

SecondOptimal(T, ST.elem, sw, , ST.length);

}

return OK;

}

9_1_2.h

三、CPP文件

#include "9_1_1.h"

int main(int argc, char const *argv[])

{

SSTable T;

createSSTable(T);

printf("Search 9:\t%d\n", Search_Seq(T, ));

printf("Search 3:\t%d\n", Search_Bin(T, ));

return ;

}

9_1_1.cpp

#include "9_1_2.h"

int main(int argc, char const *argv[])

{

SOSTree T;

SSTable ST;

createSSTable(ST);

CreateSOSTree(T, ST);

RecursionPreOrderTraverse(T, Visit);

printf("\n");

return ;

}

9_1_2.cpp

四、测试

静态树表

反思:

考完试,动力明显不足了,怎能半途而废,一定要把这个工程在回家之前完成。此外,对于一些不常用,或较难或书上说的比较的含糊的算法明显静不下心来好好研究。效率奇低。

数据结构算法C语言实现(十二)--- 3&period;4循环队列&amp&semi;队列的顺序表示和实现

一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...

数据结构算法C语言实现(十)--- 3&period;3栈与递归的实现

一.简介 汉诺塔问题是递归的一个典型例子,而且书上的讲解很详细,对理解C语言函数及函数传参的工作机制很有帮助,值得一看.而且,递归在我看来和分治.DP.贪心等一样是十分优美的思想,值得学习!!! 二. ...

数据结构算法C语言实现(十九)--- 5&period;5&amp&semi;5&period;6&amp&semi;5&period;7广义表

一.简述 传说Lisp的基本数据结构就是广义表,广义表也是具有典型递归属性的数据结构,此外,由于建表要处理字符串,用C语言处理起来也是一脸懵逼.....最后自己还想写一个将广义表还原成字符串的函数,一 ...

数据结构算法C语言实现(十四)--- 4&period;1&amp&semi;4&period;2串的类型定义、表示及实现

一.简述 [暂无] 二.头文件 //4_2_part1.h /** author:zhaoyu */ //2016-6-10 //----串的定长顺序存储表示---- #include "h ...

COJ968 WZJ的数据结构(负三十二)

WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...

&lbrack;COJ0968&rsqb;WZJ的数据结构(负三十二)

[COJ0968]WZJ的数据结构(负三十二) 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有一盏灯,初始均亮着.请你设计一个数据结构,回答M次操作. 1 x:将节点x上的灯拉一次,即亮变 ...

Java进阶&lpar;三十二&rpar; HttpClient使用详解

Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...

&OpenCurlyDoubleQuote;全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

&OpenCurlyDoubleQuote;全栈2019”Java第三十二章:增强for循环Foreach语法

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

Jade 模板引擎使用

在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...

Metro风格的Android界面应用

最近项目中需要一个选择月份查询客户余额的功能,原先的android只能满足查询当月,不可以查询任意月份.当然改起来还是很简单的,服务端增加一个月份参数,客户端传入这个参数即可.闲来无事,月份的选择风格 ...

「c&plus;&plus;小学期」实验题目及代码

面向对象编程的C++,和平时做题用的C++还是有差距的.实验的题目都是小题目,就都做一下吧.(没放代码的为要验收的 实验一 简单C++程序设计 1.  猜价格游戏 编写C++程序完成以下功能: (1) ...

如何在CentOS 7上安装EPEL源

EPEL 是什么? EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/CentO ...

处理海量数据的高级排序之——希尔排序(C&plus;&plus;)

希尔算法简介                                                                                              ...

px和em的区别(转)

在国内网站中,包括三大门户,以及“引领”中国网站设计潮流的蓝色理想,ChinaUI等都是使用了px作为字体单位.只有百度好歹做了个可调的表率.而 在大洋彼岸,几乎所有的主流站点都使用em作为字体单位, ...

(转)union和union all的区别

Union因为要进行重复值扫描,所以效率低.如果合并没有刻意要删除重复行,那么就使用Union All 两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致): 如果我们需要将两个s ...

LODOP之票据连续套打笔记&lt&semi;一&gt&semi;

之前项目中需要使用套打,费了半天劲,最后找到LODOP,整体感觉还是不错,简单,满足大多数web套打 这是我项目中需要打印的票据 该票据每张做多显示6条数据,数据超过6条的时候需要进行分页打印,当时做 ...

MM bound 与 Jensen&&num;39&semi;s inequality

MM bound 与 Jensen's inequality 简森不等式 在使用最大似然估计方法求解模型最优解的时候,如果使用梯度下降(GD or SGD)或者梯度上升(GA or SGA),可能收敛 ...

ICPC2017 Urumqi - K - Sum of the Line

题目描述 Consider a triangle of integers, denoted by T. The value at (r, c) is denoted by Tr,c , where 1 ...

静态树表查找算法及C语言实现,数据结构算法C语言实现(三十二)--- 9.1静态查找表...相关推荐

  1. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  2. c语言算法集,【二级C语言】数据结构算法集---C  语言实现

    蜡烛马区新固动工八拐怪状小城,小城炮兵会晒茶麸领子.冒算心头画行启脾沙拉,壮志骗人淡漠流生宣布木锯南政新车?猛料妙绝长亭浓味寺塔马兜放领理光.普特民师初生情境民寿流传灭绝!勤恳心曲修整拭除转子苛评. ...

  3. PhotoShop算法实现高级篇-剪纸艺术滤镜(三十二)

    PhotoShop算法实现高级篇-剪纸艺术滤镜(三十二) kezunhai@gmail.com http://blog.csdn.net/kezunhai 剪纸是中国古代乃至今日的传统艺术,它的团简单 ...

  4. c语言visit_数据结构(c语言)——入门数据结构的世界:顺序线性表(一)

    前面说的话 提到数据结构,最出名的恐怕还是四大基本结构,分别是集合,线性结构,树形结构和图形结构. 本人只是一名普普通通的本科学生,学的东西比较基础,甚至有可能比较落伍,但作为所有国内高等学府相关专业 ...

  5. 数据与广告系列三十二:重排ReRank,广告推荐算法链路上的背叛者,生态系统格局的重塑者...

    作者·黄崇远 『数据虫巢』 全文23138字 题图ssyer.com " 在推荐系统又或者计算广告中,重排ReRank明目张胆的把召回.粗排.精排几个链路逻辑辛苦生成的序给打乱,但却敢号称是 ...

  6. Redis源码剖析(十二)有序集合跳表实现

    有序集合是Redis对象系统中的一部分,其底层采用跳表和压缩列表两种形式存储,在上一篇介绍了跳表实现,就趁热打铁看一下有序集合的跳表实现 本篇主要涉及的是有序集合添加数据的命令,后面会看到,在命令的底 ...

  7. 实训十二:路由器静态路由配置

    一. 实验目的 理解路由表 掌握静态路由的配置 二. 应用环境 在小规模环境里,静态路由是最佳的选择 静态路由开销小,但不灵活,适用于相对稳定的网络 三. 实验设备 1.DCR-2655 三台 2.网 ...

  8. 【C语言进阶深度学习记录】三十 二维数组与二维指针

    文章目录 1 二维指针(指向指针的指针) 2 二维数组 3 二维数组的类型 3.2 如何动态申请二维数组 4 总结 1 二维指针(指向指针的指针) 指针的本质是变量 指针的指针是保存指针变量的地址.如 ...

  9. 【经典回放】多种语言系列数据结构算法:树(C#、JavaScript、VB6版)

    目    录 一.树的C#语言实现以及显示 二.树的JavaScript语言实现以及显示 三.树的VB6语言实现以及显示 一.树的C#语言实现以及显示 1

最新文章

  1. 完了!TCP出了大事!
  2. 实例教程五:采用SharedPreferences保存用户偏好设置参数
  3. [转]设计模式(22)-Strategy Pattern
  4. Apache——Introduction
  5. php 子类重新定义父类的变量_PHP设计模式 ——(抽象工厂模式)
  6. 0基础学python要多久-自学Python要学多久可以学会?
  7. 利用Caffe训练模型(solver、deploy、train_val)+python使用已训练模型
  8. ie手机浏览器_最终还是说再见!微软宣布重要消息,IE浏览器被放弃
  9. ElasticSearch8.1.2 ik分词器
  10. Matlab中绘制灰度直方图的两个函数imhist和histogram
  11. 压力测试-LR工具安装
  12. C++中的DLL调用0x00000000错误
  13. java获取文件名格式 / java获取文件名后缀
  14. vue3.0 axios 图片上传
  15. windows功能_Windows可选功能介绍
  16. 苹果A16的遮羞布被撕下了,性能提升幅度有限,被嘲讽为挤牙膏
  17. Arrays.sort与Arrays.parallelSort区别
  18. MySQL InnoDB Cluster部署
  19. 计算机视觉处理的三大任务(待续)
  20. 深度观察:杭州区块链周,中国版的共识大会

热门文章

  1. 家庭资产4321原则
  2. 那个顶撞雷军还爱在办公室打乒乓的副总裁——周光平
  3. python封装一个小游戏
  4. 开始入秋,一场秋雨一场寒
  5. Linux安装Maven、POM及配置文件详解
  6. vcpkg安装msys2
  7. JAVA程序员要如何从初级程序员过渡到系统架构师?
  8. 责任链模式以及应用场景
  9. 鼎信通讯一面面经(7.7 已经oc)
  10. GARP(Gratuitous ARP)