线性表的基本操作 C++

/*线性表存储结构:
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;
}


猜你喜欢

转载自blog.csdn.net/cat1992/article/details/75395212
今日推荐