当前位置: 首页 > wzjs >正文

网站开发知识付费网络优化app哪个好

网站开发知识付费,网络优化app哪个好,wordpress 置顶 不显示,网站优化怎么做目录 二叉搜索树(BST)实现 1.1 顺序存储实现 1.2 链式存储实现查找算法 2.1 顺序查找 2.2 折半查找 2.3 哈希查找总结与应用场景代码示例与完整实现 一、二叉搜索树(BST)实现 1. 顺序存储实现 BST的顺序存储基于完全二叉树的特…

目录

  1. 二叉搜索树(BST)实现
    1.1 顺序存储实现
    1.2 链式存储实现
  2. 查找算法
    2.1 顺序查找
    2.2 折半查找
    2.3 哈希查找
  3. 总结与应用场景
  4. 代码示例与完整实现

一、二叉搜索树(BST)实现

1. 顺序存储实现

BST的顺序存储基于完全二叉树的特性,通过数组模拟树的结构。

核心代码
#include <stdio.h>
#include <stdbool.h>
#define MaxSize 100
typedef int ElemType;typedef struct Tree {ElemType data[MaxSize]; // 数据域bool flag[MaxSize];     // 标记节点是否有效
} Tree;// 初始化
void InitTree(Tree *t) {for (int i = 0; i < MaxSize; i++) {t->flag[i] = false;}
}// 插入节点
bool insert_node(Tree *t, ElemType e) {int i = 1; // 根节点从1开始while (i < MaxSize) {if (!t->flag[i]) { // 找到空位置插入t->data[i] = e;t->flag[i] = true;return true;} else {if (t->data[i] > e) {i = 2 * i;      // 左子树方向} else if (t->data[i] < e) {i = 2 * i + 1; // 右子树方向} else {return false; // 重复值不插入}}}return false;
}// 删除节点(复杂度较高)
void del_node(Tree *t, int n) {// 实现逻辑:递归删除叶子节点// 代码见知识库完整示例
}// 中序遍历打印
void print_tree(Tree *t) {for (int i = 1; i < MaxSize; i++) {if (t->flag[i]) {printf("data[%d]=%d\n", i, t->data[i]);}}
}

2. 链式存储实现

链式BST通过动态节点实现,支持高效插入、删除和遍历。

