学号                     姓名                   博客名

2103101018         罗玛                   桃花岛-戌时

题目:折半查找法

实验算法描述:

用Low、High和Mid表示待查找区间的下界、上界和中间位置指针,初值为Low=1,High=n。

(1)取中间位置Mid:Mid-(Low+High)y/2J;

(2)比较中间位置记录的关键字与给定的K值:

①相等:查找成功;

②大于:待查记录在区间的前半段,修改上界指针:High=Mid-1,转(1);

③小于:待查记录在区间的后半段,修改下界指针:Low=Mid+1,转(1);

直到越界(Low>High),查找失败 。

代码:

#include<stdio.h>
int search(int A[],int n,int key)
{int low=0,high=n-1,mid;if(A[low]==key)return low;else if(A[high]==key)return high;else{while(low<=high){mid=(low+high)/2;if(A[mid]==key)return mid;  if(key>A[mid])low=mid+1;   elsehigh=mid-1;    }}return -1;
}
main()
{int A[10]={2,3,5,7,9,11,12,15,19,22},i,n,addr;printf("A[10]:");for(i=0;i<10;i++)printf("%d ",A[i]); printf("\n输入要查找元素:");scanf("%d",&n);     addr=search(A,10,n);       if(addr!=-1)       printf("%d是数组中的第%d个元素",n,addr+1);else        printf("A数组中无%d",n);return 0;
}

结果:

题目:线性表的插入与删除

实验算法描述 :​

插入元素操作:

如果插入的位置不合理,抛出异常​。

如果线性表的长度大于数组的长度,抛出异常或者动态增加容量。

从最后一个元素向前遍历到第i个位置,分别将它们后移一个位置。

把元素插入第i个位置。

表长+1。

删除元素操作:

​如果删除位置不正确,抛出异常。

取出删除元素。

如果删除的不是最后一个位置从删除元素位置起向后遍历到最后一个元素位置,将它们往前移动一个位置。

表长-1。

代码:

#include <stdio.h>
#include <stdlib.h>#define LIST_INIT_SIZE 5
#define LISTINCREMENT 5  #define OK 1
#define ERROR 0typedef struct SqList
{int *elem;int len;int size;
};int InitList_Sq(struct SqList *L)
{L->elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));if (!L->elem)exit(0);L->len = 0;L->size = LIST_INIT_SIZE;return OK;
}int ListInsert_Sq(struct SqList *L, int i, int e)
{if (i < 1 || i > L->len + 1)return ERROR;if (L->len >= L->size){int *newbase = (int *)realloc(L->elem, (LIST_INIT_SIZE + LISTINCREMENT) * sizeof(int));if (!newbase)exit(0);L->size += LISTINCREMENT;}int *q = &(L->elem[i - 1]);int *p;for (p = &L->elem[L->len - 1]; p >= q; --p)*(p + 1) = *p;*q = e;++L->len;return OK;
}int ListDelete_Sq(struct SqList *L, int i, int *e)
{if (i < 1 || i > L->len)return ERROR;int *p = &(L->elem[i - 1]);*e = *p;int q = *L->elem + L->len - 1;for (++p; *p <= q; ++p)*(p - 1) = *p;L->len--;return OK;
}void ListShow_Sq(struct SqList *L, char *s)
{printf("%s", s);int i;for (i = 0; i < L->len; i++){printf("%d ", L->elem[i]);}putchar('\n');
}void main()
{int i;struct SqList L;InitList_Sq(&L);int n;printf("预先输入的原始数据个数是:");scanf("%d", &n);printf("请线性表中%d个原始数据:", n);for (i = 0; i < n; i++){int t;scanf("%d", &t);ListInsert_Sq(&L, L.len + 1, t);}ListShow_Sq(&L, "原始数据:");int s, v;printf("请输入数据插入的位置s 和数值v :");scanf("%d%d", &s, &v);printf("%s", ListInsert_Sq(&L, s, v) ? "插入成功.\n" : "插入失败.\n");ListShow_Sq(&L, "插入后:");printf("请输入数据删除的位置s :");scanf("%d", &s);if (ListDelete_Sq(&L, s, &v))printf("删除成功.删除的数据是:%d\n", v);elseprintf("删除失败.位置有误.");ListShow_Sq(&L, "删除后:");system("pause");
}

结果:

