数据结构-线性表

第二章 线性表及其实现

2.1. 线性表的类型与定义
线性表是n个数据元素的有限序列,由若干个数据项组成数据元素,数据元素称为记录,含有大量记录的线性表叫做文件
2.2. 线性表顺序表示和实现

#define LIST_INIT_SIZE 100//初始空间分配量
#define LISTINCREMENT  10//增量
typedef struct{
     ElemType *elem;//存储空间基址
     int  length;//当前长度
     int  listsize;//当前已分配量;
 }Sqlist;

 Status IntiList_Sq(SqList & L)//初始化线性表
{
	L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if (!L.elem)exit(OVERFLOW);
	L.length = 0;
	L.listsize = LIST_INIT_SIZE;
	return OK;}
	//一般出于实际出发,会有初始数据//
	//假设环境为int数据类型,该段代码没有考虑数据溢出的情况,只是方便初始化,也可用函数调用,使用插入新数据的函数来进行初始数据载入
	int n;
	printf("请输入要输入数据数量");
	scanf_s("%d", &n);
	printf("请输入数据");
	for (int i = 0; i < n; i++)
	{
		scanf_s("%d", &L.elem[i]);
		L.length++;//每次运行要注意加长度
	}


//插入一个新元素到指定位置上方
Status ListInsert_Sq(SqList & L, int i, ElemType e)
{
	ElemType *q,*p;
	ElemType *newbase;
	if (i<1 || i>L.length + 1)return ERROR;//判断插入位置是否合法
	if (L.length >= L.listsize)//若当前空间已满,增加分配
	{

		newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));分配大小为增量
		if (!newbase)exit(OVERFLOW);
		L.elem = newbase;
		L.listsize += LISTINCREMENT;
	}
	q = &(L.elem[i - 1]);//q为插入的位置
	for (p = &(L.elem[L.length - 1]); p >= q; --p)
	{		*(p + 1) = *p;
    }//从q位置后整体向后移
	  *q = e;//赋值q
	  ++L.length;//表长加一
	
	return Status(OK);
}

Status ListDelete_Sq(SqList & L, int i, ElemType & e)
{
	if ((i < 1) || (i > L.length))return ERROR;//删除位置合法性判断
	ElemType *q, *p;
	p = &(L.elem[i - 1]);//指向删除位置
	e = *p;//取出值
	q = L.elem + L.length - 1;//指向表尾
	for(++p;p<=q;++p)
	{
		*(p - 1) = *p;
	};//从p开始后面的值赋值给前面的
	--L.length;//减短表长
	return Status(OK);
}//删除某一节点

关于插入元素的与删除元素的算法复杂度问题
在这里插入图片描述
2.3. 线性表的链式表示和实现

  1. 线性链表
  2. 循环链表
  3. 双向链表

2.4. 一元多项式的表示及相加

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性表是一种常见的数据结构,它表示具有相同数据类型的一组元素的有序序列。线性表中的元素之间存在一种顺序关系,每个元素都有一个前驱和一个后继(除了第一个元素没有前驱,最后一个元素没有后继)。线性表可以用顺序存储结构或链式存储结构实现。 在顺序存储结构中,线性表的元素按照顺序存储在连续的内存空间中,可以通过元素的下标来访问和操作元素。插入或删除元素时,需要移动其他元素,因此操作的时间复杂度较高。 链式存储结构中,线性表的每个元素都包含一个数据域和一个指针域,指针指向下一个元素。通过指针的链接,元素可以按照任意顺序存储在内存中,插入和删除操作只需要改变指针的指向,因此时间复杂度较低。 线性表常见的操作包括插入、删除、查找、获取长度等。其中插入和删除操作需要注意保持线性表的顺序关系。 常见的线性表有数组、链表、栈和队列。数组是最简单的线性表,通过下标可以直接访问元素;链表是动态存储结构,插入和删除操作方便,但访问元素需要遍历链表;栈是一种特殊的线性表,只允许在表的一端进行插入和删除操作;队列也是一种特殊的线性表,只允许在表的一端进行插入操作,在另一端进行删除操作。这些数据结构在实际应用中都有各自的应用场景和优缺点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值