核心代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>typedef int ElemType;
typedef struct BitNode {ElemType data;struct BitNode *lchild, *rchild;
} BitNode, *BitTree;// 新建节点
BitNode* newnode(ElemType e) {BitNode *node = (BitNode*)malloc(sizeof(BitNode));node->data = e;node->lchild = node->rchild = NULL;return node;
}// 插入节点
bool insert_node(BitTree *t, BitNode *new) {if (*t == NULL) { // 空树直接插入根节点*t = new;return true;}BitNode *p = *t;while (1) {if (new->data < p->data) { // 左子树方向if (p->lchild == NULL) {p->lchild = new;return true;}p = p->lchild;} else if (new->data > p->data) { // 右子树方向if (p->rchild == NULL) {p->rchild = new;return true;}p = p->rchild;} else {return false; // 重复值不插入}}
}// 中序遍历
void MidOrder(BitNode *root) {if (root == NULL) return;MidOrder(root->lchild);printf("%d ", root->data);MidOrder(root->rchild);
}// 删除节点(递归实现)
BitNode* del_node(BitTree t, ElemType e) {if (t == NULL) return NULL;if (e < t->data) { // 左子树查找t->lchild = del_node(t->lchild, e);} else if (e > t->data) { // 右子树查找t->rchild = del_node(t->rchild, e);} else { // 找到节点if (t->lchild == NULL && t->rchild == NULL) { // 叶子节点free(t);return NULL;} else if (t->lchild != NULL) { // 替换为左子树最大值BitNode *tmp = t->lchild;while (tmp->rchild != NULL) tmp = tmp->rchild;t->data = tmp->data;t->lchild = del_node(t->lchild, tmp->data);} else { // 替换为右子树最小值BitNode *tmp = t->rchild;while (tmp->lchild != NULL) tmp = tmp->lchild;t->data = tmp->data;t->rchild = del_node(t->rchild, tmp->data);}}return t;
}

二、查找算法

1. 顺序查找

原理:逐个遍历数组,直到找到目标或遍历结束。

bool find(int *a, int size, int dat) {for (int i = 0; i < size; i++) {if (a[i] == dat) return true;}return false;
}

2. 折半查找

前提:数组必须有序。

bool half_find(int *a, int size, int dat) {int start = 0, end = size - 1, mid;while (start <= end) {mid = (start + end) / 2;if (a[mid] == dat) return true;else if (a[mid] > dat) end = mid - 1;else start = mid + 1;}return false;
}

3. 哈希查找

原理:通过哈希函数将数据映射到哈希表中,解决冲突(如链地址法)。

核心代码
#include <stdio.h>
#include <stdlib.h>
#define HASH_GEN 15 // 哈希表大小typedef struct Inode {int data;struct Inode *next;
} Inode;typedef struct {Inode *hash[HASH_GEN]; // 哈希表数组int count;             // 元素个数
} HashTable;// 哈希函数(取模法)
int hash_code(int dat) {return dat % HASH_GEN;
}// 初始化哈希表
void init_hash(HashTable *h) {for (int i = 0; i < HASH_GEN; i++) {h->hash[i] = NULL;}h->count = 0;
}// 插入节点
bool insert_hash_node(HashTable *h, int dat) {Inode *new = (Inode*)malloc(sizeof(Inode));new->data = dat;new->next = NULL;int index = hash_code(dat);new->next = h->hash[index];h->hash[index] = new;h->count++;return true;
}// 查找节点
bool find_hash_node(HashTable *h, int dat) {int index = hash_code(dat);Inode *p = h->hash[index];while (p != NULL) {if (p->data == dat) return true;p = p->next;}return false;
}

三、总结与应用场景

BST的优缺点

特性顺序存储链式存储
插入/删除效率低(需递归查找空位)高(动态分配,直接操作指针)
空间利用率低(需预留大数组空间)高(仅分配必要节点空间)
适用场景完全二叉树(如堆结构)动态扩展的BST(如数据库索引)

查找算法对比

算法时间复杂度适用场景
顺序查找O(n)无序小规模数据
折半查找O(log n)有序且静态数据
哈希查找平均O(1)高频查询、大规模数据

四、代码示例与完整实现

1. BST顺序存储完整示例

int main() {Tree tree;InitTree(&tree);// 插入数据for (int i = 0; i < 10; i++) {int n;scanf("%d", &n);insert_node(&tree, n);}print_tree(&tree);// 删除根节点del_node(&tree, 1);print_tree(&tree);return 0;
}

2. 链式BST与哈希查找完整示例

int main() {BitTree root = NULL;HashTable hast_list;init_hash(&hast_list);// 插入BST节点for (int i = 0; i < 100; i++) {BitNode *node = newnode(i);insert_node(&root, node);}// 插入哈希表节点for (int i = 0; i < 100; i++) {insert_hash_node(&hast_list, i);}// 测试查找if (find_hash_node(&hast_list, 121)) {printf("哈希查找成功\n");}// 中序遍历BSTMidOrder(root);return 0;
}

http://www.dtcms.com/wzjs/250217.html

相关文章:

  • 梁平网站建设安卓优化大师2023
  • 很多国外ip访问网站百度移动端点赞排名软件
  • 网站建设好处b站怎么推广自己的视频
  • 如何使用好单库选品库做网站长沙在线网站的目标客户
  • 西安大网站建设公司排名seo排名优化资源
  • 想给大学做网站如何创建网站教程
  • 长沙网站制作哪里好最经典最常用的网站推广方式
  • 做视频搬运哪个网站最赚钱百度教育官网
  • php+做网站网址域名ip查询
  • wordpress 律师事务所模板seo整站优化吧
  • 企业营销网站建设策划书企业网站制作步骤
  • 电商网站开发建设搜索引擎营销策划方案
  • 网站分为几种百度网首页登录入口
  • 做网站 需要 域名 空间短网址
  • 湖南土特产销售网网站建设制作奶糖 seo 博客
  • 用asp做网站营销和销售的区别
  • 以下哪个域名是做游戏网站的百度识图以图搜图
  • 一台主机做两个网站推广app接单网
  • 如何用腾讯云做网站百度指数首页
  • 婚庆公司服务内容长沙seo男团
  • 网页制作与网站建设宝典pdf营销型网站建设套餐
  • 武汉哪里做网站好新闻发稿发布平台
  • 免费的b2b网站可以做外贸找公司做网站多少钱
  • 最专业的佛山网站建设价格seo网站优化培训找哪些
  • 网站站群建设方案企业内训机构
  • cad做彩图那个网站应用好用湖南长沙疫情最新消息
  • 海南网站建设优化排名产品互联网营销推广
  • 网站用vps做dns站长工具流量统计
  • wordpress搬家到本地温州seo团队
  • 做推广网站需要商标吗成都seo顾问