【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

时间: 2024-09-21 04:57:53

【Java数据结构】线性表的相关文章

(C语言版)数据结构线性表从键盘输入元素实现相关功能,不报错,但执行意外终止

问题描述 (C语言版)数据结构线性表从键盘输入元素实现相关功能,不报错,但执行意外终止 #include #include #define MaxSize 50 typedef char ElemType; typedef struct{//struct结构体 ElemType data[MaxSize]; int length; }SqList; void InitList(SqList &L)//初始化线性表的方法,&是取地址符号,是定义指针符号,如int *b=&a:*a=4

C++数据结构线性表的存储

问题描述 C++数据结构线性表的存储 输入姓名和地址信息,原样输出,例如 input liming beijing output liming beijing 求C++代码 我是新手,求大神罩

数据结构——线性表

1 线性表的特性是数据元素之间在逻辑结构上存在着线性关系,在计算机中表示这种关系的两类不同的存储结构是顺序存储结构和链式存储结构.用前者表示的线性表简称为顺序表,用后者表示的线性表简称为链表. 2 当线性表的长度n=0时,为一个空表.当n>0时,序列中必存在唯一的一个"第一个元素",也必存在唯一的一个"最后一个元素".除第一个元素外,每一个元素均有唯一的前驱:除最后一个元素外,每一个元素均有唯一的后继. 3 线性表抽象类 文件List.h #pragma on

大话数据结构五:线性表的链式存储结构(双向链表)

1. 双向链表:在单链表的每个结点中,再设置一个指向其前驱结点的指针域,那么在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱. 2. 单链表和双向链表比较: 单链表:总是要从头到尾找结点,只能正遍历,不能反遍历. 双向链表: 可以从头找到尾,也可以从尾找到头,即正反遍历都可以,可以有效提高算法的时间性能,但由于每个结点需要记录两份指针,所以在空间占用上略多一点,这就是通过空间来换时间. 3. Java实现双向链表: // 双向链表 public class DoubleLi

大话数据结构一:线性表的顺序存储结构

1. 线性表的顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素. 2. Java实现线性表的顺序存储结构: // 顺序存储结构 public class SequenceList { private static final int DEFAULT_SIZE = 10; // 默认初始化数组大小 private int size; // 当前数组大小 private static Object[] array; public SequenceList() { init(DEF

数据结构C语言实现之线性表

#include <stdio.h>#include <stdlib.h>typedef int elemType; /************************************************************************//* 以下是关于线性表顺序存储操作的16种算法 *//************************************************************************/struct Lis

大话数据结构之三:线性表

1.定义: 线性表表示0个或者多个数据元素的有限序列 线性表的特性有: 除第一个元素外,每一个元素均有一个直接前驱 出最后一个元素外,每一个元素均有一个直接后继 2.线性表抽象数据类型 ADT List  Data          /*线性表的数据对象集合为{a1,a2,...,an},每个元素的类型均为DataType.其中,除第一个元素a1外,   每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素.   数据元素直接是一对一的关系.*/  Op

算法速成(八)线性表之链表

一:线性表的简单回顾 上一篇跟大家聊过"线性表"顺序存储,通过实验,大家也知 道,如果我每次向 顺序表的头部插入元素,都会引起痉挛,效率比较低下,第二点我们用顺序 存储时,容 易受到长度的限制,反之就会造成空间资源的浪费. 二:链表 对于 顺序表存在的若干问题,链表都给出了相应的解决方案. 1. 概念:其实链表的"每个节点" 都包含一个"数据域"和"指针域". "数据域"中包含当前的数据. "指针

编程c语言-数据结构中构建线性表

问题描述 数据结构中构建线性表 为什么是取地址符,求普及 解决方案 因为你需要在函数内创建和返回这个表.而status这个返回值被用来返回状态. 用引用修饰参数,将参数当作返回值,这是一种常见的技巧. 解决方案二: 返回地址的引用,方便对返回的表作其他操作. 解决方案三: 有些编译器 没有bool 类型, 就用宏定义了 status 类型 表示 bool类型,不是取地址把? 应该是c++中的引用把? 如果取地址,下面的应该L->elem, 你看的是严蔚敏的数据结构? 解决方案四: 简单来说就是你

php线性表顺序存储实现代码(增删查改)_php技巧

复制代码 代码如下: <?php /* *文件名:linearList.php * 功能:数据结构线性表的顺序存储实现 * author:黎锦焕 * @copyright:www.drw1314.com */ class linearList { private $arr; private $length; const MAXSIZE=100; /* *构造函数,判断空表还是飞空表,并且进行实例化 * @param array $arr 输入的数组 * @param int $n 输入数组的长度