数据结构实现线性表顺序存储

线性表是n个具有相同类型的数据元素的有限序列。例如Array=(a1,a2,a3.......an);除a1和an其他元素都有一个前驱和一个后继,a1没有前驱,an没有后继。

我们可以用c++类实现:

#include<iostream>
using namespace std;
const int Max = 100;//常量Max
class SeqList
{
public:
	SeqList()//建立空的顺序表
	{
		length = 0;
	}
	
	SeqList(int a[], int n);//以数组a[]为初始化数据建立一个长度为n的顺序表
	~SeqList();
	void PushBack(int x);//尾部插入x 
	int Length();//返回数组的长度
	int Get(int i);//得到第i个位置的数
	int Locate(int x);//返回这个数的索引
	void Insert(int i, int x);//在i位置插入数字x
	void  Delete(int i);//删除第i个数字
	void PrintList();//打印链表


private:
	int data[Max];//存放数据元素的数组
	int length;//顺序表的长度
};
SeqList::SeqList(int a[], int n)
{
	if (n > Max)
	{
		cout << "参数非法" << endl;
	}
	for (int i = 0; i < n; i++)
	{
		data[i] = a[i];

	}
	length = n;
}
int SeqList::Get(int i)//获取第i个位置的元素,这个i从1开始。
{
	if (i<1 || i>length)
	{
		cout << "输入错误" << endl;
	}
	
	return data[i - 1];//数组索引从0开始所以返回i-1;

}
int SeqList::Locate(int x)//返回x元素的索引。
{
	for (int i = 0; i < length; i++)
	{
		if (x == data[i])
		{
			return i + 1;
		}
	}
	return 0;
}
void SeqList::Insert(int i, int x)//在i位置插入x
{
	if (length > Max)
		cout << "顺序表已满" << endl;
	if (i<1 || i>length + 1)
		cout << "参数非法" << endl;
	for (int j = length - 1; j >= i - 1; j--)
	{
		data[j + 1] = data[j];

	}
	data[i - 1] = x;
	length++;
}
void  SeqList::Delete(int i)//删除第i个元素——也就是索引中i-1个元素
{
	if (length == 0)
		cout << "顺序表为空" << endl;
	if (i<1 || i>length)
		cout << "参数非法" << endl;
	int x = data[i - 1];
	for (int j = i; j < length; j++)
	{
		data[j - 1] = data[j];

	}
	length--;
}
void SeqList::PrintList()
{
	cout << "打印数组中的数据" << endl;
	for (int i = 0; i < length; i++)
	{
		cout << data[i] << " ";
	}
	cout << endl;
}
SeqList::~SeqList()
{

}
int SeqList::Length()//返回数组中元素的个数
{
	return length;
}
void SeqList::PushBack(int x)//数组尾部插入
{
	
	data[length] = x;
	length++;
}
void Merge(SeqList& L1, SeqList& L2, SeqList& L3)//合并两个数组
{
	int i = 1,j=1,k=1;
	int n1 = L1.Length();
	int n2 = L2.Length();
	while (i <= n1 && j <= n2)
	{
		if (L1.Get(i) <= L2.Get(j))
		{
			L3.Insert(k, L1.Get(i));
			i++;
		}
		else
		{
			L3.Insert(k, L2.Get(j));
			j++;
		}
		k++;
	}
	while (i <= n1)
	{
		L3.Insert(k, L1.Get(i));
		i++;
		k++;
	}
	while (j <= n2)
	{
		L3.Insert(k, L2.Get(j));
		j++;
		k++;
	}
}

int main()
{
	SeqList arr;//创建一个空数组
	cout<<"数组为空"<< arr.Length() << endl;

	arr.PushBack(10);
	arr.PushBack(10);
	arr.PushBack(34);
	cout << "arr 的长度:" << arr.Length() << endl;
	cout << "打印arr数组" << endl;
	arr.PrintList();
	arr.Insert(2, 4000);
	arr.PrintList();
	SeqList arr1;
	SeqList arr2;
	arr1.PushBack(12);
	arr1.PushBack(10);
	arr1.PushBack(23);
	arr1.PushBack(45);
	Merge(arr, arr1, arr2);//合并arr和arr1到arr2中
	arr2.PrintList();
	




	return 0;
}

哈哈,记得关注哦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值