前言
*初學者一定要一行一行看!!!!,我相信你會學會的。
ok,上源碼
如果哪裏有錯或者哪裏不懂歡迎留言,我每天都在!
#include <iostream>
using namespace std;
#define maxsize 20 //自定以宏定義maxsize=20 他是一個常量
#define ok 1 //同上
#define error 0 //同上
typedef int Elemtype; //人話:定義Elemtype它是整型可以拿他當int用
class list {
public:
int data[maxsize];
int length; //當前長度
};
//查詢操作
int getElem(list l,int i,Elemtype* e) {//格式:(鏈表長度L,獲取位置i,獲取元素的類型+變量名)
if (l.length = 0 || i<1 || i>l.length) {
return error;
}
*e = l.data[i - 1];
return ok;
}
//插入操作
int insert(list* L,int i,Elemtype e) {//e爲要插入數據 可根據需要定義類型
int k;
if (L->length == maxsize) {//順序線性表已經滿了
return error;
}
if (i<1 || i>L->length + 1) {//i不在線性表的長度範圍內
return error;
}
if (i <= L->length) {//符合要求
for (k = L->length - 1; k >= i - 1;k--) {
L->data[k+ 1] = L->data[k];
}
}
L->data[i - 1] = e;//將要插入的元素加進去
L->length++;
}
//刪除操作
int dele(list* L, int i,Elemtype* e) {
int t;
if (i < 1 || i > L->length)
return error;
*e = L->data[i-1];
if (i <L->length) {
for (t = i; t <L->length ; t++) {
L->data[t - 1] = L->data[t];
}
}
L->length--;
return ok;
}
int main() {
list p;
p = { {1,2,3,4,5},10 };//爲順序表初始化數據(其中{1,2,3,4,5}就是順序表裏的數據,10代表他的當前長度)
cout << "遍歷初始數據***********" << endl;
for (int j = 0; j < 5; j++) {
cout << p.data[j] << ",";
}
cout << endl << endl;
//刪除表中第二個位置的數
cout << "刪除位置爲2後的結果:";
dele(&p,2,&p.data[2]);
for (int j = 0; j < 4; j++) {
cout << p.data[j] << ",";
}
cout << endl << endl;
insert(&p, 3, 9);
cout << "在位置3插入數據後的結果:";
//遍歷(人話:把數組裏所有數都打印出來)
for (int i = 0; i < 5; i++) {
cout << p.data[i]<<",";
}
cout << endl << endl;
}
//優點:1.無需爲表中元素之間的邏輯關係而增加額外存儲空間
// 2.可以快速存取表中任意位置的元素
//缺點:
// 1.插入和刪除操作需移動大量元素
// 2.當線性表長度變化較大時,難以確定存儲空間容量
// 3.容易造成存儲空間的碎片。