已知线性表的关键字集合 { 21,11, 13,25,48,6,39,83,30,96,108 },散列函数为 h(key)=key%11,采用分离链接法解决冲突。则成功查找的平均查找长度为 __
时间: 2023-04-30 16:00:24 浏览: 921
根据散列函数,将关键字集合分别散列到以下位置:
21 -> 10
11 ->
13 -> 2
25 -> 3
48 -> 4
6 -> 6
39 -> 6
83 -> 6
30 -> 8
96 -> 8
108 -> 9
可以看出,有三个关键字散列到了位置6,因此需要使用链表来解决冲突。将它们放入同一个链表中,得到以下散列表:
-> 11
1 -> 空
2 -> 13
3 -> 25
4 -> 48
5 -> 空
6 -> 6 -> 39 -> 83
7 -> 空
8 -> 30 -> 96
9 -> 108
10 -> 21
假设要查找关键字为25的元素,首先计算它的散列值h(25)=3,然后在位置3的链表中查找,找到了该元素,查找长度为1。
同理,可以计算出每个关键字的散列值和查找长度,得到以下表格:
关键字 | 散列值 | 查找长度
------|------|-------
21 | 10 | 1
11 | | 1
13 | 2 | 1
25 | 3 | 1
48 | 4 | 1
6 | 6 | 1
39 | 6 | 2
83 | 6 | 3
30 | 8 | 1
96 | 8 | 2
108 | 9 | 1
成功查找的平均查找长度为:
(1+1+1+1+1+1+2+3+1+2+1)/11 = 1.45
因此,成功查找的平均查找长度为1.45。
相关问题
C语言数据结构线性表实现集合A=A∪B
可以使用循环遍历B中的元素,判断是否在A中出现过,如果没有则将其加入A中。具体实现可以使用数组或链表等数据结构。以下是使用数组实现的示例代码:
```c
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int length;
} List;
void unionList(List *A, List B) {
int i, j;
for (i = 0; i < B.length; i++) {
for (j = 0; j < A->length; j++) {
if (B.data[i] == A->data[j]) {
break;
}
}
if (j == A->length) {
A->data[A->length++] = B.data[i];
}
}
}
```
其中,List为线性表结构体,data数组存储元素,length表示线性表长度。unionList函数实现了集合的并操作,将B中的元素加入A中。
用c语言在一个以顺序表形式管理的线性表的集合中增加一个线性表
答:要在一个以顺序表形式管理的线性表的集合中增加一个线性表,可以采用以下步骤:
1. 首先,需要定义一个结构体来表示线性表,结构体中包含一个数组用于存储数据元素,以及一个整型变量表示线性表的长度。
typedef struct {
int data[MAX_LEN];
int length;
} SqList;
2. 接下来,需要定义一个数组来存储多个线性表,并且记录当前的线性表数量和可以存储的最大线性表数目。可以使用动态内存分配来获取足够的存储空间。
#define MAX_LIST_NUM 100
SqList *list[MAX_LIST_NUM];
int list_num = 0;
int list_max = MAX_LIST_NUM;
3. 当需要增加一个线性表时,可以调用一个函数来完成创建操作,并返回指向该线性表的指针。新线性表的长度初始化为0。
SqList *create_list() {
if (list_num >= list_max) {
printf("Error: Out of memory!\n");
return NULL;
}
SqList *new_list = (SqList *)malloc(sizeof(SqList));
new_list->length = 0;
list[list_num++] = new_list;
return new_list;
}
4. 最后,可以通过调用create_list函数来创建一个新线性表,并在返回的指针上进行插入、删除、查找等操作。
SqList *new_list = create_list();
if (new_list != NULL) {
new_list->data[new_list->length++] = 1;
new_list->data[new_list->length++] = 2;
new_list->data[new_list->length++] = 3;
}