数据结构-线性表-顺序表的简单应用(建立,初始化,插入,删除)

最近刚学习了数据结构的线性表中的顺序表。

首先简单的说一下线性表:
线性表是n个数据特性相同的元素的组成有限序列,是最基本且常用的一种线性结构(线性表,栈,队列,串和数组都是线性结构),同时也是其他数据结构的基础。

对于非空的线性表或者线性结构的特点:
1)存在唯一的一个被称作“第一个”的数据元素;

2)存在唯一的一个被称作“最后一个”的数据元素;

3)除第一个外,结构中的每个数据元素均只有一个前驱;

4)除最后一个外,结构中的每个数据元素均只有一个后继;

线性表有两种实现方式:顺序表和链表。然后这篇说的是顺序表。

概念:用一组地址连续的存储单元依次存储线性表的数据元素,这种存储结构的线性表称为顺序表。

特点:逻辑上相邻的数据元素,物理次序也是相邻的。

然后现在有一个需求需要用顺序表来实现,需求如下:
->.将3,5,8,11插入到顺序表LA中;
->.将2,6,8,9,11,15,20插入到顺序表LB中;
->打印出插入后的LA,LB;
->将LB中第五个数据删除,并打印出删除的数据
->打印出删除后的LB

代码如下,注释很详细,就不多说了。

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
struct SqList
{
	int *elem;//存储空间首地址
	int length;//线性表元素的个数 
	int listsize;//当前线性表的最大容量 
};

int InitList_Sq(SqList &L)//构建一个空的线性表,开始时线性表不占有空间 
{
	L.elem=0;
	L.length=0;
	L.listsize=0;
	return 1;
}

int ListInsert_Sq(SqList &L,int i,int x)//在顺序表L中第i个位置插入数x 
{
	if(L.listsize==0)//如果是第一次插入数据,申请一个空间 
	{
		L.elem=new int[1];
		L.listsize=1;
	}
	if(i<0||i>L.length)		return 0;//插入位置不合法 
	if(L.length==L.listsize) //空间不足,申请比原来多一倍的空间
	{
		int *newbase;
		newbase=new int[L.listsize*2];
		if(newbase==0)	return 0;//如果原来顺序表的空间为0
		for(int j=0;j<L.listsize;j++)
			newbase[j]=L.elem[j];
		delete L.elem;//释放原来的空间
		L.elem=newbase;//线性表的指针指向新空间的首地址;
		L.listsize*=2;
	}
	for(int j=L.length-1;j>=i;j--)
		L.elem[j+1]=L.elem[j]; 
	L.elem[i]=x;
	L.length++;
	return 1;
} 

int ListDelete_Sq(SqList &L,int i,int &x)//删除顺序表L的第i个位置的元素,用x返回其值 
{
	if(i<0||i>L.length-1)	return 0;
	x=L.elem[i];
	for(int j=i+1;j<=L.length;j++)
		L.elem[j-1]=L.elem[j];
	L.length--;
	return 1;
}

void print(SqList &L)//从前到后打印顺序表中的数据 
{
	for(int i=0;i<=L.length-1;i++)
		cout<<L.elem[i]<<" ";
	cout<<endl;
}

int main()
{
	SqList LA,LB;//定义顺序表LA,LB 
	InitList_Sq(LA);//初始化顺序表LA 
	InitList_Sq(LB);//初始化顺序表LB 
	int a[4]={3,5,8,11};
	int b[7]={2,6,8,9,11,15,20};
	for(int i=0;i<4;i++)
		ListInsert_Sq(LA,LA.length,a[i]);//将a中的数插入LA中 
	print(LA);
	for(int i=0;i<7;i++)
		ListInsert_Sq(LB,LB.length,b[i]);//将b中的数插入LB中 
	print(LB);
	int x;
	ListDelete_Sq(LB,5,x);//从LB中删除下标5处的元素,存储到x中
	cout<<x<<endl;
	print(LB);
	return 0;
} 
		
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给个选择

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值