精华内容
下载资源
问答
  • 判断一个数据序列是否构成一个小根堆 实现代码: #include //判断一个数据序列是否构成一个小根堆 bool IsMinHeap(int A[],int len){//将二叉树结点序列看成一个循序表 int i; if(len%2==0){//结点个数偶数...

    判断一个数据序列是否构成一个小根堆

    实现代码:
    #include <stdio.h>//判断一个数据序列是否构成一个小根堆 
    bool IsMinHeap(int A[],int len){//将二叉树结点序列看成一个循序表 
    	int i;
    	if(len%2==0){//结点个数为偶数个时的判断 
    		if(A[len/2]>A[len])
    			return false;
    		for(i=len/2-1;i>=1;i--){
    			if(A[i]>A[2*i]||A[i]>A[2*i+1])
    				return false;
    		}
    	}else if(len%2==1){//结点个数为奇数个时的判断
    		for(i=len/2-1;i>=1;i--){
    			if(A[i]>A[2*i]||A[i]>A[2*i+1])
    				return false;
    		}
    	}else{
    		return true;
    	}
    	
    } 
    int main(int argc, char *argv[])
    {
    	int a[8]={0,3,6,7,8,9,10,11};//为了方便从数组下标为1的结点开始比较 
    	printf("%d\n",IsMinHeap(a,7));
    	return 0;
    }
    输出结果:
    1
    请按任意键继续. . .



    展开全文
  • 1、如何判断一个序列是不是? 把这个序列看成是数组型的二叉树,如果节点是i,左子数是2*i,右子数是2*i+1。 2、分为最大和最小。 (1)最大 以{100,60,70,50,32,65}例分析: 最大中所有父节点...
    1、如何判断一个序列是不是堆?
    把这个序列看成是数组型的二叉树,如果根节点是i,左子数是2*i,右子数是2*i+1
    2、堆分为最大堆和最小堆
    (1)最大堆
    以{100,60,70,50,32,65}为例分析:
    最大堆中所有父节点都比左子树大,比右子数小,画成堆形式如下: 

    (2)最小堆
    比如{32,50,60,70,100,65}为例分析:
    最小堆中所有父节点都比左子树小,比右子数大,画成堆形式如下: 


    展开全文
  • 前言 关于选择排序 正文 题目一 判断一个数据序列是否构成一个小根堆 ...判断是否为小根堆,只要满足双亲结点的左右孩子均小于该结点即可。 //数组a[1...n] bool judge(int a[],int n){ if(n%2==0){

    前言

    关于选择排序

    正文

    题目一

    判断一个数据序列是否构成一个小根堆
    前提需知,一个“堆”是一颗“完全二叉树”(编号从1…n的完全二叉树存储结构的数列)
    故利用以下性质解题:

    1. 当i>1时,结点i的双亲结点为i/2(向下取整)
    2. 当2i<=n时,结点i的左孩子编号为2i
    3. 当2i+1<=n时,结点i的右孩子编号为2i+1

    判断是否为小根堆,只要满足双亲结点的左右孩子均小于该结点即可。

    //数组a[1...n]
    bool judge(int a[],int n){
    	if(n%2==0){			//len为偶数,有一个单分支
    		for(A[n/2]>A[n])//判断单分支
    		    return false;
    		for(i=n/2-1;i>=0;i--)//判断所有双分支
    		    if(A[i]>A[2*i]||A[i]>A[2*i+1])
    			   return false;		 
    	}
    	else{
    		for(i=len/2;i>=0;i--){//len为奇数,没有单分支结点
    			if(A[i]>A[2*i]||A[i]>A[2*i+1])//判断所有双分支结点
    			   return false;
    		}
    	}
    	return true;
    } 
    

    题目二

    编写简单选择排序的单链表版(不带头结点)

    void sort(linklist *L){
    	 linkNode * p,*pre,*max,*maxpre;
    	 linlist *h=L;
    	 L=NULL;
    	 while(h!=NULL){				//持续扫描原链表
    	 	p=max=h;pre=maxpre=NULL;
    	    while(p!=NULL){
    	    	if(p->data>max->data){  //找到更大的,记忆它和它的前驱
    			   max=p;
    			   maxpre=pre;
    	     	}
    			 pre=p;					//继续寻找
    			 p=p->next;
    		}
    		if(s==h)					//最大结点在原链表前段
    		   h=h->next;
    		else
    		   maxpre->next=max->next;//最大结点在原链表内
    		   max->next=L;//头插	
    		   L=max; 
    	 }
    }
    
    展开全文
  • 判断一组序列数据是否

    千次阅读 2018-03-30 14:17:00
    判断一组序列数据是否是: 把序列看成数组型的二叉树,如果节点是i,左子树是2*i,右子树是2*i+1最大:...EG:判断一下序列是否为堆A(10,50,80,30,60,20,15,18)B(10,18,15,20,50,80,30,60)C(10,15,18,50,80,...

    判断一组序列数据是否是堆:

    把序列看成数组型的二叉树,如果根节点是i,左子树是2*i,右子树是2*i+1
    最大堆:所有父节点都比左子树、右子树大
    最小堆:所有父节点都比左子树、右子树小
    如果这组序列式符合最大堆或最小堆,则是堆,否则不是

    EG:
    判断一下序列是否为堆
    A(10,50,80,30,60,20,15,18)
    B(10,18,15,20,50,80,30,60)
    C(10,15,18,50,80,30,60,20)
    D(10,30,60,20,15,18,50,80)
    将ABCD看成二叉树为:

    转载于:https://www.cnblogs.com/Mr-Wenyan/p/8675921.html

    展开全文
  • 设计一个算法,判断一个数据序列是否构成一个小根堆。 算法思想: 将顺序表L[1...n]视一个完全二叉树,扫描所有分支结点,遇到孩子结点的关键字小于根结点的关键字时,返回false,扫描完后,返回true。 bool ...
  • 判断

    2019-05-04 16:33:34
    题目描述:编写程序判断以下给出的整数序列是否为最小堆。 输入: 第一行是元素的个数n; 第二行是n个整数序列。 输出: 如果是小根堆,输出Yes,否者输出No。 样例输入: 10 100 86 48 73 35 39 42 57 66 21 样例...
  • 判断(1098)

    2019-10-05 17:46:44
    编写程序判断以下给出的整数序列是否为最小堆。 Description 第一行是元素的个数n; 第二行是n个整数序列。 Input 如果是小根堆,输出Yes,否者输出No。 Output 1 2 3 ...
  • SWUST OJ 1098: 判断

    2021-05-12 12:26:31
    编写程序判断以下给出的整数序列是否为最小堆。 输入 第一行是元素的个数n; 第二行是n个整数序列。 输出 如果是小根堆,输出Yes,否者输出No。 样例输入 10 100 86 48 73 35 39 42 57 66 21 样例输出 No ...
  • 编写程序判断以下给出的整数序列是否为最小堆。 输入 第一行是元素的个数n; 第二行是n个整数序列。 输出 如果是小根堆,输出Yes,否者输出No。 样例输入 10 100 86 48 73 35 39 42 57 66 21 样例输出 ...
  • 二叉搜索树后续遍历序列的特点:比节点的一连续数字(左子树),比节点大的一连续数字(右子树),节点数字。 退出条件:如果begin>end 则返回true. 找到比节点大的第一个数字,就是右子
  • PAT A1147 Heaps (30 分)

    2019-09-08 17:46:13
    题目大意:给出完全二叉树的层序遍历序列判断这棵完全二叉树是否是最大或最小,并输出后序遍历的结果。 以下标0为根节点,下标k的节点的左孩子下标是 2*k+1, 右孩子下标是 2*k+2,最后一个非叶子节点的...
  • 题意 :依次读入一个整数序列,当读到奇数时,输出此时数列的中位数。 分析 :暴力是不可能暴力的...当目前序列为奇数时 :读入下一个数字时判断是否大于大根堆的堆顶,如果大于堆顶就插入到小根堆,如果小于堆顶就...
  • 给定各不相同的非负整数层序遍历序列,判断序列是否为堆结构,若是最大则输出Max Heap,若是最小则输出Min Heap,若不满足结构则输出Not Heap,下一行输出后序遍历序列 算法思路 根据的定义,左右子树的...
  • ARTS挑战第九周

    2021-05-10 00:17:38
    703. 数据流中的第 K 大元素 使用一个大小K的小根堆,对于新来的元素,如果堆没有满,则直接入堆。否则判断是否大于堆顶,大于则替换堆顶。返回堆顶元素。题目简单,主要想验证下自己写的堆。 1143. 最长公共子...
  • PAT A1147 Heaps (30分)

    2020-09-12 16:33:20
    前言 传送门 ...要求输出m棵树的后序遍历序列,并且判断是否,以及是大顶堆还是顶堆 思路: 完全二叉树的性质,对结点i,它的左子树节点2*i,右子树节点2*i+1。 (i为数组下标,且从1开始
  • 2-3 将 {28, 15, 42, 18, 22, 5, 40} 逐个按顺序插入到初始空的最小堆(小根堆)中。则该树的前序遍历结果: 2-4给定初始待排序列{ 15,9,7,8,20,-1,4 }。如果希尔排序第一趟结束后得到序列为{ 15,-1,4...
  • 同时,在将复制的结点的random指向原始链表结点的random的next的时候,需要先判断一下,原始链表结点的next是否为None,不为None再指向。 面试题27:二叉搜索树与双向链表:按照左右子树分治,递归实现。的左边连接...
  • 第0章 Java程序设计基础 1 【习0.1】 实验0.1 哥德巴赫猜想。...【习9.1】 判断一个数据序列是否为最小序列。 32 【习9.2】 归并两条排序的单链表。 32 【习9.3】 说明二叉排序树与的差别。 34
  • 数据结构与算法.xmind

    2020-06-19 17:04:23
    判断该栈是否为空 只要栈顶和栈底是同一指向,那么该栈就为空 出栈 将栈顶的元素的指针(指向下一个节点)赋值给栈顶指针(完成出栈) 清空栈 栈顶指向栈底,就清空栈了 队列 往往实现...
  • 1697. 检查边长度限制的路径是否存在 1737. 满足三条件之一需改变的最少字符数 1834. 单线程 CPU 困难难度题目合集 困难难度题目从类型上说多是: 图 设计题 游戏场景题目 中等题目的 follow up 从解法...
  • 例如,长度8的线性表关键码序列为:[6,13,27,30,38,46,47,70],被查元素38,首先将与线性表的中间项比较,即与第4个数据元素30相比较,38大于中间项30的值,则在线性表[38,46,47,70]中继续查找;...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    2、实现1所要求的代码后,运行设计好的代码,将以下的几组整数序列建成搜索二叉树,并记录下它们的前序遍历序列和后序遍历序列: a. 1、3、5、7、9; b. 1、13、35、13、27; c. 50、25、78、13、44、...
  • C语言通用范例开发金典.part2.rar

    热门讨论 2012-08-31 14:18:18
    范例1-51 判断双向链表是否为空 126 ∷相关函数:ListEmpty函数 1.3.21 双向链表元素值的查询 129 范例1-52 双向链表元素值的查询 129 ∷相关函数:GetElemP函数 1.3.22 稀疏矩阵的建立 136 范例1-53 稀疏矩阵...
  • ``序列点" 是什么? o 4.8 那么, 对于 a[i] = i++; 我们不知道 a[] 的哪一个分量会被改写,但 i 的确会增加 1, 对吗? o 4.9 ++i 和 i++ 有什么区别? o 4.10 如果我不使用表达式的值, 我应该用 ++i 或 i++ 来自增...
  • C语言通用范例开发金典.part1.rar

    热门讨论 2012-08-31 14:09:26
    范例1-51 判断双向链表是否为空 126 ∷相关函数:ListEmpty函数 1.3.21 双向链表元素值的查询 129 范例1-52 双向链表元素值的查询 129 ∷相关函数:GetElemP函数 1.3.22 稀疏矩阵的建立 136 范例1-53 稀疏矩阵...
  • 范例1-51 判断双向链表是否为空 126 ∷相关函数:ListEmpty函数 1.3.21 双向链表元素值的查询 129 范例1-52 双向链表元素值的查询 129 ∷相关函数:GetElemP函数 1.3.22 稀疏矩阵的建立 136 范例1-53 稀疏矩阵...
  • C 开发金典

    2013-06-20 16:20:03
    范例1-51 判断双向链表是否为空 126 ∷相关函数:ListEmpty函数 1.3.21 双向链表元素值的查询 129 范例1-52 双向链表元素值的查询 129 ∷相关函数:GetElemP函数 1.3.22 稀疏矩阵的建立 136 范例1-53 稀疏矩阵...
  • 序列点” 是什么? . . . . . . . . . 15 3.8 那么, 对于a[i] = i++; 我们不知道a[] 的哪一个分量会被改写,但i 的确会增加1, 对吗? . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.9 ++i 和i++ 有什么...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    序列点” 是什么? . . . . . . . . . 15 3.8 那么, 对于a[i] = i++; 我们不知道a[] 的哪一个分量会被改写,但i 的确会增加1, 对吗? . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.9 ++i 和i++ 有什么...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

判断序列是否为小根堆