您好,登錄后才能下訂單哦!
順序表常見操作有插入、刪除、查找、修改。
一、插入:
1.插入有頭插、尾插、任意位置插入。在插入時要注意下標的取值在順序表長度范圍內。所以最好在插入之前進行擴容操作。
2.在頭插時要注意先將原數組的元素從后往前依次向后移動。因為如果從前往后開始移動的話,會造成后一個元素被前一個元素覆蓋,而丟失數據且造成重復。arr[i+1]=arr[i],注意此處i的意思是要移動的元素的下標。
3.任意位置插入與頭插類似,從后往前(要插入的位置元素下標)依次向后移動,再將數據插入
二.刪除
1.刪除有頭刪、尾刪、任意位置刪除,要注意刪除前,原順序表是否為空的異常情況。
2.頭刪與頭插相反,是從前往后依次向前移動,即后一個元素arr[i+1]覆蓋前一個元素arr[i].arr[i]=arr[i+1]
3.不論查找還是刪除,在確定循環語句的初始值和條件時都要仔細思考可取范圍
三.查找和修改
查找和修改要注意目標位置的下標不能越界
四.擴容
在java語言中,擴容一般擴為原來的1.5倍,是一種習慣的規范,不是死規則。
最后,附上完整代碼,包括初始化、插入、刪除、查找、修改、擴容、刪除順序表的相同元素。
import java.util.Arrays;
public class SeqList1{
private int[] array;
private int size;
//1.初始化,構造函數
public SeqList1(){
array=new int[11];
size=0;
}
//2.頭插
public void pushFront(int element){
ensureCapacity();
for(int i=size-1;i>=0;i--){// i代表的數據元素的下標,從后往前移動
array[i+1]=array[i];
}
array[0]=element;
size++;
}
//3.尾插
public void pushBack(int element){
ensureCapacity();
array[size++]=element;
}
//4.中間插
public void insert(int index,int element){
if(index<0||index>size){
System.out.println("下標異常,不能插入");
}
ensureCapacity();
for(int i=size;i>=index;i--){
array[i+1]=array[i];
}
array[index]=element;
size++;
}
//5.頭刪
public void popFront(){
if(size==0){
System.out.println("空表");
}
for(int i=0;i<size;i++){
array[i]=array[i+1];
}
size--;
}
//6.尾刪
public void popBack(){
if(size==0){
System.out.println("空表");
}
size--;}
//7.中間刪
public void erase(int index){
if(index<0||index>=size){
System.out.println("下標異常,不能刪除");
}
for(int i=index;i<size;i++){
array[i]=array[i+1];
}
size--;
}
//8.查找
public int indexOf(int element){
for(int i=0;i<size;i++){
if(array[i]==element){
return i;
}
}
return -1;
}
//9.根據下標,獲取元素
public int get(int index){
if(index<0||index>=size){
System.out.println("下標異常");
}
for(int i=0;i<size;i++){
if(array[i]==array[index]){
return array[i];
}
}
return -1;
}
//10.給定下標,修改元素的值
public void set(int index,int element){
for(int i=0;i<size;i++){
if(i==index){
array[i]=element;
}
}
}
//11.顯示當前表中元素長度
public int size(){
return size;
}
//12.判斷表是否為空
public boolean isEmpty(){
return size==0;
}
//13.查詢表的容量
public int capacity(){
return array.length;
}
//14.打印顯示表中已有元素
public String toString(){
return Arrays.toString(
Arrays.copyOf(array,size));
}
//15.刪除表中的一個元素
public void remove(int element){
int index=indexOf(element);
if(index!=-1){
erase(index);
}
}
//16.刪除表中相同元素
public void removeAll(int element){
int j=0;
for(int i=0;i<size;i++){
if(array[i]!=element){
array[j++]=array[i];
}
}
size=j;
}
//17.擴容
private void ensureCapacity(){
if(size<array.length){
return ;
}
//申請空間
int newCapacity=array.length+array.length/2;
int[] newArray=new int[newCapacity];
//搬家
for(int i=0;i<array.length;i++){
newArray[i]=array[i];
}
//官宣
this.array=newArray;
}
public static void test1(String [] args){
SeqList1 sq = new SeqList1();
//[]
System.out.println(sq.toString());
//頭插1 2 3
sq.pushFront(1);
sq.pushFront(2);
sq.pushFront(3);
System.out.println(sq.toString());
//尾插10,20,30
sq.pushBack(10);
sq.pushBack(20);
sq.pushBack(30);
System.out.println(sq.toString());
//1,2,3,10,20,30
sq.insert(2,15);
sq.insert(4,28);
System.out.println(sq.toString());
//當前容量
System.out.println(sq.capacity());
//尾插
sq.pushBack(10);
sq.pushBack(2000);
sq.pushBack(3000);
// sq.pushBack(4000);
sq.pushBack(5000);
sq.pushBack(6000);
System.out.println("當前容量為"+ sq.capacity());
//頭刪
sq.popFront();
//尾刪
sq.popBack();
//中間刪
sq.erase(3);
System.out.println(sq.toString());
}
public static void test2(String [] args){
SeqList1 s =new SeqList1();
s.pushBack(1);
s.pushBack(2);
s.pushBack(3);
s.pushBack(4);
s.pushBack(1);
s.pushBack(2);
s.pushBack(3);
s.pushBack(4);
// [ 1, 2, 3, 4, 1, 2, 3, 4 ]
System.out.println(s.toString());
s.remove(4);
// [ 1, 2, 3, 1, 2, 3, 4 ]
System.out.println(s.toString());
s.removeAll(4);
// [ 1, 2, 3, 1, 2, 3, ]
System.out.println(s.toString());
}
public static void main(String[] args){
test1(args);
test2(args);
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。