您的位置:首页 > 编程语言 > C语言/C++

C++ 顺序表的建立

2016-04-03 23:13 411 查看
这里包含了顺序表的6种基本操作,顺序表的构造,删除,扩充,查找,插入,遍历都是些很基础的东西

另外我自己还多写了一个关于顺序表元素的移动的函数。(贼简单一个)

顺序表的性质和数值类似,其最主要的特点就是可以进行随机访问,并可以通过表元素的下标找到指定的元素,这样,他的时间复杂度只有O(1),不足之处就是,若要对其中某个元素进行更改删除就必须要移动表中的其他元素,这样才能保证顺序表的逻辑性与连续性。

#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() {                  //析构函数,删除data
delete[] data;
}
bool insert(int loc, int value) {     //bool类型的插入函数
if (loc < 0 || loc > length) {    //如果插入的位置<0或者>当前顺序表长度,返回false
return false;
}
if (length >= size) {              //如果当前顺序表长度大于或等于顺序表容量,返回false
return false;
//expand();                      //  也可以对顺序表进行扩充
}
for (int i = length; i > loc; --i) {   //将要插入的数据后面的数据向后位移一个长度
data[i] = data[i - 1];
}
data[loc] = value;
length++;
return true
9959
;
}
int search(int value) {                     //查找函数,寻找顺序表中的某个元素,查找成功返回该元素位置
for (int i = 0; i < length; ++i) {
if (data[i] == value) {
return i;
}
}
return -1;                             //查找失败,返回-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;
}
void move(int number){                      //功能函数,将顺序表中元素整体向前移动number个位置,并将前number个元素移到顺序表的末尾
if(number + length >= size) {
expand();
}
for(int i = 0; i < number; i++){
data[length+i] = data[i];
}
for(int i = number; i < length + number; i++){
data[i-number] = data[i];
}

}
void expand(){                     //扩容函数,将顺序表的容量翻倍
int * old_data = data;
size = size * 2;
data = new int [size];
for(int i = 0 ; i < length ;i++){
data[i] = old_data[i];
}
delete [] old_data;
}
};
int main() {
int n,k;
cin>>n>>k;
Vector a(n);
for(int i = 0; i < n; i++){
int temp ;
cin>>temp;
a.insert(i,temp);
}
a.move(k);
a.print();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: