順序表最主要的特點是可以進行 隨機訪問,即可以通過表頭元素的地址和元素的編號(下標),在 O(1)的時間複雜度內找到指定的元素。
順序表的不足之處是插入和刪除操作需要移動大量的元素,從而保持邏輯上和物理上的連續性。
在代碼裏面:
~Vector() {
delete[] data;
}
叫做析構函數。
析構函數是提供一個在對象刪除前可以釋放這個對象所佔有的資源的機會
#include <iostream>
#include <cstring>
using namespace std;
class Vector {
private:
int size, length;
int *data;
public:
Vector(int input_size) {
size = input_size;
length = 0;
data = new int[size];
}
~Vector() {
delete[] data;
}
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;
}
計蒜客練習答案:
順序表的循環左移:
這裏就是輸出時左移而已
#include <iostream>
#include <cstring>
using namespace std;
class Vector {
private:
int size, length;
int *data;
public:
Vector(int input_size) {
size = input_size;
length = 0;
data = new int[size];
}
~Vector() {
delete[] data;
}
bool insert(int loc, int value) {
if (loc >= size) {
loc-=size;
}
for (int i = length; i > loc; --i) {
data[i] = data[i - 1];
}
data[loc] = value;
length++;
return true;
}
void print(int k) {
for(int i=k;i<length;i++){
if(i>k){
cout<<" ";
}
cout<<data[i];
}
for(int i=0;i<k;i++){
cout<<" "<<data[i];
}
cout<<endl;
}
};
int main() {
int n,k;
cin>>n>>k;
Vector a(n);
for(int i=0;i<n;i++){
int t;
cin>>t;
a.insert(i,t);
}
a.print(k);
return 0;
}