请用c语言写出该代码:建立一个顺序表,用顺序查找的方法对其实施查找; 再建立一个有序表,用折半查找的方法对其实施查找; 最后建立一个二叉排序树,根据给定值对其实施查找;
时间: 2024-03-16 22:45:52 浏览: 17
好的,这里是使用 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表结构体
#define MAXN 100
typedef struct {
int data[MAXN];
int length;
} SeqList;
// 定义二叉排序树结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 顺序查找
int seq_search(SeqList* L, int x) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == x) return i;
}
return -1;
}
// 折半查找
int bin_search(SeqList* L, int x) {
int left = 0, right = L->length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (L->data[mid] == x) return mid;
else if (L->data[mid] > x) right = mid - 1;
else left = mid + 1;
}
return -1;
}
// 二叉排序树查找
int bst_search(TreeNode* root, int x) {
if (!root) return 0;
if (root->val == x) return 1;
else if (root->val > x) return bst_search(root->left, x);
else return bst_search(root->right, x);
}
// 二叉排序树插入
TreeNode* bst_insert(TreeNode* root, int x) {
if (!root) {
root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = x;
root->left = NULL;
root->right = NULL;
}
else if (root->val > x) root->left = bst_insert(root->left, x);
else root->right = bst_insert(root->right, x);
return root;
}
int main() {
// 建立一个顺序表
SeqList L;
L.length = 10;
for (int i = 0; i < L.length; i++) L.data[i] = i;
printf("%d\n", seq_search(&L, 5));
// 建立一个有序表
SeqList M;
M.length = 10;
for (int i = 0; i < M.length; i++) M.data[i] = i;
printf("%d\n", bin_search(&M, 5));
// 建立一个二叉排序树
TreeNode* root = NULL;
for (int i = 0; i < L.length; i++) root = bst_insert(root, L.data[i]);
printf("%d\n", bst_search(root, 5));
return 0;
}
```
实现思路与之前的 C++ 代码相同,只是语法略有不同。