#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100 /* 存储空间初始分配量 */
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
int F[100]; /* 斐波那契数列 */
/* 无哨兵顺序查找,a为数组,n为要查找的数组个数,key为要查找的关键字 */
int Sequential_Search(int *a,int n,int key)
{
int i;
for(i=1;i<=n;i++)
{
if (a[i]==key)
return i;
}
return 0;
}
/* 有哨兵顺序查找 */
/*
它的主要作用是:在查找循环中"监视"下标变量j是否越界。一旦越界(即j=0),因为R[0].key和自己比较,循环判定条件。
不成立使得查找循环结束,从而避免了在该循环内的每一次均要检测j是否越界(即省略了循环判定条件"j>=1")。
*/
int Sequential_Search2(int *a,int n,int key)
{
int i;
a[0]=key;
i=n;
while(a[i]!=key)
{
i--;
}
return i;
}
/* 折半查找 */
//要求:待查找的序列是有序的
//当key<a[mid]的时候,high=mid-1的原因是进一步缩小关键字可能存在的区域
//当key>a[mid]的时候,low=mid+1的原因是进一步缩小关键字可能存在的区域
int Binary_Search(int *a,int n,int key)
{
int low,high,mid;
low=1; /* 定义最低下标为记录首位 */
high=n; /* 定义最高下标为记录末位 */
while(low<=high)
{
mid=(low+high)/2; /* 折半 */
if (key<a[mid]) /* 若查找值比中值小 */
high=mid-1; /* 最高下标调整到中位下标小一位 */
else if (key>a[mid])/* 若查找值比中值大 */
low=mid+1; /* 最低下标调整到中位下标大一位 */
else
{
return mid; /* 若相等则说明mid即为查找到的位置 */
}
}
return 0;
}
/* 插值查找 */
int Interpolation_Search(int *a,int n,int key)
{
int low,high,mid;
low=1; /* 定义最低下标为记录首位 */
high=n; /* 定义最高下标为记录末位 */
while(low<=high)
{
//只和折半查找差在这一句
//这句代码在数学上被优化了
mid=low+ (high-low)*(key-a[low])/(a[high]-a[low]); /* 插值 */
if (key<a[mid]) /* 若查找值比插值小 */
high=mid-1; /* 最高下标调整到插值下标小一位 */
else if (key>a[mid])/* 若查找值比插值大 */
low=mid+1; /* 最低下标调整到插值下标大一位 */
else
return mid; /* 若相等则说明mid即为查找到的位置 */
}
return 0;
}
/* 斐波那契查找 */
int Fibonacci_Search(int *a,int n,int key)
{
int low,high,mid,i,k=0;
low=1; /* 定义最低下标为记录首位 */
high=n; /* 定义最高下标为记录末位 */
while(n>F[k]-1)
k++;
for (i=n;i<F[k]-1;i++)
a[i]=a[n];
while(low<=high)
{
mid=low+F[k-1]-1;
if (key<a[mid])
{
high=mid-1;
k=k-1;
}
else if (key>a[mid])
{
low=mid+1;
k=k-2;
}
else
{
if (mid<=n)
return mid; /* 若相等则说明mid即为查找到的位置 */
else
return n;
}
}
return 0;
}
int main(void)
{
int i,result;
int arr[MAXSIZE]={0,1,16,24,35,47,59,62,73,88,99};
result=Sequential_Search(arr,10,62);
printf("Sequential_Search:%d \n",result);
result=Sequential_Search2(arr,10,62);
printf("Sequential_Search2:%d \n",result);
result=Binary_Search(arr,10,62);
printf("Binary_Search:%d \n",result);
result=Interpolation_Search(arr,10,62);
printf("Interpolation_Search:%d \n",result);
F[0]=0;
F[1]=1;
for(i = 2;i < 100;i++)
{
F[i] = F[i-1] + F[i-2];
}
result=Fibonacci_Search(arr,10,62);
printf("Fibonacci_Search:%d \n",result);
return 0;
}
相关推荐
Kinect V1结构光激光散斑原理及样式
对 intel realsense F200 和 Kinect V1的coding pattern原理进行调研,知二者都使用light coding的方式,该方法与传统的coded structure light不同:传统编码结构光(空间编码,时间编码)最终使用的是三角测量的原理计算深度信息;light coding通过投射具有高度伪随机性的激光散斑,会随着不同距离变换不同
数据结构:假设有一个带头结点的单链表L,每个结点值由单个数字、小写字母和大写字母构成。设计一个算法将其拆分成3个带头结点的单链表L1、L2和L3,L1包含L中的所有数字结点,L2包含L中的所有小写字母
假设有一个带头结点的单链表L,每个结点值由单个数字、小写字母和大写字母构成。设计一个算法将其拆分成3个带头结点的单链表L1、L2和L3,L1包含L中的所有数字结点,L2包含L中的所有小写字母结点,L3包含L中的所有大写字母结点。c语言
BEVFusion实战:从零搭建LiDAR-Camera融合的3D目标检测环境(附避坑指南)
本文提供了BEVFusion实战指南,详细讲解如何从零搭建LiDAR-Camera融合的3D目标检测环境。内容涵盖环境配置、数据预处理、模型训练与性能优化等关键步骤,并附有实用的避坑技巧,帮助开发者高效部署这一先进的BEV感知算法。
数据结构与算法之单链表
链表链表的介绍单链表(带头节点)添加(创建) 链表的介绍 链表是有序的列表,它在内存中的存储如下 链表是以节点的方式来存储,是链式存储 每个节点包含data域,next域:指向下一个节点 如图: 发现链表的个个节点不一定是连续存储 链表分带头节点的链表和没有头结点的链表,根据需求来确定 单链表(带头节点) 使用一个带head头的单向链表实现排行榜管理 完成对英雄人物的增删改查操作 ...
从拆解到调试:用CS5523改造旧款车载显示屏的完整记录(MIPI转eDP方案)
本文详细记录了使用CS5523芯片将旧款车载显示屏从MIPI接口改造为eDP驱动的完整过程。通过对比LT8911等芯片,选择CS5523实现低功耗、高兼容性的显示升级,涵盖硬件改造、固件配置及调试技巧,最终成功提升显示效果200%。
从零到一:鲲鹏920服务器上的DeepSeek模型部署全流程解析
本文详细解析了在华为鲲鹏920服务器上部署DeepSeek模型的全流程,包括环境准备、模型服务框架部署、性能优化及生产环境方案。通过ARM架构优化和量化技术,显著提升模型推理效率,适用于企业级AI应用场景,助力国产化技术落地。
4.数据结构_单链表(带头结点)
#include<iostream> #include<stdio.h> #include<stdlib.h> using namespace std; typedef struct LNode{ int data; //存放的数据元素 struct LNode *next;//指针指向下一个结点 }LNode,*LinkList; //LNode *和 LinkList是相同的 //初始化一个空的单链表(带头结点) bool InitList(
保姆级教程:用MS建完分子模型,如何一键转成LAMMPS能用的data文件?
本文详细介绍了如何将Materials Studio(MS)构建的分子模型转换为LAMMPS可用的data文件的全流程。重点讲解了力场选择、环境配置、转换命令参数解析及常见问题排查,帮助初学者快速掌握MS与LAMMPS之间的数据转换技巧,特别适合计算材料学领域的研究人员。
初学单链表,分享两道作业题(C语言)
【题目1】有一个带头结点的单链表L,其数据元素递增有序。插入任一数据e使其元素仍然有序。 代码实现: #include "stdio.h" #include "stdlib.h" #define error -1 #define ok 1 typedef struct LNode{ int data; struct LNode *next; }LNode; void create_list(LNode *L) { printf("Please input numbers until '9999' is
U-net复现pytorch版本 以及制作自己的数据集并训练
GitHub链接: https://github.com/milesial/Pytorch-UNet 论文链接:
远程声控系统(MATLAB代码见优快云资源)
远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,完成不同的控制动作。 二、问题分解与解决思路 2.1 系统设计 实验中以汉语数字语音1~9作为指令,数字语音“1”代表一号指令,数字语音“2”代表二号指令,依次类推。发送端发出语音“1”,发送端对应的数字语音文件为“1b.wav”,通过信源编码对语音进行压缩编码,然后进行信道编码并进行基
数据结构练习题----单链表篇(一)
第一题 有一个带头结点的单链表L,设计一个算法使其元素递增有序 思路 先将链表的数据复制到数组中,然后再数组中使用八大排序中的任意一种进行排序,然后再使用尾插法插入到链表当中 Void sort(LinkList &L){ LNode *p=L->next,*pre; LNode *r=p->next,* p->next = NULL; p=r; while(pre->next!=NULL&&pre->next->data<
如何调试10G/25G以太网IP自协商/Link Training
如果是40G/50G, 100G以太网,选的是多通道的IP,务必保证两端的通道0是正确对接上的,因为在做自协商的时候,以太网只使用通道0,其它通道需在自协商完成后再加入工作。b. 自协商的工作完全由IP自动完成的,所以只要配置没问题,你只需要耐心等待就可以看到自协商的完成,以an_good_check为标志,并且进入下一步linktraining。c. 在LT的过程中,首先你要等到IP能够锁定LT帧,即frame_lock拉高,然后你就可以进行你自己的LT算法了,与AN不同LT是由客户手动完成的。
【数据结构】-单链表(带头结点)
单链表-带头结点1.头文件及类型定义2.单链表结点类型定义3.函数声明4.基本操作4.1 初始化单链表4.2 判空4.3 插入操作4.3.1 按位插入4.3.2 指定结点插入4.3.2.1 指定结点后插4.3.2.2 指定结点前插4.3.2.2.1 前插法1(时间复杂度为O(n))4.3.2.2.2 前插法2(时间复杂的为O(1))4.4 删除操作4.4.1 按位删除4.4.2 指定结点删除4.4.2.1 删除法1(时间复杂度为O(n))4.4.2.2 删除法2(时间复杂度为O(1))4.5 查找操作4.5
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
C语言(每日一题)——数据结构——创建一条带头结点的单链表(详细过程)
代码】C语言(每日一题)——数据结构——创建一条带头结点的单链表(详细过程)
SIMATIC S7-1200, S7-1500 PID 控制[手册]
SIMATIC S7-1200, S7-1500 PID 控制[手册]
实验3-带头结点的单链表
实验1: 1 /*编写函数void delx(linklist head, datatype x),删除带头结点单链表head中第一个值为x 的结点。 2 并构造测试用例进行测试。 3 */ 4 /**********************************/ 5 /*文件名称:lab3_01.c */ 6 /**********...
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
通过带头结点的单链表L实现从尾到头反向输出每个结点的值
个人代码如下,采用头插法建立一个新链表,时间复杂度O(N),空间复杂度O(N)。 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode* next; }Node,*Link; //初始化一个带头结点的链表 void Init(Link& link) { link = (Link)malloc(sizeof(Node)); li
【数据结构】设一个带头结点的单链表L,大部分元素为正数,少数为负数,编写函数,采用高效的算法调整链表,实现将负数结点移到链表尾部,并返回调整后链表中第一个负数结点的位置。
1. 算法思路 使用尾插法实现该要求。实现按步骤为: 定义工作指针tail和minus,分别指向正数的最后一个结点以及负数的头结点。 循环遍历链表,将结点使用尾插法插入正结点的末尾。 如果插入的是正结点,则移动tail;如果是负结点,则移动minus。 2.定义结构体 typedef struct LNode { int data; struct LNode *next; } LNode, *LinkList; 3.函数实现 定义工作指针: p: 用于遍历单链表 tail: 指向正数
数据结构实验
编写程序实现顺序表的各种基本运算。对给定字符数组a[]={‘1’,‘2’,‘3’,‘1’,‘1’,‘0’,‘4’,‘2’,‘3’,‘1’,‘0’,‘4’,‘2’},创建顺序表L,删除从’2’到’3’的元素。要求时间复杂度为O(n),空间复杂度为O(1)。 可以输入一个任意大小的迷宫数据,用非递归的方法(栈或队列)求出一条走出迷宫的路径,并将路径输出; 二叉树遍历算法及其应用 以二叉链表存储结构的方式创建如下图的二叉树,输入时将下图二叉树变为基于括号表示的字符串。创建二叉树和实现二叉树的三种遍历和层次遍
数据结构练习-C语言
以C语言为基础的数据结构练习。
王道数据结构2022-线性表的链式表示-综合题(p41)-06有一个带头结点的单链表L,设计一个算法使其元素递增有序
有一个带头结点的单链表L,设计一个算法使其元素递增有序 #include<stdio.h> #include<stdlib.h> typedef struct LNode { //定义单链表结点类型 int data;//数据域 struct LNode *next;//指针域 } LNode, *LinkList; /*有一个带头结点的单链表L,设计一个算法使其元素递增有序*/ //带头结点尾插法建立单链表 LinkList List_TailInsert(LinkLis
数据结构-链表-有一个带头结点的单链表L,设计一个算法使其元素递增有序
1.算法思想 解法可分为两种: ① 先将链表的数据复制到数组中,再采用时间复杂度为O(nlog2n)的算法进行排序,然后将数组元素依次插入到链表中 ② 采用直接插入排序的思想,将链表分为两条链,一条由头结点及一个数据结点构成,另一条由剩下的结点构成。然后依次扫描第二条链中剩下的结点,并通过比较插入到第一条链中去。 下面的代码采用的是第二种的解法。 2.源代码 void LinkSort(List list) { Node pre, p, r; p = list->Next; //r保持*p后继结点
数据结构-线性表课后习题15-设有一个带头结点的单链表L,节点的结构为(data,next),其中data为整数元素,next为后继节点的指针······
设有一个带头结点的单链表L,节点的结构为(data,next),其中data为整数元素,next为后继节点的指针,设计一个算法,首先按递减次序输出该单链表中各节点的数据元素,然后释放所有节点占用的存储空间,并要求算法的空间复杂度为O(1) 这里就是用了一个简单的线性表排序,感兴趣的排序方法大家可以去搜一下。 代码如下: #include<stdio.h> #include<stdlib.h> //设有一个带头结点的单链表L,节点的结构为(data,next),其中data为
链表选择题练习
1、已知L是带头节点的单链表,节点P既不是头节点(第一个节点),也不是尾节点,删除P节点直接后继节点的语句序列是(C) A、P = P -> next; B、P -> next = P; C、P - > next = P -> next -> next; D、P=P -> next -> next; 题解: 将当前节点的下一个的下一个赋给当前的P ->...
一网打尽数据结构中线性表链表的相关算法
目前还未开始写,后期会更新 一、基本操作 二、改造类 链表 合并两个有序链表 将一个含有大写字母小写字母数字的链表按照元素类型分为三个链表 在一个链表中删除多余的重复节点,使每个元素在线性表中进出现一次 线性表 ...
已知一单链表中的数据元素含有三类字符:字母、数字和其他字符。是编写算法,构造三个循环链表,使每个循环链表中只含同一类字符
结构体: struct NodeInt{ int num; struct NodeInt * next; }; struct NodeChar{ char character; struct NodeChar * next; }; struct NodeDouble{ double dou; struct NodeD
1万+



被折叠的 条评论
为什么被折叠?



