/*线性表存储结构: 1.存储空间的起始位置; 2最大存储容量; 3.当前的长度*/ #include"iostream" #include "vector" using namespace std; const int MAXSIZE_ = 20; typedef struct MyList { int *data;//起始位置 int listSize;//最大容量 int length;//当前长度 }; //线性表的初始化 MyList Init(int len) { MyList L; L.listSize = len == 0 ? MAXSIZE_ : len; L.data = new int[L.listSize]; L.length = 0; return L; } //线性表的建立 MyList Create(MyList &L) { for (int i = 0; i < 10; i++) { L.data[i] = i; L.length++; } return L; } //释放List空间 void FreeList(MyList &L) { L.length = 0; L.listSize = 0; delete[] L.data; return ; } //查找(按元素),返回元素所在位置 vector<int> getiElem(const MyList &L, int elem) { vector<int> result; for (int i = 0; i < L.length; i++) { if (L.data[i] == elem) result.push_back(i); } return result; } /*插入: 1.如果插入的位置不合理,那么就抛出异常。 2.如果线性表长度大于等于数组长度,则抛出异常或者动态增加容量。 3.从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置。 4.将要插入的元素填入位置i处。 5.表长加1。 */ bool ListInsert(MyList &L, int i, int elem) { if (i<0 || i>L.listSize - 1) return false; //如何重新分配data的内存 if (i < L.length - 1) { for (int k = L.length; k > i - 1;k--) L.data[k] = L.data[k-1]; } L.data[i - 1] = elem; L.length++; return true; } /*删除: 1.如果删除位置不合理,抛出异常 2.取出删除元素 3.从删除元素位置开始遍历到最后一个元素位置,分别将它们向前移动一个位置 4.表长减1 */ bool ListDelete(MyList &L, int elem) { if (L.length == 0) return false; for (int i = 0; i < L.length;i++) { if (L.data[i] == elem) { for (int j = i; j < L.length; j++) L.data[j] = L.data[j + 1]; L.length--; } } return true; } int main() { MyList L=Init(15); Create(L); L.data[L.length] = 0; L.length++; vector<int> result=getiElem(L, 0); bool isInsert = ListInsert(L, 2, 2); bool isDelete = ListDelete(L, 2); for (int i = 0; i < L.length; i++) cout << L.data[i] << " "; FreeList(L); system("pause"); return 0; }
线性表的基本操作 C++
猜你喜欢
转载自blog.csdn.net/cat1992/article/details/75395212
今日推荐
周排行