C++ 顺序表的建立
2016-04-03 23:13
411 查看
这里包含了顺序表的6种基本操作,顺序表的构造,删除,扩充,查找,插入,遍历都是些很基础的东西
另外我自己还多写了一个关于顺序表元素的移动的函数。(贼简单一个)
顺序表的性质和数值类似,其最主要的特点就是可以进行随机访问,并可以通过表元素的下标找到指定的元素,这样,他的时间复杂度只有O(1),不足之处就是,若要对其中某个元素进行更改删除就必须要移动表中的其他元素,这样才能保证顺序表的逻辑性与连续性。
另外我自己还多写了一个关于顺序表元素的移动的函数。(贼简单一个)
顺序表的性质和数值类似,其最主要的特点就是可以进行随机访问,并可以通过表元素的下标找到指定的元素,这样,他的时间复杂度只有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; }