【Java数据结构】线性表

简介:

线性表

线性表是最基本、最简单、也是最常用的一种数据结构。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了哨位结点)。 


我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。 在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。 


线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。(以上定义参考百度,懒得解释#-_-)

线性表模型

package cn.deu;

public class MyArray {
     long [] arr;
     
     int num;

	public MyArray() {
		arr=new long[50];
	}
     
	public MyArray(int n){
		arr=new long[n];
	}
	
	//插入
	public void insert(int n){
		//无序插入法/*arr[num++]=n;*/
		//冒泡法
		/*long t=0;
		arr[num++]=n;
		for (int i = 0; i < num; i++) {
			for (int j = i+1; j < num; j++) {
				if(arr[i]>arr[j])
				{
					t=arr[i];
					arr[i]=arr[j];
					arr[j]=t;
				}
			}
		}*/
		int i;
		for (i = 0; i < num; i++) {
			if(arr[i]>n)
				break;
		}
		
		for (int j = num; j > i; j--) {
			arr[j]=arr[j-1];	
		}
		arr[i]=n;
		num++;
	}
	
	//查找
	public int find(int n){
		//线性查找
//		for (int i = 0; i < num; i++) {
//			if(arr[i]==n)
//				return i;
//		}
//		return -1;
		int lower=0;
		int upper=num;
		int mid=0;
		
		//二分查找
		while(true)
		{
			mid=(lower+upper)/2;
			if(arr[mid]==n)
				return mid;
			else
			if(lower>upper)
			return -1;
			else
			{	if(arr[mid]>n)
			    upper=mid-1;
				else
			    lower=mid+1;
			}
		}
	}
	
	//显示
	public void show(){
		for (int i = 0; i < num; i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
	}
	
	//删除
	public void delete(int n){
		if(find(n)==-1)
			System.out.println("没有发现数据,删除失败!");
		else
		{
			for (int i = find(n); i < num; i++) {
				arr[i]=arr[i+1];
			}
			num--;
		}
	}
	
	//修改
	public void change(int n,int m){
		if(find(n)==-1)
			System.out.println("没有发现数据,修改失败!");
		else
		{
			arr[find(n)]=m;
		}
	}
     
}

线性表测试

package en.edu.Test;

import cn.deu.MyArray;

public class Test {

	public static void main(String[] args) {
		MyArray list=new MyArray();
		//插入测试
        list.insert(12);
        list.insert(2134);
        list.insert(132);
        list.insert(67);
        list.insert(9);
        list.insert(12345);
        list.insert(90);
        //查找测试
        System.out.println(list.find(132));
        System.out.println(list.find(110));
        //显示测试
        list.show();
        //删除测试
        list.delete(12345);
        list.show();
        list.delete(15);
        list.show();
        //修改测试
        list.change(9, 45);
        list.show();
        list.change(14, 20);
        list.show();
	}

}

结果:
4
-1
9 12 67 90 132 2134 12345 
9 12 67 90 132 2134 
没有发现数据,删除失败!
9 12 67 90 132 2134 
45 12 67 90 132 2134 
没有发现数据,修改失败!
45 12 67 90 132 2134 

转载请注明出处:http://blog.csdn.net/acmman/article/details/50520267

相关文章
|
30天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
89 1
|
1天前
|
存储 安全 Java
Java并发编程中的高效数据结构:ConcurrentHashMap解析
【4月更文挑战第25天】在多线程环境下,高效的数据访问和管理是至关重要的。Java提供了多种并发集合来处理这种情境,其中ConcurrentHashMap是最广泛使用的一个。本文将深入分析ConcurrentHashMap的内部工作原理、性能特点以及它如何在保证线程安全的同时提供高并发性,最后将展示其在实际开发中的应用示例。
|
7天前
|
存储 供应链 Java
《Java 简易速速上手小册》第3章:Java 数据结构(2024 最新版)
《Java 简易速速上手小册》第3章:Java 数据结构(2024 最新版)
7 1
|
14天前
|
Java API
编码的奇迹:Java 21引入有序集合,数据结构再进化
编码的奇迹:Java 21引入有序集合,数据结构再进化
16 0
|
27天前
|
存储 C语言
【数据结构】线性表的链式存储结构
【数据结构】线性表的链式存储结构
18 0
|
30天前
|
XML 存储 算法
Java数据结构与算法-java数据结构与算法(五)
Java数据结构与算法-java数据结构与算法
49 0
|
1月前
|
存储 设计模式 算法
【C/C++ 数据结构 线性表】深入理解与实现栈:从基础到应用的全面探索
【C/C++ 数据结构 线性表】深入理解与实现栈:从基础到应用的全面探索
52 0
|
1月前
|
缓存 安全 Java
Java并发编程中的高效数据结构 - ConcurrentHashMap
本文将深入探讨Java并发编程中的一种高效数据结构 - ConcurrentHashMap。我们将详细介绍ConcurrentHashMap的基本原理,包括其设计思路、实现方式以及如何在多线程环境下提供高效的并发访问。同时,我们还将通过实例代码演示如何使用ConcurrentHashMap来优化并发程序的性能。
|
1月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
94 3