顺序表

顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

package practice;

import java.util.Arrays;

class TestSqlist{
	int usedSize;//存储数据的个数
	int[] elem;//存储数据的数组
	public TestSqlist(){//无参数构造方法
		this(10);//调用带参数的构造方法(size=10)
	}
	
	public TestSqlist(int size){
		elem = new int[size];
		usedSize = 0;
	}
	
	//判断顺序表是否为满
	public boolean isFull(){
		if(usedSize==elem.length){
			return true;
		}
		return false;
	}
	
	//判断顺序表是否为空
	public boolean isEmpty(){
		if(usedSize==0){
			return true;
		}
		return false;
	}
	
	//打印顺序表
	public void show(){
		for(int i=0;i<this.usedSize;i++){
			System.out.print(elem[i]+" ");
		}
		System.out.println();
	}
	
	//插入一个数据
	public boolean insert(int val,int pos){
		if(pos>this.usedSize||pos<0){//判断是否合法
			return false;
		}
		if(isFull()){//判断是否为满,满了扩容为2倍
			elem = Arrays.copyOf(elem, 2*elem.length);
		}
		//挪数据
		for(int i = usedSize-1;i>=pos;i--){/*从线性表最后开始遍历每个数据都向后挪一
											位直到找到pos,把pos位腾空*/
			elem[i+1]=elem[i];				
		}
		elem[pos]=val;
		this.usedSize++;
		return true;
	}
	
	//查找关键字key,返回下标
	public int search(int key){
		int i;
		if(isEmpty()){
			return -1;
		}
		for(i=0;i<this.usedSize;i++){
			if(key==elem[i]){
				return i;
			}
		}
		return -1;
	}
	
	//删除关键字key
	public boolean delete(int key){
		int pos = search(key);//调用查找函数,得到关键字下标
		if(pos<0){
			return false;
		}
		for(int i = pos;i<this.usedSize-1;i++){//从pos开始,将后面元素一直向前挪
			elem[i]=elem[i+1];
		}
		this.usedSize--;
		return true;
	}
	
}

public class sqlist {

	public static void main(String[] args) {
		TestSqlist t1 = new TestSqlist();
		for(int i=0;i<9;i++){
			t1.insert(i, i);
		}
		t1.show();
		System.out.println("======插入======");
		t1.insert(10, 7);
		t1.show();
		System.out.println("======删除======");
		t1.delete(7);
		t1.show();
		System.out.println("======查找======");
		int pos = t1.search(3);
		System.out.println("查找的数字下标为"+pos);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值