以C语言的实现随机产生 n 个正整数列,存放在顺序表 L 中(n 为奇数 13),输出 L。以表 L 的第一个整数为根结点,建立二叉查找树 B1,统计树 B1 的成功 ASL(平均查找长 度)和失败 ASL。
时间: 2023-06-14 15:08:13 浏览: 82
下面是使用C语言实现随机产生n个正整数列,存放在顺序表L中,并输出L的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void InitList(SqList *L) {
int i;
srand((unsigned)time(NULL));
L->length = MAXSIZE / 2 + 1;
for (i = 0; i < L->length; i++) {
L->data[i] = rand() % 100;
}
}
void PrintList(SqList L) {
int i;
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SqList L;
InitList(&L);
printf("随机生成的正整数列为:\n");
PrintList(L);
return 0;
}
```
接下来是以表L的第一个整数为根结点,建立二叉查找树B1,并统计树B1的成功ASL和失败ASL的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
typedef struct BiTNode {
int data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void InitList(SqList *L) {
int i;
srand((unsigned)time(NULL));
L->length = MAXSIZE / 2 + 1;
for (i = 0; i < L->length; i++) {
L->data[i] = rand() % 100;
}
}
void PrintList(SqList L) {
int i;
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
void InsertBST(BiTree *T, int key) {
if (!(*T)) {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = key;
(*T)->lchild = (*T)->rchild = NULL;
} else {
if (key < (*T)->data) {
InsertBST(&(*T)->lchild, key);
} else if (key > (*T)->data) {
InsertBST(&(*T)->rchild, key);
}
}
}
int SearchBST(BiTree T, int key) {
int count = 0;
while (T && T->data != key) {
count++;
if (key < T->data) {
T = T->lchild;
} else {
T = T->rchild;
}
}
if (T) {
return count;
} else {
return -1;
}
}
int main() {
SqList L;
InitList(&L);
printf("随机生成的正整数列为:\n");
PrintList(L);
BiTree B1 = NULL;
int i, sum = 0;
for (i = 0; i < L.length; i++) {
InsertBST(&B1, L.data[i]);
}
for (i = 0; i < L.length; i++) {
sum += SearchBST(B1, L.data[i]);
}
double successASL = (double)sum / L.length;
printf("树B1的成功ASL为:%.2lf\n", successASL);
sum = 0;
for (i = 0; i < L.length; i++) {
sum += SearchBST(B1, rand() % 100);
}
double failASL = (double)sum / L.length;
printf("树B1的失败ASL为:%.2lf\n", failASL);
return 0;
}
```
阅读全文