线性表的顺序表示与实现

2.1线性表的定义和特点

定义:用数据元素的有限序列表示,有一个首结点,和一个为结点,除首结点和尾结点外,其它结点都有一个直接前趋和直接后继。
特点:同一线性表的元素必定具有相同属性,元素间关系是线性。

2.2案例引入

2.2.1稀疏多项式的运算

1.创建一个新数组。
2.分别从头遍历比较两个多项式的每一项
若指数相同,对应系数相加,若其和不为零,则在c中会增加一个新项。
若指数不相同,则将指数较小的项赋值到c中。
3.一个多项式已遍历完毕时,将另一个多项式依次复制到c中即可。

2.2.2图书信息管理系统

2.4.3的代码组合成

2.3线性表的类型定义

线性表的重要基本操作
1.初始化
2.取值
3.查找
4.插入
5.删除

2.4线性表的顺序表示和实现

线性表的顺序表示又称为顺序存储结构或者顺序映像。

2.4.1顺序存储定义

把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。

2.4.2顺序存储方法

用一组地址连续的存储单元依次存储线性表的元素,可以通过数组来实现。

2.4.3顺序存储(顺序表的实现)

2.4.3.1初始化

先定义结构体

// 书籍结构体
struct Book
{
	string id;			// 编号
	string name;		// 名字
	double price;		// 价格
};
// 顺序表的结构体
typedef struct 
{
	Book *elem;		// 顺序表的地址
	int length;		// 表长
}Sqlist;

再初始化顺序表

// 顺序表的初始化
status InitlistSq(Sqlist &L)
{
	L.elem = new Book[MAXSIZE];
	if (!L.elem)
	{
		exit(OVERFLOW);
	}
	L.length = 0;
	return OK;
}

2.4.3.2取值

status GetElems(Sqlist L, int i, Book &e)
{
	if (i<1 || i>L.length)
	{
		return ERROE;
	}
	e = L.elem[i - 1];
	return OK;
}

2.4.3.3查找

// 顺序表的查找
int locateElem_Sq(Sqlist L, double e)
{
	for (int i = 0; i < L.length; i++)
	{
		if (L.elem[i].price == e)
		{
			return i + 1;
		}
	}
	return 0;	// 查找失败
}

2.4.3.4插入

// 顺序表的插入
status ListInsertSq(Sqlist &L,int i,Book e)
{
	if (i < 1 || (i > L.length + 1))
	{
		return ERROE;
	}

	if (L.length == MAXSIZE)
	{
		return ERROE;
	}

	for (int j = L.length-1; j >=i-1 ; j++)
	{
		L.elem[j + 1] = L.elem[j];
	}
	L.elem[i - 1] = e;
	++L.length;

	return OK;
}

2.4.3.5删除

// 顺序表的删除
status ListDeleteSq(Sqlist &L,int i)
{
	if (i < 1 || (i > L.length ))
	{
		return ERROE;
	}
	for (int j = i; j <= L.length; j++)
	{
		L.elem[j - 1] = L.elem[j];
	}

	--L.length;
	return OK;
}

2.5顺序表的缺点

1.在插入,删除某一元素时,需要移动多个元素,效率慢。
2.浪费存储空间。
3.属于静态存储形式,元素个数不能自由补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值