线性结构(二)--数组

      1、将数组转换成面向对象的数组

      2、使用线性查找

      3、使用二分法查找

一、数组:

  

public class MyArray {
	//用于存储数据的数组
	private int[] elements;

	//实例对象时,创建数组
	public MyArray(){
		elements=new int[0];
	}

	//获取数组长度的方法
	public int size(){
		return elements.length;
	}

	//往数组的末尾添加一个元素
	public void add(int element){
		//创建一个新数组
		int[] newArr=new int[elements.length+1];
		//把原数组的元素赋值到新数组到
		for (int i = 0; i < elements.length; i++) {
			newArr[i]=elements[i];
		}
		//把添加的元素放入新数组中
		newArr[elements.length]=element;
		//使用新数组替换旧数组
		elements=newArr;
	}
	//打印所有元素到控制台
	public void show(){
		System.out.println(Arrays.toString(elements));
	}
	//删除数组中的元素
	public void delete(int index){
		if(index<0||index>elements.length-1){
			throw new RuntimeException("下标越界!!");
		}
		//创建新数组
		int[] newarr=new int[elements.length-1];
		for(int i=0;i<newarr.length;i++){
			if(i<index){
				newarr[i]=elements[i];
			}else{
				newarr[i]=elements[i+1];
			}
		  }
		elements=newarr;
		}
	//获取某个元素
	public int get(int index){
		return elements[index];
	}
	//指定位置插入元素
	public void insert(int index,int elemten){
		if(index<0||index>elements.length-1){
			throw new RuntimeException("插入下标越界");
		}
		int[] newarr=new int[elements.length+1];
		for(int i=0;i<elements.length;i++){
			if(i<index){
				newarr[i]=elements[i];
			}else{
				newarr[i+1]=elements[i];
			}
		}
		newarr[index]=elemten;
		elements=newarr;
	}
	//替换指定位置的元素
	public void set(int index,int element){
		if(index<0||index>elements.length-1){
			throw new RuntimeException();
		}
		elements[index]=element;
	}
	//线性查找
	public int search(int target){
		//遍历数组
		for(int i=0;i<elements.length;i++){
			if(elements[i]==target){
				return i;
			}
		}
		return -1;
	}
	//二分查找
	public int binarySearch(int target){
		//记录开始位置
		int begin=0;
		//记录结束位置
		int end=elements.length-1;
		//记录中间的位置
		int mid=(begin+end)/2;
		//循环查找
		while(true){
			//什么情况下没有这个元素?
			//开始位置在位数之后或或重合,没有这个元素
			if(begin>=end){
				return -1;
			}
			//判断中间这个元素是不是要查找的元素
			if(elements[mid]==target){
				return mid;
			//中间这个元素不是要查的元素
			}else{
				//判断中间这个元素是不是比目标元素更大
				if(elements[mid]>target){
					//结束位置调到中间位置
					end=mid-1;
				}else{
					//把开始的位置调到中间位置
					begin=mid+1;
				}
				//取出新的中间位置
				mid=(begin+end)/2;
			}

		}
	}

}

原文地址:https://www.cnblogs.com/axu521/p/9958299.html

时间: 2024-10-10 21:12:08

线性结构(二)--数组的相关文章

线性结构 —— 循环数组

一.介绍 ?上一章讲得数组队列无法重复使用,这一章我们使用环形数组实现队列. 二.代码 ?使用环形数组模拟队列,首先编写一个CircleArray class CircleArray { private int maxSize; // 表示数据最大容量 private int front; // 指向队列头 第一个元素 private int rear; // 指向队列最后元素的下一个位置,我们约定空出一个元素空间 private int[] queue; // 队列 // 创建队列构造器 pu

c语言实现线性结构(数组与链表)

由于这两天看了数据结构,所以又把大学所学的c语言和指针"挂"起来了. 我是小菜鸟,我为自己代言.下面是我这两天学习的成果(数组和链表的实现,用的是c语言哦!哈哈). (一)数组的实现和操作.代码如下: #include <stdio.h> #include <malloc.h> #include <stdlib.h> struct Array{ int length;//数组长度 int * pBase;//存放数组首元素的地址 int cnt;//

线性结构之数组实现

#include<stdio.h> #include<stdlib.h> typedef struct { int *pArr; int length;//数组最大容量 int cnt;//当前数组有效个数 }SqList; void init_arr(SqList *,int length); void destroy_arr(); void remove_arr(SqList *,int,int *); void append_arr(SqList *,int); void i

一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式

 打印数组中的每个元素,打印每个元素的地址: #include <stdio.h> #include <stdlib.h> void main(void) { int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int *p = a; p < a + 10;p++)  //指针类型决定4个字节 { printf("\n%p,%d", p, *p); } getchar(); } 指针数组 #inclu

将树形结构的数组按照顺序遍历为二维数组

/** * 将树形结构的数组按照顺序遍历为二维数组 * renxing,2015年8月7日 11:06:47 */ function arr_child ($array) { static $res; if (!is_array($array)) { return false; } foreach ($array as $k=>$v) { if (is_array($v) && isset($v['child'])) { $child = $v['child']; //将这个数组的子

常见的线性列表结构---【数组、链表、栈、队列、堆】

我们在算法设计当中最常见的线性结构列表无非是一下几种: 1.数组: 数组应该是我最常用的一种.他的存储地址是连续的,就是当我们新开辟一个数组时,我们会给他分配一个连续的地址.由于他的地址是连续的,所以在我们知道他下标的时候,查找元素的速度非常快. 2.链表: 链表中的元素的位置不固定,链表中的每一个结点都一个头指针与尾指针,通过这样把链表中的元素连接起来,所以查找一个元素的时间与该元素所处的位置有关系.但是他在空间上面占有优势. 3.栈: 栈中的元素有一个特点,就是保持" 先进先出"的

数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树

数据结构 参考:http://lupython.gitee.io/ 线性结构 就是能够用一根线串起来的数据结构 数组 (列表) 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件? 答:内存必须有一块连续的内存空间 int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型. int a[7] = array(1,2,3,4,5,6,7) 问:如何申请内存? 答:C,C++语言,申请:mallco (28).释放:free(28) 问:int

Mooc数据结构-基础和线性结构

1 数据结构 解决问题方法的效率,跟数据的组织方式有关 解决问题方法的效率,跟空间的利用效率有关 解决问题方法的效率,跟算法的巧妙程度有关 数据结构 数据对象在计算机中的组织方式 逻辑结构 物理存储结构 数据对象必定与一系列加在其上的操作相关联 完成这些操作所用的方法就是算法 抽象数据类型(Abstract Data Type) 数据类型 数据对象集 数据集合相关联的操作集 抽象: 描述数据类型的方法不依赖与具体实现 与存放数据的机器无关 与数据存储的物理结构无关 与实现操作的算法和编程语言无关

线性结构

线性表及其实现 [引例]:多项式的表示 一元多项式:f(x)=a0+a1X+...+an-1Xn-1+anXn 主要运算:多项式的相加.相减.相乘等. [分析]如何表示多项式? 多项式的关键数据: 多项式的项数n 各项系数ai及指数i 方法1:顺序存储结构直接表示 数组各分量对应多项式的各项: a[i]:项Xi的系数ai,i是对应的指数 例如:f(x)=4x5-3x2+1,表示成:  0  1   2   3  4  5    ......    下标i 1 0 -3 0 0 4 ......