顺序表
顺序表是在计算机内存中以数组的形式保存的线性表。
线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
采用顺序存储结构的线性表通常称为顺序表。
顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
- 顺序表的基本操作:
package mypratice;
import java.util.Arrays;
/**
* Package: mypratice
* Description:
* Author: zker
* Date: Created in 2018/11/27 13:02
* Company: zhang
* Copyright: Copyright (c) 2018
*/
class SqlistTable{
public int[] element; //对象数组存储顺序表的数据元素
int usedsize; //顺序表的元素个数
public SqlistTable(int size){
this.element = new int[size];
}
public SqlistTable(){
this(10); 调用类已经声明的指定参数列表的构造方法
}
//判断顺序表是否已满
public boolean isFull(){
if (this.usedsize == this.element.length){
return true;
}
return false;
}
//在指定位置pos插入一个数
public boolean InsertValue(int pos, int value){
if (isFull()){
//顺序表已满,动态扩容
this.element = Arrays.copyOf(this.element,2 * this.element.length);
}if (pos < 0 || pos > this.usedsize){
return false;
}else {
for (int i = this.usedsize - 1;i >= pos;i --){
this.element[i + 1] = this.element[i]; //移动元素,逐步往后移
}
this.element[pos] = value; //将数插入到指定pos
usedsize ++;
}
return true;
}
//判断顺序表是否为空
public boolean isEmpty(){
if (this.usedsize == 0){
return true;
}
return false;
}
//查找关键字key的下标
public int SearchKey(int key){
if (isEmpty()){
return -1;
}
for (int i = 0; i < this.usedsize ; i++) {
if (this.element[i] == key){
return i;
}
}
return -1;
}
//删除关键字key的值,第一次出现的key
public boolean DeleteKey(int key){
int index = SearchKey(key); //先查找顺序表中是否存在key 若存在返回下标,若不存在返回-1
if (index < 0){ //如果有:删除 从找到数字的下标开始删除
return false;
}else {
for (int i = index ;i < this.usedsize -1; i ++){
this.element[i] = this.element[i + 1]; //后面的数覆盖前面的
}
this.usedsize --; //删除后,顺序表元素个数减一
return true;
}
}
//得到pos 位置的值
public int GetValue(int pos){
if (pos < 0 || pos > this.usedsize){
throw new UnsupportedOperationException("pos位置不合法或者顺序表为空");
// return -1 ;
}else{
return this.element[pos];
}
}
//打印顺序表
public void Print(){
for (int i = 0; i < this.usedsize; i++) {
System.out.print(this.element[i] + " ");
}
System.out.println();
}
}
public class Sqlist {
public static void main(String[] args) {
SqlistTable sqlistTable = new SqlistTable();
for (int i = 0; i < 10 ; i ++){
sqlistTable.InsertValue(i,i); //指定位置插入
}
sqlistTable.Print();
System.out.println("======");
sqlistTable.InsertValue(2,2);
sqlistTable.Print();
System.out.println("=========");
System.out.println(sqlistTable.DeleteKey(1));
System.out.println("========");
System.out.println(sqlistTable.SearchKey(3));
System.out.println("========");
System.out.println(sqlistTable.GetValue(5));
}
}
//output:
0 1 2 3 4 5 6 7 8 9
======
0 1 2 2 3 4 5 6 7 8 9
=========
true
========
3
========
5
顺序表的插入:
Over…数据结构新篇章,顺序表建议画图思考问题,走一走理一理,造轮子啊,,明天也要加油呀yayyayyya