第十五题用拉链法实现散列表 POWERBY KTL

该博客介绍如何使用拉链法解决散列冲突,通过一个C语言程序展示了散列表的插入、删除操作。程序中定义了散列函数H(k),并以6为除留余数,链表长度为6,关键字数量为6。博客内容包括输入关键字序列,初始化散列表,查找关键字并在找到时输出。

/*
15.编写对一组关键字,利用链地址法解决冲突,
散列函数为H(k),写出在此散列表中插入、删除元素的算法。
程序输入 参考书本p269 其中除留余数p为6 拉链长度M为6 关键字长度N为6
输入72 35 124 153 84 57
接着要求输入需要查找的关键字,本程序打印出来的是key而不是other,所以只要输出等于输入的关键字
程序就正确了。
*/
#include "stdio.h"
#include "stdlib.h"

#define p 6
#define M 6
#define N 6

typedef  int keytype;
typedef  char datatype;

typedef struct nodetype
{
 keytype key;
 datatype other;
 struct nodetype *pNext;
}chainhash;

chainhash *HTC[M];

int H(keytype k)
{
 return k%p;
}

chainhash *Chnsrch(chainhash *HTC[],keytype k)
{
 chainhash *q;
 q=HTC[H(k)];
 while(q&&(q->key!=k))
  q=q->pNext;
 return q;
}

void Cinsert(chainhash *HTC[],chainhash * s)
{
 int d;
 chainhash *q;
 q=Chnsrch(HTC,s->key);
 if(q)
  printf("ERROR");
 else
 {
  d=H(s->key);
  s->pNext=HTC[d];
  HTC[d]=s;
 }
}

void Init(chainhash * HTC[],int m,keytype key[],int n) //初始化HTC的函数
{
 int i;
 for(i=0;i<m;i++)
 {
  HTC[i]=NULL;
 }
 for(i=0;i<n;i++)
 {
  chainhash *s;
  s=(chainhash *)malloc(sizeof(chainhash));
  s->key=key[i];
  Cinsert(HTC,s);
 }
}

int main()
{
 int i;
 chainhash * d;
 keytype k;
 keytype key[N];
 printf("请输入你的关键字序列:");
 for(i=0;i<N;i++)
 {
  scanf("%d",&key[i]);
 }
 Init(HTC,M,key,N);
 printf("现在的散列表状态为:/n");
 for(i=0;i<M;i++){
  d=HTC[i];
  while(d!=NULL)
  {
   printf("%d ",d->key);
   d=d->pNext;
  }
 }
 printf("/n");
 printf("请输入你要查找的关键字:");
 scanf("%d",&k);
 d=Chnsrch(HTC,k);
 if(d->key==k)
 {
  printf("%d /n",d->key);
 }
 else{
  printf("发生错误。。。/n");
 }
 return 0;
}

 

### 使用 Kettle 连接 Hive 数据库的方 Kettle(现称为 Pentaho Data Integration,PDI)是一种强大的 ETL 工具,支持多种数据源的连接和操作。根据提供的引用内容[^2],Kettle 支持 Hadoop Hive 作为其数据源之一。以下是使用 Kettle 连接 Hive 数据库的具体方和示例代码。 #### 1. 确保环境配置正确 在使用 Kettle 连接 Hive 数据库之前,需要确保以下条件已满足: - Hive 的 JDBC 驱动程序已安装并配置到 Kettle 的 `lib` 目录中。 - Hive 服务已启动,并可以通过网络访问。 - Kettle 版本与 Hive 版本兼容。例如,如果使用的是 Hive 2,则需要确保 Kettle 支持该版本[^1]。 #### 2. 配置 Hive 数据源 在 Kettle 中添加一个新的数据库连接: - 打开 Kettle 并进入“数据库连接”设置。 - 点击“新建”以创建一个新的数据库连接。 - 在“数据库类型”下拉菜单中选择 `Hive` 或 `Hive2`[^2]。 - 输入 Hive 数据库的相关信息,包括: - 主机名:Hive Server 的地址。 - 端口:默认为 10000(Hive 的默认端口号)。 - 数据库名称:目标数据库名称。 - 用户名和密码:用于连接 Hive 的认证信息。 #### 3. 示例代码 以下是一个通过 JDBC 连接 Hive 数据库的示例代码片段,适用于 Kettle 的脚本任务或外部 Java 程序: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class HiveConnectionExample { public static void main(String[] args) { String driverName = "org.apache.hive.jdbc.HiveDriver"; // Hive JDBC 驱动 String connectionUrl = "jdbc:hive2://<hive-host>:10000/<database-name>"; // 替换为实际值 String username = "<username>"; // 替换为实际用户名 String password = "<password>"; // 替换为实际密码 try { Class.forName(driverName); // 加载驱动 Connection connection = DriverManager.getConnection(connectionUrl, username, password); // 建立连接 Statement statement = connection.createStatement(); // 创建语句对象 ResultSet resultSet = statement.executeQuery("SELECT * FROM your_table LIMIT 10"); // 查询数据 while (resultSet.next()) { // 遍历结果集 System.out.println(resultSet.getString(1)); // 输出第一列数据 } resultSet.close(); // 关闭结果集 statement.close(); // 关闭语句 connection.close(); // 关闭连接 } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码展示了如何通过 JDBC 连接到 Hive 数据库并执行简单的查询操作。此代码可以作为 Kettle 脚本任务的一部分运行。 #### 4. 数据抽取与转换 在完成 Hive 数据源的配置后,可以设计数据接口以实现数据抽取和转换[^3]。例如: - 定义数据抽取的方:是全量抽取还是增量抽取? - 设置同步频率:如每天凌晨 1 点开始执行任务。 - 配置异常处理机制:如发生网络中断时重试 3 次。 #### 5. 测试连接 在 Kettle 中完成配置后,点击“测试连接”按钮以验证是否能够成功连接到 Hive 数据库。如果连接失败,请检查以下内容: - Hive JDBC 驱动是否正确安装。 - Hive Server 是否正常运行。 - 配置的主机名、端口、用户名和密码是否正确。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值