线性表的基本操作 C++

来源:互联网 发布:中韩贸易逆差数据 编辑:程序博客网 时间:2024/05/22 02:15
/*线性表存储结构: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;}

原创粉丝点击