順序表
本文 主要爲部分內容複習展示
【詳細內容】https://blog.csdn.net/qq_36390039/article/details/89057500
這裏我們使用數組模擬實現順序表以及各項功能
public interface ISequence {
//在pos位置插入val
boolean add(int pos,Object data);
//查找關鍵字key 找到返回key的下標,沒有返回null;
int search(Object key);
//查找是否包含關鍵字key是否在順序表當中(這個和search有點衝突)
boolean contains(Object key);
//得到pos位置的值
Object getPos(int pos);
//刪除第一次出現的關鍵字key
Object remove(Object key);
//得到順序表的長度
int size();
//打印順序表
void display();
//清空順序表以防內存泄漏
void clear();
}
(1)順序表初始化
1.通過Object數組存放數據內容
2.定義可變化存放數據大小userSize
3.構造器初始化順序表
private Object[] elem;
private int userSize;
public static final int DEFAULT_LENGTH = 10;
public SequenceImpl(){
this.elem = new Object[DEFAULT_LENGTH];
this.userSize = 0;
}
(2)數據增加
public boolean isFull(){
return this.userSize==this.elem.length;
}
@Override
public boolean add(int pos, Object data) {
if(pos<0||pos>this.userSize){
return false;
}
if(isFull()){
//數組擴容
this.elem =
Arrays.copyOf(this.elem,this.elem.length*2);
}
int key = this.userSize-1;
for(int i=key;i>=pos;i--){
this.elem[i+1] = this.elem[i];
}
//放入數據
this.elem[pos] = data;
this.userSize++;
return true;
}
1.對pos取值範圍進行判斷
2.數組大小是否需要擴容
3.對數據進行挪移
4.放入數據
(3)數據的查詢
1.查詢數據是否存在返回int
private boolean isEmpty(){
return this.userSize==0;
}
@Override
public int search(Object key) {
if(key==null){
throw new UnsupportedOperationException("不可傳入null");
}
if(isEmpty()){
return -1;
}
for(int i=0;i<this.userSize;i++){
if(this.elem[i].equals(key)){
return 1;
}
}
return -1;
}
2.查詢數據是否存在返回boolean
@Override
public boolean contains(Object key) {
if(key==null){
throw new UnsupportedOperationException("不可傳入null");
}
if(isEmpty()){
return false;
}
for(int i=0;i<this.userSize;i++){
if(this.elem[i].equals(key)){
return true;
}
}
return false;
}
遍歷對比每一個值 進行查找
3.根據下標獲取數據
@Override
public Object getPos(int pos) {
if(pos<0||pos>=this.userSize){
return null;
}
return this.elem[pos-1];
}
(4)數據刪除
1.刪除單個數據返回數據
@Override
public Object remove(Object key) {
int index =search(key);
if(index==-1){
return false;
}
Object originalData = this.elem[index];
int i = 0;
for(i=index;i<this.userSize-1;i++){
this.elem[i] = this.elem[i+1];
}
this.elem[i+1] = null;
this.userSize--;
return originalData;
}
2.清空數組
@Override
public void clear() {
for(int i=0;i<this.userSize;i++){
this.elem[i] = null;
}
this.userSize = 0;
}
@Override
public void clear() {
for(int i=0;i<this.userSize;i++){
this.elem[i] = null;
}
this.userSize = 0;
}
(5)計算大小與打印
@Override
public int size() {
return this.userSize;
}
@Override
public void display() {
for(int i=0;i<this.userSize;i++){
System.out.print(this.elem[i]+" ");
}
}