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

Day05_数据结构(二叉树快速排序插入排序二分查找)

01.思维导图

02.二叉树的前序遍历,中序遍历,后序遍历

main.c

#include "tree.h"
int main()
{T_p T=(T_p)create_tree();printf("前序遍历:\n");pre_show(T);printf("\n");printf("中序遍历:\n");mid_show(T);printf("\n");printf("后序遍历:\n");tail_show(T);printf("\n");return 0;
}

tree.c

#include "tree.h"
//1、创建二叉树
T_p create_tree()
{//定义一个char类型的变量,接收用户输入的内容创建结点char data;scanf(" %c",&data);T_p T;//判断用户输入是否为#//如果是#说明没有该节点if(data=='#')   //递归出口{return NULL;}T = create_node(data);//结点的左子树,也是一个二叉树,也需要创建T->lchild = create_tree();//创建结点的右子树T->rchild = create_tree();return T;
}
//2、创建结点
T_p create_node(char data)
{T_p new = (T_p)malloc(sizeof(tree_node));if(new==NULL){return -1;}new->data = data;new->lchild = NULL;new->rchild = NULL;return new;
}
//3、前序遍历 根左右
void pre_show(T_p T)
{if(T==NULL){return;}//输出根节点的数据printf("%c",T->data);//左子树也要前序遍历pre_show(T->lchild);//右子树也要前序遍历pre_show(T->rchild);
}
//4、中序遍历 左根右
void mid_show(T_p T)
{if(T==NULL){return;}mid_show(T->lchild);printf("%d",T->data);mid_show(T->rchild);
}
//5、后序遍历
void tail_show(T_p T)
{if(T==NULL){return;}tail_show(T->lchild);tail_show(T->rchild);printf("%d",T->data);
}

tree.h

#ifndef __TREE_H__
#define __TREE_H__
#include <stdio.h>
#include <stdlib.h>
typedef struct tree_node
{char data;struct tree_node *lchild;struct tree_node *rchild;
}tree_node,*T_p;
//1、创建二叉树
T_p create_tree();
//2、创建结点
T_p create_node(char data);
//3、前序遍历 根左右
void pre_show(T_p T);
//4、中序遍历 左根右
void mid_show(T_p T);
//5、后序遍历
void tail_show(T_p T);#endif

03.快速排序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//1.一次快排需要返回最后基准的位置
int on_sort(int *p,int low,int high)
{int base=*(p+low);while(high>low){//high一侧的数据比基准更大//因为内存循环中每次high和low的值都会改变所以必须加到循环里面while(*(p+high)>=base&&high>low){high--;}*(p+low)=*(p+high);while(*(p+low)<=base&&high>low){low++;}*(p+high)=*(p+low);}*(p+low)=base;//将基准放在中间位置return low;
}
void sort(int *p,int low,int high)
{int ret;if(high>low){ret=on_sort(p,low,high);sort(p,low,ret-1);sort(p,ret+1,high);}
}
int main(int argc, const char *argv[])
{int arr[]={50,36,66,76,36,12,25,95};on_sort(arr,0,sizeof(arr)/sizeof(int)-1);printf("一次快排的结果:");for(int i=0;i<sizeof(arr)/sizeof(int);i++){printf("%-3d",arr[i]);}sort(arr,0,sizeof(arr)/sizeof(int)-1);printf("\n");printf("完全快排的结果:");for(int i=0;i<sizeof(arr)/sizeof(int);i++){printf("%-3d",arr[i]);}	printf("\n");return 0;
}

04.插入排序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void insert_sort(int *p,int len)
{int i,j,temp;//外层循环获取要插入的每一个元素for(i=1;i<len;++i){//把每次插入的数据保存temp=p[i];//内层循环找到元素应该插入的位置//因为是顺序结构,插入的同时需要保证后面的位置不变//需要将插入位置后面的元素后移动//后移的就是比我插入元素更大的数for(j=i;j>0&&p[j-1]>temp;j--){p[j]=p[j-1];}//退出循环说名找到零要插入的位置p[j]=temp;}
}int main(int argc, const char *argv[])
{int arr[]={76,36,12,25,95};int len=sizeof(arr)/sizeof(arr[0]);insert_sort(arr,len);printf("输出插入排序的数组:");for(int i=0;i<len;i++){printf("%-3d",arr[i]);}printf("\n");return 0;
}

05.二分查找/折半查找

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int half_search(int *p,int start,int end,int key)
{int mid;while(end>=start){//1.找到中间值,中间值的下标mid=(start+end)/2;if(p[mid]>key){end=mid-1;//更新序列的终止位置}else if(p[mid]<key){start=mid+1;//更新序列的起始值}else if(p[mid]==key){return mid;}}return -1;                                              }
int main(int argc, const char *argv[])
{int arr[]={50,60,78,56,23,89,156};int end=sizeof(arr)/sizeof(arr[0])-1;int ret=half_search(arr,0,end,110);printf("输在数组中的下标为:%d\n",ret);return 0;
}

06.哈希查找

相关文章:

  • AT8236-单通道直流有刷电机驱动芯片
  • 开源 Arkts 鸿蒙应用 开发(五)控件组成和复杂控件
  • MySQL: Invalid use of group function
  • 算法第37天| 完全背包\518. 零钱兑换 II\377. 组合总和 Ⅳ\57. 爬楼梯
  • 力扣网C语言编程题:接雨水(动态规划实现)
  • 基于 Celery 的微服务通信模式实践
  • Python设计模式终极指南:18种模式详解+正反案例对比+框架源码剖析
  • Gradle打包流程
  • 129. 求根节点到叶节点数字之和 --- DFS +回溯(js)
  • 优化TCP/IP协议栈与网络层
  • Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(AOF篇)
  • MO+内核32位单片机的PY32F030单片机开发板
  • Gazebo 仿真环境系列教程(二):在 Gazebo 中构建自己的机器人
  • Spring MVC详解
  • Leetcode hot100 Java刷题
  • Loggers 配置解析(log4j.xml)
  • Vue3 + Axios + Ant Design Vue 请求封装详解教程(含 Token 鉴权、加密、下载)
  • 经典俄罗斯方块微信小游戏流量主小程序开源
  • Vue.js 计算属性详解:核心概念、最佳实践与注意事项
  • 宇鹿家政服务系统小程序ThinkPHP+UniApp
  • 网建设门户网站/中山做网站推广公司
  • 常用ppt模板网站/万网域名注册官网查询
  • 个人网站开论坛/百度做推广一般要多少钱
  • 长沙网站收录/百度网盘登陆
  • 腾脉网建站/seo网络营销推广公司深圳
  • 网站建设厂家/app推广团队