https://www.cnblogs.com/xgp123/p/12317126.htmlhtml
五、java實現方式:
5.一、順序表的抽象結構
package com.xgp.順序表; public interface MyList<T> { //1. initList(&L):初始化表。構造一個空的線性表。放回值應該是一個線性表 MyList<T> initList(); //2. destroyList(&L):銷燬操做。銷燬線性表,並釋放線性表L所佔的內存空間。放回值爲void boolean destroyList(); //3. locateElem(L,e):按值查找操做。在表中L查找具備給定關鍵值的元素。放回一個int類型 int locateElem(T value); //5. listInsert(&L,i,e):插入操做。在表L中的第i個位置上插入指定的元素e。 boolean listInsert(int pos,T value); //4. getElem(L,i):按位查找。獲取表中第i個位置的元素的值。 T getElem(int pos); //6. listDelete(&L,i,e):刪除操做。刪除表L中第i個位置的元素。 boolean listDelete(int pos); //7. PrintList(L):輸出操做。按先後順序輸出線性表L的全部元素值。 void PrintList(); //8. empty(L):判空操做。若L爲空表,則放回true,不然放回false。 boolean isEmpty(); //9. length(L):求表長。放回線性表L的長度,即L中數據元素的個數。 int getLength(); }
5.二、順序表的實現類
package com.xgp.順序表; public class MyListImpl<T> implements MyList<T> { private Object arr[] = null; private int size; @Override public MyList<T> initList() { arr = new Object[20]; size = 0; return this; } @Override public boolean destroyList() { arr = null; size = 0; System.gc(); return true; } @Override public int locateElem(T value) { if(arr == null) return 0; for(int i = 0;i < size;i++) { if(arr[i].equals(value)) return i + 1; } return 0; } @Override public boolean listInsert(int pos, T value) { if(arr == null) return false; if(pos < 1 || pos > size + 1) return false; if(size >= arr.length) { //擴容 Object[] newarr = new Object[arr.length * 2]; //拷貝 for(int i = 0;i < size;i++) { newarr[i] = arr[i]; } //修改指向 arr = newarr; System.gc(); } //插入 for(int i = size;size >= pos;pos--) { arr[i] = arr[i - 1]; } arr[pos - 1] = value; size++; return true; } @Override public T getElem(int pos) { if(arr == null) return null; if(pos < 1 || pos > size) return null; return (T) arr[pos - 1]; } @Override public boolean listDelete(int pos) { if(arr == null) return false; if(pos < 1 || pos > size) return false; for(int i = pos - 1;i < size - 1;i++) { arr[i] = arr[i+1]; } size--; return true; } @Override public void PrintList() { for (int i = 0;i < size;i++) { System.out.print(arr[i] + " "); } System.out.println(); } @Override public boolean isEmpty() { return arr == null; } @Override public int getLength() { return size; } }
5.三、順序表的測試類
package com.xgp.順序表; public class Main { public static void main(String[] args) { //一、測試初始化操做 MyList<Integer> list = new MyListImpl<>(); list.initList(); //二、測試插入操做 for(int i = 1;i < 100;i++) { if(list.listInsert(i,i*100)) System.out.print( i + "號元素插入成功 "); } System.out.println(); //三、測試判空操做 if(list.isEmpty()) System.out.println("空表"); else System.out.println("不是空表"); //四、測試求表長操做 System.out.println(list.getLength()); //五、測試按位刪除操做 if(list.listDelete(56)) System.out.println("刪除成功"); //六、測試按位查找的操做 System.out.println(list.getElem(56)); //七、測試按值查找的操做 System.out.println(list.locateElem(1000)); //八、測試輸出操做 list.PrintList(); //九、測試銷燬操做 if(list.destroyList()) System.out.println("銷燬成功"); } }
5.四、輸出結果
1號元素插入成功 2號元素插入成功 3號元素插入成功 4號元素插入成功 5號元素插入成功 6號元素插入成功 7號元素插入成功 8號元素插入成功 9號元素插入成功 10號元素插入成功 11號元素插入成功 12號元素插入成功 13號元素插入成功 14號元素插入成功 15號元素插入成功 16號元素插入成功 17號元素插入成功 18號元素插入成功 19號元素插入成功 20號元素插入成功 21號元素插入成功 22號元素插入成功 23號元素插入成功 24號元素插入成功 25號元素插入成功 26號元素插入成功 27號元素插入成功 28號元素插入成功 29號元素插入成功 30號元素插入成功 31號元素插入成功 32號元素插入成功 33號元素插入成功 34號元素插入成功 35號元素插入成功 36號元素插入成功 37號元素插入成功 38號元素插入成功 39號元素插入成功 40號元素插入成功 41號元素插入成功 42號元素插入成功 43號元素插入成功 44號元素插入成功 45號元素插入成功 46號元素插入成功 47號元素插入成功 48號元素插入成功 49號元素插入成功 50號元素插入成功 51號元素插入成功 52號元素插入成功 53號元素插入成功 54號元素插入成功 55號元素插入成功 56號元素插入成功 57號元素插入成功 58號元素插入成功 59號元素插入成功 60號元素插入成功 61號元素插入成功 62號元素插入成功 63號元素插入成功 64號元素插入成功 65號元素插入成功 66號元素插入成功 67號元素插入成功 68號元素插入成功 69號元素插入成功 70號元素插入成功 71號元素插入成功 72號元素插入成功 73號元素插入成功 74號元素插入成功 75號元素插入成功 76號元素插入成功 77號元素插入成功 78號元素插入成功 79號元素插入成功 80號元素插入成功 81號元素插入成功 82號元素插入成功 83號元素插入成功 84號元素插入成功 85號元素插入成功 86號元素插入成功 87號元素插入成功 88號元素插入成功 89號元素插入成功 90號元素插入成功 91號元素插入成功 92號元素插入成功 93號元素插入成功 94號元素插入成功 95號元素插入成功 96號元素插入成功 97號元素插入成功 98號元素插入成功 99號元素插入成功 不是空表 99 刪除成功 5700 10 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 4100 4200 4300 4400 4500 4600 4700 4800 4900 5000 5100 5200 5300 5400 5500 5700 5800 5900 6000 6100 6200 6300 6400 6500 6600 6700 6800 6900 7000 7100 7200 7300 7400 7500 7600 7700 7800 7900 8000 8100 8200 8300 8400 8500 8600 8700 8800 8900 9000 9100 9200 9300 9400 9500 9600 9700 9800 9900 銷燬成功 進程完成,退出碼 0
六、C++實現方式:
6.一、順序表類的抽象
#ifndef XGP_STUDY_DEMO40_MYLIST_H #define XGP_STUDY_DEMO40_MYLIST_H #include <iostream> using namespace std; template <class T> class MyList { private: T* arr; //存放數據的地址 int size; //當前又多少元素 int maxSize; //當前動態數組的最大長度 public: //1. initList(&L):初始化表。構造一個空的線性表。放回值應該是一個線性表 MyList<T> initList(); //2. destroyList(&L):銷燬操做。銷燬線性表,並釋放線性表L所佔的內存空間。放回值爲void bool destroyList(); //3. locateElem(L,e):按值查找操做。在表中L查找具備給定關鍵值的元素。放回一個int類型 int locateElem(T value); //5. listInsert(&L,i,e):插入操做。在表L中的第i個位置上插入指定的元素e。 bool listInsert(int pos,T value); //4. getElem(L,i):按位查找。獲取表中第i個位置的元素的值。 T getElem(int pos); //6. listDelete(&L,i,e):刪除操做。刪除表L中第i個位置的元素。 bool listDelete(int pos); //7. PrintList(L):輸出操做。按先後順序輸出線性表L的全部元素值。 void PrintList(); //8. empty(L):判空操做。若L爲空表,則放回true,不然放回false。 bool isEmpty(); //9. length(L):求表長。放回線性表L的長度,即L中數據元素的個數。 int getLength(); }; #endif //XGP_STUDY_DEMO40_MYLIST_H
6.二、順序表類的實現
#include "MyList.h" template<class T> MyList<T> MyList<T>::initList() { arr = new T[20]; size = 0; maxSize = 20; return *this; } template<class T> bool MyList<T>::destroyList() { if(arr == NULL || this == NULL) return false; delete arr; arr = NULL; delete this; size = 0; maxSize = 0; return true; } template<class T> int MyList<T>::locateElem(T value) { if(arr == NULL) return 0; for (int i = 0; i < size; i++) { if(arr[i] == value) return i + 1; } return 0; } template<class T> bool MyList<T>::listInsert(int pos, T value) { if(arr == NULL) return false; if(pos < 1 || pos > size + 1) return false; //看容量是否大 if(size >= maxSize) { T* newArr = new T[maxSize * 2]; for(int i = 0;i < size;i++) { newArr[i] = arr[i]; } delete arr; arr = newArr; maxSize = maxSize * 2; } //插入 for(int i = size;size >= pos;i--) { arr[i] = arr[i - 1]; } arr[pos - 1] = value; size++; return true; } template<class T> T MyList<T>::getElem(int pos) { if(arr == NULL) return false; if(pos < 1 || pos > size ) return false; return arr[pos - 1]; } template<class T> bool MyList<T>::listDelete(int pos) { if(arr == NULL) return false; if(pos < 1 || pos > size ) return false; for(int i = pos -1;i < size - 1;i++) { arr[i] = arr[i + 1]; } size--; return true; } template<class T> void MyList<T>::PrintList() { for(int i = 0;i < size;i++) { cout<<arr[i]<<" "; } cout<<endl; } template<class T> bool MyList<T>::isEmpty() { return arr == NULL; } template<class T> int MyList<T>::getLength() { return size; }
6.三、測試順序表
#include "MyList.cpp" int main() { //一、測試初始化操做 MyList<int> list; list.initList(); //二、測試插入操做 for(int i = 1;i < 100;i++) { if(list.listInsert(i,i*100)) cout<<i<<"號元素等到了插入成功 "; } cout<<endl; //三、測試判空操做 if(list.isEmpty()) cout<<"空表"<<endl; else cout<<"不是空表"<<endl; //四、測試求表長操做 cout<<list.getLength()<<endl; //五、測試按位刪除操做 if(list.listDelete(56)) cout<<"刪除成功"<<endl; //六、測試按位查找的操做 cout<<list.getElem(56)<<endl; //七、測試按值查找的操做 cout<<list.locateElem(1000)<<endl; //八、測試輸出操做 list.PrintList(); //九、測試銷燬操做 if(list.destroyList()) cout<<"銷燬成功"<<endl; return 0; }
6.四、輸出結果
1號元素等到了插入成功 2號元素等到了插入成功 3號元素等到了插入成功 4號元素等到了插入成功 5號元素等到了插入成功 6號元素等 到了插入成功 7號元素等到了插入成功 8號元素等到了插入成功 9號元素等到了插入成功 10號元素等到了插入成功 11號元素等到了插入 成功 12號元素等到了插入成功 13號元素等到了插入成功 14號元素等到了插入成功 15號元素等到了插入成功 16號元素等到了插入成功 17號元素等到了插入成功 18號元素等到了插入成功 19號元素等到了插入成功 20號元素等到了插入成功 21號元素等到了插入成功 22號 元素等到了插入成功 23號元素等到了插入成功 24號元素等到了插入成功 25號元素等到了插入成功 26號元素等到了插入成功 27號元素 等到了插入成功 28號元素等到了插入成功 29號元素等到了插入成功 30號元素等到了插入成功 31號元素等到了插入成功 32號元素等到 了插入成功 33號元素等到了插入成功 34號元素等到了插入成功 35號元素等到了插入成功 36號元素等到了插入成功 37號元素等到了插 入成功 38號元素等到了插入成功 39號元素等到了插入成功 40號元素等到了插入成功 41號元素等到了插入成功 42號元素等到了插入成 功 43號元素等到了插入成功 44號元素等到了插入成功 45號元素等到了插入成功 46號元素等到了插入成功 47號元素等到了插入成功 48 號元素等到了插入成功 49號元素等到了插入成功 50號元素等到了插入成功 51號元素等到了插入成功 52號元素等到了插入成功 53號元 素等到了插入成功 54號元素等到了插入成功 55號元素等到了插入成功 56號元素等到了插入成功 57號元素等到了插入成功 58號元素等 到了插入成功 59號元素等到了插入成功 60號元素等到了插入成功 61號元素等到了插入成功 62號元素等到了插入成功 63號元素等到了 插入成功 64號元素等到了插入成功 65號元素等到了插入成功 66號元素等到了插入成功 67號元素等到了插入成功 68號元素等到了插入 成功 69號元素等到了插入成功 70號元素等到了插入成功 71號元素等到了插入成功 72號元素等到了插入成功 73號元素等到了插入成功 74號元素等到了插入成功 75號元素等到了插入成功 76號元素等到了插入成功 77號元素等到了插入成功 78號元素等到了插入成功 79號 元素等到了插入成功 80號元素等到了插入成功 81號元素等到了插入成功 82號元素等到了插入成功 83號元素等到了插入成功 84號元素 等到了插入成功 85號元素等到了插入成功 86號元素等到了插入成功 87號元素等到了插入成功 88號元素等到了插入成功 89號元素等到 了插入成功 90號元素等到了插入成功 91號元素等到了插入成功 92號元素等到了插入成功 93號元素等到了插入成功 94號元素等到了插 入成功 95號元素等到了插入成功 96號元素等到了插入成功 97號元素等到了插入成功 98號元素等到了插入成功 99號元素等到了插入成 功 不是空表 99 刪除成功 5700 10 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 4100 4200 4300 4400 4500 4600 4700 4800 4900 5000 5100 5200 5300 5400 5500 5700 5800 5900 6000 6100 6200 6300 6400 6500 6600 6700 6800 6900 7000 7100 7200 7300 7400 7500 7600 7700 7800 7900 8000 8100 8200 8300 8400 8500 8600 8700 8800 8900 9000 9100 9200 9300 9400 9500 9600 9700 9800 9900 銷燬成功 Process finished with exit code 0