8:39 2016/9/8 線性表是一種常用邏輯結(jié)構(gòu)(也是邏輯結(jié)構(gòu)中的線性結(jié)構(gòu)),。 順序表:線性表按順序存儲(chǔ)。 順序表的抽象數(shù)據(jù)類型: ADT sequence_list{ 數(shù)據(jù)集合 K:K = {k1,k2,……,Kn}, n>=0, K中的元素是 datatype 類型,; 數(shù)據(jù)關(guān)系 R:R = {r} r = {<K(i),K(i+1)> | i = 1,2,……,n-1}. 操作集合如下: 1. void init(sequence_list *slt) 順序表的初始化——置空表,。 2. void append(sequence_list *slt, datatype x) 在順序表的后部插入值為 x 的結(jié)點(diǎn),。 3. void display(sequence_list slt) 打印順序表各結(jié)點(diǎn)值。 4. int empty(sequence_list slt) 判斷順序表是否為空,。 5. int find(sequence_list slt, datatype x) 查找順序表中值為 x 結(jié)點(diǎn)的位置,。 6. datatype get(sequence_list slt, int i) 取得順序表中第 i 個(gè)結(jié)點(diǎn)的值。 7. void insert(sequence_list *slt, int position, datatype x) 在順序表的 position 位置插入值為 x 的結(jié)點(diǎn),。 8. void delete(sequence_list *slt, int position) 刪除表中第 position 位置的結(jié)點(diǎn),。 }ADT sequence_list 順序表的代碼實(shí)現(xiàn): //************************************************************ //*程序作者:Mr.Two //*完成日期:2016/09/08 //*章 節(jié):第2章 //*題 號(hào):習(xí)題2.2.2 //*題 目:順序表的實(shí)現(xiàn) //************************************************************ //#include<stdlib.h> #include<iostream> using namespace std; #define MAX_SIZE 100 typedef int datatype; typedef struct { datatype a[MAX_SIZE]; int size; }sequence_list; void init(sequence_list *slt) { slt->size = 0; } void append(sequence_list *slt, datatype x) { if (slt->size == MAX_SIZE) cout << "The sequence list is full!" << endl; else slt->a[slt->size++] = x; } void display(sequence_list slt) { cout << "The sequence list numbers are: " << endl; for (int i = 0; i < slt.size; i++) { cout << slt.a[i] << " "; } cout << endl; } int empty(sequence_list slt) { return slt.size == 0 ? 1 : 0; } int find(sequence_list slt, datatype x) { for (int i = 0; i<slt.size; i++) { if (slt.a[i] == x) return i; } cout << "Not find!" << endl; } datatype get(sequence_list slt, int i) { if (i<0 || i>slt.size) { cout << "The position is error!" << endl; return -1; } return slt.a[i]; } void insert(sequence_list *slt, int position, datatype x) { if (slt->size == MAX_SIZE) { cout << "The sequence list is full!" << endl; } else { for (int i = slt->size; i>position; i--) { slt->a[i] = slt->a[i - 1]; } slt->a[position] = x; slt->size++; } } void dele(sequence_list *slt, int position) { if (empty(*slt)) cout << "The sequence list is empty!" << endl; else { for (int i = position; i<slt->size; i++) { slt->a[i] = slt->a[i + 1]; } slt->size--; } } int menu() { int select = 0; cout << "*************************************************************" << endl; cout << "1.置空\(chéng)n" << "2.在尾部插入\n" << "3.插入\n" << "4.查找元素位置\n" << "5.查找元素\n" << "6.刪除\n" << "7.瀏覽"<<endl; cout << "*************************************************************" << endl; cout << "請(qǐng)輸入你的選擇:" << endl; cin >> select; return select; } int main(int argc, char *argv[]) { //TODO :Add what are you want to add sequence_list slt; datatype x; int position; for (;;) { system("pause"); system("cls"); switch (menu()) { case 1: init(&slt); break; case 2: cout << "請(qǐng)輸入你要添加的元素:" << endl; cin >> x; append(&slt, x); break; case 3: cout << "請(qǐng)輸入你要插入的元素:"<<endl; cin >> x; cout << "請(qǐng)輸入你要插入的位置:" << endl; cin >> position; insert(&slt, position, x); break; case 4: cout << "請(qǐng)輸入你要查找的元素:" << endl; cin >> x; position = find(slt, x); cout << "元素所在位置: " << position << endl; break; case 5: cout << "請(qǐng)輸入你要查找的位置:" << endl; cin >> position; x = get(slt, position); cout << "元素的值為: " << x << endl; break; case 6: cout << "請(qǐng)輸入你要?jiǎng)h除元素的所在位置:" << endl; cin >> position; dele(&slt, position); case 7: display(slt); break; default: cout << "請(qǐng)輸入正確的選擇!" << endl; return -1; } } return 0; }
|
|