精华内容
下载资源
问答
  • 154个元素组成有序表进行二分法查找,可能的比较次数为 正确答案: B C D 你的答案: B (错误) 10 8 4 1 添加笔记 求解答(6) 收藏 纠错 折半查找过程可用二叉树...

    在154个元素组成有序表进行二分法查找,可能的比较次数为

    正确答案: B C D   你的答案: B (错误)

    10
    8
    4
    1


    折半查找过程可用二叉树来描述,把有序表中间位置上的结点作为树的根结点,左子表和右子表分别对应树的左子树和右子树。折半查找的过程就是走一条从根节点到被查结点的一条路径,比较的次数就是该路径中结点的个数,即,该结点在树中的层数。 所以该题可以转换为求有154个结点的二叉树有几层,小于等于这个层数的数值就是答案。 又知,深度为K的二叉树最多有2的K次方-1个结点,深度为7的二叉树最多有127个结点,深度为8的二叉树最多有255个结点,所以154个结点的二叉树有8层。

    展开全文
  • 递增有序顺序插入元素的算法

    千次阅读 多人点赞 2019-03-23 11:10:28
    题目: 设顺序va中的数据元素递增有序,现将x插入到顺序...3.查找到x的位置之后,将a.length-i-1个元素向后移动一个位置,从最后一个元素开始向后移动一个位置。 4.将元素x插入到位置i中。 算法: Statue ...

    题目:

    设顺序表va中的数据元素递增有序,现将x插入到顺序表的适当位置,以保持该顺序表依然递增有序。

    算法思想:

     1.判断该顺序表是否已满

     2.查找x在顺序表a.elem[a.length]中的插入位置 i。

     3.在查找到x的位置之后,将a.length-i-1个元素向后移动一个位置,从最后一个元素开始向后移动一个位置。

     4.将元素x插入到位置i中。

    算法:

    Statue insertOrderList(SqList &a, ElemType x) {

        //顺序表中的元素依次递增有序,该算法将元素x插入到顺序表中,使得该顺序表依然递增有序

       //

        //先判断是否已满

       if (a.length == a.MAXSIZE) {

            return OVERFLOW;

       } else {

            i = a.length - 1;

            while (i >= 0 && x < a.elem[i]) {

                i--;

            }

            for (j = a.length - 1; j >= i + 1; j--) {//从最后一个元素开始向后移动一个位置

                a.elem[j + 1] = a.elem[j];

            }

            a.elem[i+1] = x;

            a.length++;

            return OK;

      }

    }

    展开全文
  • 编写一个函数,利用二分查找算法在一个有序表中插入一个关键字k,并保持表的有序性。 分析 先在有序表中利用二分查找算法查找关键字值等于或小于k的结点,m指向正好等于k的结点或l指向关键字正好大于k的结点,然后...

    题目

    编写一个函数,利用二分查找算法在一个有序表中插入一个关键字k,并保持表的有序性。

    分析

    先在有序表中利用二分查找算法查找关键字值等于或小于k的结点,m指向正好等于k的结点或l指向关键字正好大于k的结点,然后采用移动法插入k结点即可。

    本题的难点就是如何利用二分查找算法找到合适的插入位置。

    有两种情况:第一种是有序表中没有等于关键字k的结点,寻找大于k的结点即可;第二种是有序表中存在等于关键字k的结点,寻找等于k的结点即可。

    图解如下:

    将两种情况用同一部分代码来处理,定义一个标志位变量flag,用来记录是否有等于关键字k的情况,初始为0表示没有等于关键字k的情况,如果有则将flag置为1,然后退出循环,最终根据标志位flag来判断插入位置。

    代码

    核心代码:

    /* 使用二分查找在顺序表中插入元素k */ 
    void insertK(int nums[],int n,int k){
    	int mid;// 记录中间下标 
    	int low=0,high=n-1;
    	int flag=0;// 标志,用来记录是否有等于k的值 
    	int pos;// 定义的变量,为插入的位置 
    	while(low<=high&&flag==0){// 循环当low>high时跳出循环 
    		mid=(low+high)/2;
    		if(nums[mid]==k){
    			flag=1;// 如果发现有关键字等于k,则将标志flag置为1,退出循环然后插入k 
    		}else if(nums[mid]>k){
    			high=mid-1;
    		}else if(nums[mid]<k){
    			low=mid+1;
    		}
    	}
    	/* 确定插入位置 */ 
    	if(flag==1){// 如果flag为1则发现序列中有关键字等于k,则使插入位置等于mid
    		pos=mid; 
    	}else{// 如果flag为0则表示序列中没有与关键字k相等的值,则插入位置为low 
    		pos=low;
    	}
    	/* 插入关键字k */
    	for(int i=n-1;i>=pos;i--){
    		nums[i+1]=nums[i];
    	} 
    	nums[pos]=k;
    }

    完整代码如下:

    #include<stdio.h>
    
    /* 打印数组 */ 
    void printArr(int nums[],int n){
    	printf("\n");
    	for(int i=0;i<n;i++){
    		printf("%d\t",nums[i]);
    	}
    	printf("\n");
    }
    
    /* 使用二分查找在顺序表中插入元素k */ 
    void insertK(int nums[],int n,int k){
    	int mid;// 记录中间下标 
    	int low=0,high=n-1;
    	int flag=0;// 标志,用来记录是否有等于k的值 
    	int pos;// 定义的变量,为插入的位置 
    	while(low<=high&&flag==0){// 循环当low>high时跳出循环 
    		mid=(low+high)/2;
    		if(nums[mid]==k){
    			flag=1;// 如果发现有关键字等于k,则将标志flag置为1,退出循环然后插入k 
    		}else if(nums[mid]>k){
    			high=mid-1;
    		}else if(nums[mid]<k){
    			low=mid+1;
    		}
    	}
    	/* 确定插入位置 */ 
    	if(flag==1){// 如果flag为1则发现序列中有关键字等于k,则使插入位置等于mid
    		pos=mid; 
    	}else{// 如果flag为0则表示序列中没有与关键字k相等的值,则插入位置为low 
    		pos=low;
    	}
    	/* 插入关键字k */
    	for(int i=n-1;i>=pos;i--){
    		nums[i+1]=nums[i];
    	} 
    	nums[pos]=k;
    }
    
    int main(){
    	int nums[]={1,2,3,4,5,6,7};
    	int n=7;
    	int k=5;
    	insertK(nums,n,k);// 插入k
    	printArr(nums,n);// 打印数组 
    	
    	return 0;
    }

    运行结果:

    展开全文
  • 有序表

    万次阅读 2018-03-03 10:25:05
    有序表的定义所谓有序表,是指这样的线性表,其中所有元素以递增或递减方式有序排列。为了简单,假设有序表元素是以递增方式排列。从中看到,有序表和线性表中元素之间的逻辑关系相同,其区别是运算实现的不同。...

    一、有序表的定义

    所谓有序表,是指这样的线性表,其中所有元素以递增或递减方式有序排列

    为了简单,假设有序表元素是以递增方式排列。从中看到,有序表和线性表中元素之间的逻辑关系相同,其区别是运算实现的不同。

    若以顺序表、单链表存储有序表,会发现基本运算算法中只有ListInsert()算法与前面对应的运算有所差异,其余都是相同的。

    有序顺序表的ListInsert()算法如下:

    void ListInsert(SqList *&L,ElemType e)
    {  int i=0,j;
       while (i<L->length && L->data[i]<e)
    i++; //查找值为e的元素
       for (j=ListLength(L);j>i;j--)
    L->data[j]=L->data[j-1]; //将data[i..n]后移一个位置
       L->data[i]=e;
       L->length++; //有序顺序表长度增1

    }


    有序单链表的ListInsert()的算法如下:

    void ListInsert(LinkList *&L,ElemType e)
    {  LinkList *pre=L,*p;
       while (pre->next!=NULL && pre->next->data<e)
    pre=pre->next; //查找插入节点的前驱节点*pre
       p=(LinkList *)malloc(sizeof(LinkList));
       p->data=e; //创建存放e的数据节点*p
       p->next=pre->next; //在*pre节点之后插入*p节点
       pre->next=p;

    }

    二、有序表的归并算法 

    例1   假设有两个有序表LA和LB表示,设计一个算法,将它们合并成一个有序表LC。要求不破坏原有表LA和LB。

    采用顺序表存放有序表时归并算法如下:

    void UnionList(SqList *LA,SqList *LB,SqList *&LC)
    {  int i=0,j=0,k=0;//i、j分别为LA、LB的下标,k为LC中元素个数
       LC=(SqList *)malloc(sizeof(SqList)); //建立有序顺序表LC
       while (i<LA->length && j<LB->length)
       { if (LA->data[i]<LB->data[j])//LA元素小于LB
    {  LC->data[k]=LA->data[i];
       i++;k++;//记录LA下标,LC元素+1
    }
    else //LA->data[i]>LB->data[j]
    {  LC->data[k]=LB->data[j];
       j++;k++;//记录LB下标,LC元素+1
    }
       }   

       while (i<LA->length) //LA尚未扫描完,将其余元素插入LC中
       { LC->data[k]=LA->data[i];
    i++;k++;
       }
       while (j<LB->length) //LB尚未扫描完,将其余元素插入LC中
       { LC->data[k]=LB->data[j];
    j++;k++;
       }
       LC->length=k;
    }

    采用单链表存放有序表时归并算法如下:

    void UnionList1(LinkList *LA,LinkList *LB,LinkList *&LC)
    {  LinkList *pa=LA->next,*pb=LB->next,*r,*s;
       LC=(LinkList *)malloc(sizeof(LinkList));//创建LC的头节点
       r=LC; //r始终指向LC的尾节点
       while (pa!=NULL && pb!=NULL)
       { if (pa->data<pb->data)
    {  s=(LinkList *)malloc(sizeof(LinkList));//复制节点
       s->data=pa->data;
       r->next=s;r=s; //采用
    尾插法将*s插入到LC中
       pa=pa->next;
    }
    else
    {  s=(LinkList *)malloc(sizeof(LinkList));//复制节点
       s->data=pb->data;
       r->next=s;r=s; //采用
    尾插法将*s插入到LC中
       pb=pb->next;
    }

       }

      while (pa!=NULL)
      {  s=(LinkList *)malloc(sizeof(LinkList)); //复制节点
         s->data=pa->data;
         r->next=s;r=s; //采用尾插法将*s插入到LC中
         pa=pa->next;
      }
      while (pb!=NULL)
      {  s=(LinkList *)malloc(sizeof(LinkList)); //复制节点
         s->data=pb->data;
         r->next=s;r=s; //采用尾插法将*s插入到LC中
         pb=pb->next;
      }
      r->next=NULL //尾节点的next域置空

    }

    两种算法的时间复杂度都为O(m+n),空间复杂度都为O(m+n)。

    展开全文
  • 个有序顺序的合并 C++ 无技术含量 数据结构题目
  • LeetCode第二三题-合并n个有序链表

    千次阅读 2019-04-28 15:13:05
    问题简介:合并k个已排序的链表并将其作为一个排序链表返回. 举例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6 链表结构: /**链表结构 * Definition ...
  • #include  int main()  ... /* 定义一个含有9个数据的数组 */ int i,m,n;  printf("请输入一个数据:");  scanf("%d",&n);/* 输入一个新的数据 */ for (i=0;i {  if (n { m=i; break; } /* 用
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    发现网上很多Java面试题都没有答案,所以花了...、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    有序表 D. 单链表 二、判断题 1. 数据元素是数据的最小单位。( ) 【北京邮电大学 1998 、1(2分)】【青岛大学 2000 、1 (1分)】 【上海交通大学 1998 、1】 【山东师范大学 2001 、1 (2分)】 2. ...
  • 使用C语言创建顺序

    千次阅读 多人点赞 2019-09-24 17:02:55
    C语言顺序 C语言顺序 #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 #define MAXSIZE 5 typedef char ElemType ; //声明顺序的结构体类型 typedef struct{ ElemType...
  • 否则利用中间位置记录将分成前、后两,如果中间位置记录的关键字大于查找关键字,则进一步查找前,否则进一步查找后一子。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子不存在为止...
  • 思路:在有序表中,取中间值为比较对象,如果给定的值和中间值的关键字相等,则查找成功;若给定值小于中间记录的关键字,则中间记录的左半区继续查找;若给定的值大于中间值的关键字,则中间记录的右半区继续...
  • 有序表的折半查找

    千次阅读 2013-12-26 19:54:17
    折半查找又称二分查找,其基本思想是,顺序存储的有序序列中要查找某个关键字,首先用有序序列的中间元素和这关键字作比较,如果小于关键字,则在上半部分查找,如果大于关键字,则在下半部分查找,如果等于...
  • 1. 这本书对Python的知识点的描述很详细,而且排版看的很舒服. 2. 几例题:假装自己从零开始学,将一些有代表性、有意思的例题抽取出来. 3. 还有自己对部分课后复习题,全部课后上机实践题的解题思路
  • 1.宏定义数组元素个数为ARRNUM=10 函数原型声明void AscendSorting(int a[]); 函数原型声明int Bisearch(int x,int *a[],int left, int right); 2.设计函数 2.1设计函数void AscendSorting(int a[]) 2.1.1函数功能 ...
  • 每日算法(五)-java给定一个有序数组,删除其中重复元素,只保留一个,并返回新数组的长度 Example 2: Given nums = [0,0,1,1,1,2,2,3,3,4], Your function should return length = 5, with the first five ...
  • 有序表的查找(折半查找)

    千次阅读 2015-12-28 13:09:10
    有序表:对于以数组方式存储的数据,如果已经按其关键字值的大小顺序排列好,则称为有序数组或有序表。  对有序表可以采用折半查找(binary search),又称二分查找。  设有序数组r中每记录的关键字值按升序...
  • Python语言中的缩进程序中长度统一且强制使用,只要统一即可,不一定是4空格(尽管这是惯例) IPO模型指:Input Process Output 字符串的正向递增和反向递减序号体系:正向是从左到右,0到n-1,反向是从右到左...
  • 上次我们介绍了图的关键路径算法的实现,这次介绍查找这一章的第一个程序:顺序表和有序表(静态查找表)查找算法的实现。还是老规矩:程序码云上可以下载。 地址:...
  • 集合

    千次阅读 多人点赞 2019-04-28 20:25:50
    集合1 集合概念2 集合特点3 集合的... //添加一个元素 void addAll();//相当于把两个集合合并成一个集合 集合的删除 void Clare();//清空集合中所有的元素 boolean remove();//删除一个元素 boolean removeAll();...
  • 什么是数据结构?

    千次阅读 2019-06-19 20:25:39
    什么是数据结构?数据结构是什么? 数据结构是计算机存储、组织数据的方式...数据结构是指相互之间存在着种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。也就是说,数组结构指的是数据集合及...
  • 字母 # 创作者:光树 b = ['a', 'b', 'c', 'n', 'o', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'd', 'e', 'p', 'q', 'r', 's', 't'] print(sorted(b[0:10]), sorted(b[-11:-1], reverse=True), sep="\n") ...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    章 测试基础 7 什么是软件测试: 7 ★软件测试的目的、意义:(怎么做好软件测试) 7 3.软件生命周期: 7 第二章 测试过程 8 1.测试模型 8 H模型: 8 V模型 9 2.内部测试 10 3外部测试: 10 验收测试:(系统...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    内容及步骤: 1、 设有一个线性表(e0,e1,e2,e3,…,en-2,en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原地址内容置换为(en-1,en-2,…,e3,...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠章的内容就完全掌握C#语言是不可能的,...
  • 不善于解释,代码下面,function函数是主要实现的函数,希望能帮到你#include<malloc.h> #include<assert.h> #include<stdio.h> #define SUCCESS 1 #define FAIL 0 #define Elemtype int #...
  • printf("请输入第%d个元素",i); e = getchar(); s = (DLinkList)malloc(sizeof(DListNode)); s->data = e; s->next = q->next; q->next = s; s->prior = q; head->prior = s; q = s; getchar();...
  • HTML标签常用标签

    千次阅读 多人点赞 2017-02-23 11:33:58
    1、 ...文档的第行,位于 标签之前。 声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。 HTML 4.01 中有三种 声明 :1)HTML 4.01 Strict 该 DTD 包含所有
  • HTML学习

    千次阅读 多人点赞 2016-10-08 17:31:27
    HTML简介什么是 HTML?HTML 是用来描述网页的种语言。 HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是种编程语言,而是种标记语言 (markup language) 标记语言是一套标记标签 (markup tag...
  • 史上最全面Java面试汇总(面试题+答案)

    万次阅读 多人点赞 2018-07-06 14:09:25
    JAVA面试精选【Java基础第部分】 JAVA面试精选【Java基础第二部分】 JAVA面试精选【Java基础第三部分】 JAVA面试精选【Java算法与编程】 JAVA面试精选【Java算法与编程二】 Java高级工程师—面试(1) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,663
精华内容 16,665
关键字:

在一个十元素的有序表