数据结构基础:P1-基本概念----编程作业03:二分查找

本系列文章为浙江大学陈越、何钦铭数据结构学习笔记,前面文章链接如下
数据结构基础:P1-基本概念
数据结构基础:P1-基本概念----编程作业01:最大子列和问题
数据结构基础:P1-基本概念----编程作业02:Maximum Subsequence Sum


一、题目描述

本题要求实现二分查找算法。
函数接口定义:

Position BinarySearch( List L, ElementType X );

其中List结构定义如下:

typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

L是用户传入的一个线性表,其中ElementType元素可以通过>==<进行比较,并且题目保证传入的数据是递增有序的。函数BinarySearch要查找XData中的位置,即数组下标(注意:元素从下标1开始存储)。找到则返回下标,否则返回一个特殊的失败标记NotFound
输入样例1:
5
12 31 55 89 101
31
输出样例1:
2
输入样例2:
3
26 78 233
31
输出样例2:
0


二、代码实现

代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 10
#define NotFound 0
typedef int ElementType;

typedef int Position;
typedef struct LNode *List;
struct LNode {
	ElementType Data[MAXSIZE];
	Position Last; /* 保存线性表中最后一个元素的位置 */
};

List ReadInput();  /* 裁判实现,细节不表。元素从下标1开始存储 */
Position BinarySearch(List L, ElementType X);

int main()
{
	List L;
	ElementType X;
	Position P;

	L = ReadInput();
	scanf("%d", &X);
	P = BinarySearch(L, X);
	printf("%d\n", P);

	return 0;
}

List ReadInput()
{
	List L = (List)malloc(sizeof(struct LNode));
	int num;
	scanf("%d", &num);
	L->Last = num;
	for(int i = 1; i <= num; i++)
		scanf("%d",&(L->Data[i]));
	
	return L;
}

Position BinarySearch(List L, ElementType X)
{
	int left = 1, right = L->Last;
	while (left <= right) {
		int middle = (left + right) / 2;
		if(L->Data[middle] < X)
			left = middle + 1;
		else if(L->Data[middle] > X)
			right = middle - 1;
		else
			return middle;
	}

	return NotFound;
}

运行,分别输入测试案例,可以看到结果正确。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Codesys是一款用于编程控制器的软件平台,支持多种编程语言和控制器型号。Codesys V3是该软件的最新版本,相比V2版本增加了许多新特性和功能。本篇文章的主题是Codesys V3的基础编程指南,共涉及到了P1至P5五个章节。 P1章节介绍了Codesys V3的基本概念和功能,包括编程方法、数据类型、变量等基础知识,还讲解了代码的组织结构和程序的执行流程等方面的内容。 P2章节主要介绍了Codesys V3的编程语言,包括Ladder Diagram(梯形图)、Function Block Diagram(功能块图)和Structured Text(结构化文本)三种基本语言,同时还针对不同编程语言的特点和内部结构进行了介绍。 P3章节中讲解了Codesys V3的数据存储与读写方法,包括内存区域的划分、数据类型的选择、变量的定义以及如何从外部设备(如PLC、传感器)读取数据,并进行处理和控制等方面的内容。 P4章节则介绍了Codesys V3的程序调试和测试方法,包括在线调试、离线模拟和虚拟化测试等多种方式,用于验证代码的正确性和性能,并进行故障诊断和修复。 最后,P5章节则是对前四章内容的实践案例,通过对机器人控制、工业自动化、流水线控制等多个场景的控制方法和实现过程的演示,帮助读者更好地理解和掌握Codesys V3的编程技术和应用方法。 总之,本篇编程指南涵盖了Codesys V3编程基础知识和应用技术,适合有一定编程基础或对控制器编程感兴趣的读者参考。 ### 回答2: CodeSys V3是一种基于IEC 61131-3标准的编程软件,包括5个编程语言:Ladder Diagram(LD)、Function Block Diagram(FBD)、Structured Text(ST)、Instruction List(IL)和Sequential Function Chart(SFC)。本指南从P1到P5共5个步骤,详细介绍CodeSys V3的基础编程技巧。 在P1中,介绍了如何创建一个新工程,并通过了解CodeSys V3的用户界面来导航软件。然后,教授如何创建一个新程序并选择正确的硬件配置。在这个过程中,学习者会学到如何在不同编程语言和对象之间切换。 在P2中,学习者将学习如何创建变量并进行数据类型设置。这个步骤中的实际例子将帮助学生们理解如何将变量设置为输入输出,并将其与PLC的物理输入输出连接起来。 在P3中,学习者将熟悉编程语句,例如IF语句和WHILE循环,以及盒式图和结构化文本语言。在本章中,学习者将运用这些语句来编写简单的程序。 在P4中,学习者将实践如何创建函数块和函数。这将为学生提供思考如何使用编程语言组织PLC程序的机会,并深入了解多个变量和多个函数的交互。 在P5中,学习者将了解如何注释PLC编程以及在代码中添加跟踪。教师将解释如何使用CodeSys V3的功能来帮助学生更好地调试和理解PLC程序。 在这个指南中,学习者将掌握使用CodeSys V3编程所需的基础技能。在PLC编程中掌握CodeSys V3语言是非常重要的,因为它是SCADA系统的核心之一,广泛用于自动化领域。 ### 回答3: CODESYS V3是一种全新的编程平台,它针对于PLC进行编程开发,能够深入挖掘PLC的潜力,让PLC实现更加复杂和精准的控制功能。CODESYS V3编程采用的是多语言编写,支持不同的PLC品牌,可扩展性很高。CODESYS V3为PLC用户提供了极为便捷的编程工具,使得编程操作更加简单直观,代码编写更加高效。 CODESYS V3编程指南P1-P5全面详尽地讲解了CODESYS V3的基础知识和编程技能。在本篇指南中,你将学到如何创建和配置PLC项目,如何使用不同种类的数据类型,如何定义变量和常量等基础知识。同时,您还将学会如何使用不同的编程语言,例如ST、LD、FBD等,以及如何进行程序调试和错误处理。 除此之外,CODESYS V3编程指南还介绍了一些高级编程技巧,例如模块化编程、函数库编写、面向对象编程等。这些技巧将使您的代码更加清晰、可维护性更高,从而提高您的开发效率和质量。 总之,CODESYS V3编程指南P1-P5全深入浅出地介绍了CODESYS V3编程基础知识和技能,是PLC编程开发工程师不可或缺的学习资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知初与修一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值