折半查找和线性表的插入与删除实验相关推荐

  1. java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)

    1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...

  2. 数据结构—线性表顺序存储插入和删除操作

    线性表的操作:1.InitList(*L):初始化操作,建立一个空的线性表L 2.ListEmpty(L):判断线性表是否为空,如果为空,返回true,否则返回false 3.ClearList(*L ...

  3. 顺序表的插入和删除操作

    C语言线性表的插入和删除操作 C语言数据结构的学习之线性表的插入与删除操作 C语言线性表的插入和删除操作 一.插入操作 插入操作的时间复杂度分析: 二.删除操作 删除操作的时间复杂度分析: 查找操作 ...

  4. 在已经排好序的线性表中插入一个数,还是升序

    在已经排好序的线性表中插入一个数,还是升序 #include<stdio.h> #define Maxsize 100 typedef struct s {int elem[Maxsize ...

  5. 顺序表的插入与删除java_C++实现顺序表的常用操作(插入删出查找输出)

    实现顺序表的插入,删除,查找,输出操作在C语言中经常用到.下面小编给大家整理实现代码,一起看下吧 代码如下所示: #include using namespace std; #define MAXSI ...

  6. 递增有序顺序表的插入 (20分) 实验目的:1、掌握线性表的基本知识 2、深入理解、掌握并灵活运用线性表。3、熟练掌握线性表的存储结构及主要运算的实现 已知顺序表L递增有序,将X插入到线性表的适当位置

    递增有序顺序表的插入 (20分) 实验目的:1.掌握线性表的基本知识 2.深入理解.掌握并灵活运用线性表.3.熟练掌握线性表的存储结构及主要运算的实现 已知顺序表L递增有序,将X插入到线性表的适当位置 ...

  7. 2 顺序表的插入,删除,查找操作(详细)

    一 顺序表的结构体定义和函数声明 #include<iostream> using namespace std; #define ElemType int  // 自定义 #define ...

  8. 6-1 线性表元素的区间删除 (10 分)

    ** 6-1 线性表元素的区间删除 (10 分) ** 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接 ...

  9. 查找:线性表的C语言代码实现(顺序查找、折半查找)

    目录 一.线性表结构 两个类的定义 二.线性表的初始化以及根据输入的元素建立线性表 1.线性表的初始化,初始化一个空的线性表 2.根据用户需求,向线性表中添加元素 三.顺序查找  Search1函数( ...

最新文章

  1. 编写高质量代码改善C#程序的157个建议——建议86:Parallel中的异常处理
  2. linux网站爬取,Kali下httrack 爬取网站页面
  3. 简明python教程怎么买-简明python教程在哪买!《简明python教程》 下载地址?
  4. Selenium操作页面元素
  5. centos7下安装libiconv失败
  6. Oracle IO问题解析(一)
  7. win10+Linux双系统安装
  8. 用php写一个单例类,PHP里的单例类写法实例
  9. vue音乐播放器demo,主要是模仿慕课音乐播放器教程制作的一个小demo
  10. 如何调用TUIO中的源码
  11. 服务实例是否宕机的后台检查线程任务
  12. 如何快速查看颜色的RGB或者十六进制代码(QQ截图,最方便)
  13. 抖音多闪背后的AI和社交
  14. MetaMask10.6.1点击切换本地网络LocalHost:8545没反应
  15. Android4.1
  16. 信息学奥赛一本通(c++):2066:【例2.3】买图书
  17. surreal number应对不平等博弈
  18. 关于如何连接网络打印机
  19. 使用java求解根号2
  20. H.264/H.265/H.266三代视频编码的图像划分

热门文章

  1. 性价比高的骨传导蓝牙耳机有哪些,分享几款高性能的骨感传导耳机
  2. redmi 23.8 英寸电竞显示器 评测
  3. Java反射03 : 获取Class的注解、修饰符、父类、接口、字段、构造器和方法
  4. java 微博第三方登录_java第三方登录(微博,QQ)详细代码
  5. php微信跳转外部浏览器打开,微信中打开链接,自动打开外部浏览器打开指定URL页面...
  6. java网络编程socket\server\TCP笔记(转)
  7. explan各项说明
  8. 一个木函软件测试计划书,创建一个名为Rational的类,进行分数运算。编写一个程序测试该类。要求使用C++语言...
  9. vs2012环境下,cocos2dx3.4 c++项目调用Lua的环境搭建
  10. 使用 LSTM 进行多变量时间序列预测