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

王道:OJ15

课时15作业

Description

读取10个元素 87  7 60 80 59 34 86 99 21  3,然后建立二叉查找树,排序后输出3  7 21 34 59 60 80 86 87 99,针对有序后的元素,存入一个长度为10的数组中,通过折半查找找到21的下标(下标为2),然后输出2

Input 

标准输入读取10个元素 87  7 60 80 59 34 86 99 21  3

Output 

中序遍历输出有序,每个元素占3个字母位置
3  7 21 34 59 60 80 86 87 99

接着输出2即可(就是元素21的下标),注意2直接在行首输出即可。

#include <stdio.h>
#include <stdlib.h>
typedef int BiElemType;
typedef struct BiTNode
{BiElemType data;struct BiTNode* L_chid;struct BiTNode* R_chid;
}BiTNode,*BiTree;
typedef struct tag//辅助队列
{BiTree q;//存储树对应的结点的地址struct tag *q_next;
}tag_t,*ptag_t;
typedef int ElemType;
typedef struct {ElemType * elem;//存,申请的空间的首地址int tab_length;//存储动态数组里元素的个数
}SSTable;
void ST_Init(SSTable &t,int len)
{t.tab_length=len+1;//多一个空间用于存储哨兵,是为了后面判断简化条件t.elem=(ElemType*) malloc(sizeof (ElemType));
}
void InOrder(BiTree t)
{if(t){InOrder(t->L_chid);printf("%3d",t->data);InOrder(t->R_chid);}
}void Print_table(SSTable t)
{int i;for ( i = 1; i < t.tab_length; i++) {printf("%3d",t.elem[i]);}printf("\n");
}
int Binary_select(SSTable t,ElemType e)
{int low=0,high=t.tab_length-1,mid;while (low<=high)//避免两个指针重合的时候,循环结束还没有确定i{mid=(high+low)/2;if(t.elem[mid]==e){return mid;} else if(t.elem[mid]<e){low=mid+1;} else{high=mid-1;}}}
void Print(SSTable t)
{int i;for ( i = 0; i < t.tab_length; i++) {printf("%3d",t.elem[i]);}printf("\n");
}
int compare(const void* left,const void *right)
{//排序,返回任意两个元素的差值,从小到大排序return *(ElemType*)left-*(ElemType*)right;
}
int main() {BiTree tree=NULL;//永远指向根结点,初始化树结点,为零才可以放入跟结点BiTree p_new;//指向当前放入的结点//队列ptag_t q_head=NULL,q_tail=NULL,q_new=NULL,q_cur;//q_cur用于指向当前的父结点,填满孩子再移动BiElemType c;SSTable t;ST_Init(t,10);int i=1;while (i<11){scanf("%d",&c);t.elem[i]=c;p_new=(BiTree) calloc(1,sizeof (BiTNode));//申请空间用于树结点p_new->data=c;q_new=(ptag_t) calloc(1,sizeof (tag_t));q_new->q=p_new;//存储当前结点的地址if(NULL==tree){//此时队列是空的,存入根结点tree=p_new;q_head=q_new;q_tail=q_new;q_cur=q_new;} else{//当前尾指针(指向上一个结点)的next指向当前结点,再移动尾指针到当前结点q_tail->q_next=q_new;q_tail=q_new;if (NULL==q_cur->q->L_chid){//q_cur->q表示上一个结点q_cur->q->L_chid=p_new;} else if(NULL==q_cur->q->R_chid){q_cur->q->R_chid=p_new;q_cur=q_cur->q_next;}}i++;}
//    InOrder(tree);
//    printf("\n");
//    Print_table(t);qsort(t.elem,t.tab_length,sizeof (ElemType),compare);Print_table(t);int e=21;//scanf("%d",&e);int f=Binary_select(t,e)-1;if(f){printf("%d",f);}return 0;
}

http://www.lryc.cn/news/327309.html

相关文章:

  • 【案例·查】数据类型强制转换,方便查询匹配
  • spring boot3自定义注解+拦截器+Redis实现高并发接口限流
  • 使用certbot为网站启用https
  • Unity 背包系统中拖拽物体到指定位置或互换位置效果的实现
  • iOS客户端自动化UI自动化airtest+appium从0到1搭建macos+脚本设计demo演示+全网最全最详细保姆级有步骤有图
  • 每周编辑精选|在线运行 Deepmoney 金融大模型、AI 偏好等多个优质数据集上线
  • C++多重继承与虚继承
  • 请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能?
  • TouchGFX之Button
  • 计算机组成原理 — 指令系统
  • 使用easyYapi生成文档
  • 蓝桥杯练习题总结(三)线性dp题(摆花、数字三角形加强版)
  • Elasticsearch(15) multi_match的使用
  • nodejs的线程模型和libuv库的基本使用
  • Uni-app/Vue/Js本地模糊查询,匹配所有字段includes和some方法结合使用e
  • 深度学习pytorch——激活函数损失函数(持续更新)
  • 《苹果 iOS 应用开发与分发的关键问题解析》
  • 爱上数据结构:顺序表和链表
  • python知识点总结(十)
  • 【Python】探索 Python 编程世界:常量、变量及数据类型解析
  • vue页面实现左右div宽度,上下div高度分割线手动拖动高度或者宽度自动变化,两个div宽度或者高度拉伸调节,实现左右可拖动改变宽度的div内容显示区
  • 知攻善防应急靶场-Linux(1)
  • ffmpeg命令行
  • VMware虚拟机更换引导顺序
  • RAFT:让大型语言模型更擅长特定领域的 RAG 任务
  • Stable Diffusion 本地训练端口与云端训练端口冲突解决办法
  • C++学习day1
  • openGauss CM
  • 北斗短报文+4G应急广播系统:实时监控 自动预警 保护校园安全的新力量
  • 2024河北石家庄矿业矿山展览会|河北智慧矿山展会|河北矿博会