线性表-顺序存储结构

线性表-顺序存储结构(错误的,不要看了)

顺序存储结构

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素

三个属性

  • 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置
  • 线性表的最大存储容量:数组的长度MaxSize
  • 线性表的当前长度:length

数据长度和线性表长度的区别

  • 数据长度就是数组的长度,存放线性表的存储空间的长度,存储分配后这个量一般是不变的
  • 线性表长度是线性表中数据元素的个数,随着线性表的删除插入操作,这个长度是改变的
  • 在任何时刻,数组的长度大于等于线性表长度

获得元素,插入,删除操作

//C++代码

例:获得元素值

    const int numsLength = 6;//数组大小
	int nums[numsLength] = { 1, 2, 3, 4, 5 };
	//获取下标为2的元素,并打印
	int getNum = nums[2];
	cout << getNum << endl;

例:插入数据

    //插入
	int InsertIndex = -1;	//要插入元素的下标
	int InsertNum;			//插入的数值
	cout << "请输入要插入的数值和下标:";
	cin >> InsertNum >> InsertIndex;

	if (InsertIndex == -1 || InsertIndex < 0 || InsertIndex > 5)
	{
		cout << "下标输入有误!" << endl;
	}
	else
	{
		for (int i = numsLength - 1; i > InsertIndex; i--)
		{
			nums[i] = nums[i - 1];//移动元素
		}
		nums[InsertIndex] = InsertNum;//插入数值
		//遍历数组
		for (int i = 0; i < numsLength; i++)
		{
			cout << nums[i] << endl;
		}
	}

例:删除数据

    //删除
	int DeleteNum;
	int DeleteIndex = -1;//删除的数值下标
	cout << "请输入要删除的元素:";
	cin >> DeleteNum;
	//查找要删除的元素的下标位置
	for (int i = 0; i < numsLength; i++)
	{
		//找到和DeleteNum相同的元素
		if (nums[i] == DeleteNum)
		{
			DeleteIndex = i;
			break;
		}
	}
	if (DeleteIndex == -1)
	{
		cout << "要删除的数值没有找到!" << endl;
	}
	else//找到要删除的元素
	{
		for (int i = DeleteIndex; i < numsLength-2; i++)
		{
			nums[i] = nums[i + 1];//移动元素
		}
		//遍历数组
		for (int i = 0; i < numsLength - 2; i++)
		{
			cout << nums[i] << endl;
		}
	}

复杂度

在存、读数据时,时间复杂度是:O(1);
插入、删除时,时间复杂度是:O(n);

优缺点

优点

  • 无须为表示表中元素之间的逻辑关系而增加额外的存储空间
  • 可以快速地存取表中任意位置的元素

缺点

  • 插入和删除操作需要移动大量元素
  • 当线性表长度变化较大时,难以确定存储空间的容量

猜你喜欢

转载自blog.csdn.net/weixin_43340991/article/details/83216102