資料結構 線性表
阿新 • • 發佈:2018-12-11
一個先線性表是n個數據元素的有序序列。
這裡總結一下線性表的建立,插入,刪除,查詢。
#include <iostream> using namespace std; #include<stdlib.h> #define ok 0 #define error -1 class Seqlist { private: int *data; int maxsize; int size; public: Seqlist() { maxsize = 1000; size = 0; data = new int[maxsize]; } ~Seqlist() { delete[]data; } void create_List(int a[],int n) { int i; for (i = 0; i < n; i++) data[i] = a[i]; size = i; } int list_size() { } int list_insert(int i, int item) { if (i<1||i>size+1) return error; for(int j=size;j>=i;j--) { data[j ] = data[j-1]; } data[i - 1] = item; size++; return ok; } int list_delete(int i) { if (i<1 || i>size) return error; for (int j = i; j < size; j++) data[j - 1] = data[j]; size--; return ok; } int list_get(int i) { if (i<1 || i>size + 1) return error; cout << data[i - 1]<<endl; return ok; } void list_display() { cout << size<<" "; for (int i = 0; i < size; i++) cout<< data[i]<<" "; cout << endl; } }; int main() { Seqlist list; int n; cin >> n; int a[1000]; for (int i = 0; i < n; i++) cin >> a[i]; list.create_List(a, n); list.list_display(); //insert a number int insorder1, insnum1; cin >> insorder1 >> insnum1; if (list.list_insert(insorder1, insnum1)==0) list.list_display(); else cout << "error" << endl; int insorder2, insnum2; cin >> insorder2 >> insnum2; if (list.list_insert(insorder2, insnum2) == 0) list.list_display(); else cout << "error" << endl; //delete a number int deleteorder1,deleteorder2; cin >> deleteorder1; if (list.list_delete(deleteorder1) == 0) list.list_display(); else cout << "error" << endl; cin >> deleteorder2; if (list.list_delete(deleteorder2) == 0) list.list_display(); else cout << "error" << endl; //search a item; int searchorder1, searchorder2; cin >> searchorder1; int res1=list.list_get(searchorder1); if (res1 == -1) cout << "error" << endl; cin >> searchorder2; int res2 = list.list_get(searchorder2); if (res2 == -1) cout << "error" << endl; //system("pause"); }
首先是定義一個線性表的class,資料域包括一個數組,一個數組的長度和最大容納量.然後通過create_list的函式傳進來在主函式中已經輸入的陣列和陣列長度,然後一個個賦值給data陣列。
插入
首先明確的一點是位置是按一開始的,而我們的陣列是從0開始,而且因為這個是位置連續的,必須通過移動插入點以後的陣列項來騰出一個位置,然後騰出來的位置給我們想要插入的數字,然後長度加一。
刪除
首先判斷我們想要刪除的陣列項有沒有,如果有才進行刪除操作,刪除跟插入類似,通過覆蓋想要刪除的資料來達到刪除的目的。