【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

相关文章
|
3月前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
58 1
|
3月前
|
存储 Java
告别混乱!用Java Map优雅管理你的数据结构
【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
106 2
|
3月前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
107 2
|
15天前
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
39 7
|
15天前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
31 5
|
15天前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
31 5
|
1月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
49 5
|
2月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
63 6
|
2月前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
3月前
|
存储 算法 Java
Java 中常用的数据结构
【10月更文挑战第20天】这些数据结构在 Java 编程中都有着广泛的应用,掌握它们的特点和用法对于提高编程能力和解决实际问题非常重要。
43 6