線性表的邏輯結(jié)構(gòu)
線性表是由n個類型相同的數(shù)據(jù)元素組成的有限序列虑灰,記為(a1,a2,…兢榨,ai-1讼油,ai宗苍,ai+1赚窃,…,an)抖单。其中萎攒,這里的數(shù)據(jù)元素可以是原子類型,也可以是結(jié)構(gòu)類型矛绘。線性表的數(shù)據(jù)元素存在著序偶關(guān)系躺酒,即數(shù)據(jù)元素之間具有一定的次序。在線性表中蔑歌,數(shù)據(jù)元素ai-1在ai的前面,ai又在ai+1的前面揽碘,可以把a(bǔ)i-1稱為ai的直接前驅(qū)元素次屠,ai稱為ai+1的直接前驅(qū)元素园匹。ai稱為ai-1的直接后繼元素,ai+1稱為ai的直接后繼元素劫灶。
在線性表中裸违,除了第一個元素a1,每個元素有且僅有一個直接前驅(qū)元素本昏;除了最后一個元素an供汛,每個元素有且只有一個直接后繼元素。
順序表的插入:
順序表的刪除:
線性表中順序表的實現(xiàn)(C++語言描述):
#include <iostream>
#include <cstring>
using namespace std;
//自定義順序表類Vector
class Vector {
//設(shè)置順序表的size和length
//其中size是指順序表的最大尺寸
//length是指順序表中data的長度
private:
int size, length;
int *data;
public:
Vector(int input_size) {
size = input_size;
length = 0;
data = new int[size];
}
~Vector() {
delete[] data;
}
//在插入操作中涌穆,根據(jù)下標(biāo)loc怔昨,插入value
//插入后為保順序,loc后的元素挨個向后偏移一個位置,切順序表長度增加
bool insert(int loc, int value) {
if (loc < 0 || loc > length) {
return false;
}
if (length >= size) {
return false;
}
for (int i = length; i > loc; --i) {
data[i] = data[i - 1];
}
data[loc] = value;
length++;
return true;
}
int search(int value) {
for (int i = 0; i < length; ++i) {
if (data[i] == value) {
return i;
}
}
return -1;
}
//刪除操作宿稀,刪除某一個元素時趁舀,后面的元素一次向前偏移一個位置,順序表長度減少
bool remove(int index) {
if (index < 0 || index >= length) {
return false;
}
for (int i = index + 1; i < length; ++i) {
data[i - 1] = data[i];
}
length = length - 1;
return true;
}
void print() {
for(int i=0; i<length; i++)
{
if(i > 0)
{
cout << " ";
}
cout << data[i];
}
cout << endl;
}
};
int main() {
Vector a(2);
cout << a.insert(0, 1) << endl;
cout << a.insert(0, 2) << endl;
a.print();
cout << a.remove(1) << endl;
a.print();
cout << a.search(0) << endl;
cout << a.search(1) << endl;
return 0;
}