线性表的理论性东西

一、线性表定义:1. 线性表(list)是零个或多个数据元素的集合。2. 线性表中的数据元素之间是有顺序的。3. 线性表中数据元素个数是有限的。4. 线性表中数据元素类型必须相同。

数学上的定义:线性表是具有相同类型的n(n>=0)个数元素的有限序列。(a1, a2, ..., an)。ai是表项,n是长度。

二、性质:1. a0为线性表第一个元素,只有一个后继。2. an为线性表最后一个元素,只有一个前驱。3. 除了a0和an,其它表项都拥有前驱和后继。4. 线性表能够逐项访问和顺序存取。

三、线性表的操作:1. 创建线性表。2. 销毁线性表。3. 清空线性表。4. 将元素插入线性表中。5. 将元素从线性表中删除。6. 获取线性表中某个位置的元素。7. 获取线性表的长度。

四、线性表在程序中表现为一种特殊的数据类型。一般是需要我们自己抽象,然后自定义类型(struct)。

五、线性表的操作在程序中的表现为一组函数(api)。

六、线性表的物理结构分为顺序存储和链式存储。

七、线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表中的数据元素。一般是需要我们在代码实现中维护着一段地址连续的内存空间,可以理解为数组。


八、线性表顺序存储的设计与实现

1. 插入元素的算法:①判断线性表是否合法。②判断插入位置是否合法。③把最后一个元素到插入位置的元素依次后移一个位置。④将新元素插入。⑤线性表长度加1 。

2.获取线性表中元素的算法:①判断线性表是否合法。②判断位置是否合法。③直接通过数组下标的方式获取元素。

3.删除元素的算法:①判断线性表是否合法。②判断删除位置是否合法。③将元素取出。④将删除元素之后的元素向前移动一个位置。⑤线性表长度减一。

九、顺序储存的线性表优缺点:

1. 优点:无需为线性表中的逻辑关系增加额外的空间(可理解为固定长度的数组)。可以快速的获取表中合法位置的元素。

2. 缺点:在元素基数很大的情况下,插入和删除操作需要前后移动大量的元素。不能动态的分配存储空间。

十、线性表的链式存储:为了表示每个数据元素与其后继元素之间的逻辑关系,每个元素除了存储自身的信息外,还需要存储其后继节点的信息。



十一、表头结点、数据结点、尾结点

1. 表头结点:链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息,如链表长度。

2. 数据结点:链表中代表数据元素的结点,包含指向下一个元素的指针和数据元素的信息。

3. 尾结点:链表中的最后一个数据结点,其下一个元素指针为空,表示无后继。

十二、链表的设计与实现

1. 在C语言中可以用结构体来定义链表中的指针域,链表中的头结点也可以用结构体实现。

//结点指针域定义
typedef struct _LinkListNode
{
    struct _LinkListNode* next;
};

//头结点定义
typedef struct _LinkList
{
    LinkListNode header;
    int length;
};

//数据元素定义
struct BusinessBode
{
    LinkListNode node;
    int value;
}

2. 插入元素


3. 获取元素

//带头结点、位置从0的单链表
//返回链表中第3个位置处,元素的值
LinkListNode* LinkList_Get(LinkList* list, intpos)
{ 
	int    i = 0;
	TLinkList *tList = (TLinkList *)list;
	LinkListNode *current = NULL;
	LinkListNode *ret = NULL;

	if (list==NULL ||pos<0 || pos>=tList->length)
	{
		return NULL;
	}
	current = (LinkListNode *)tList;
	for (i=0; i<pos; i++)
	{
		current = current->next;
	}
	ret = current->next;
	return ret ;
}

4. 删除元素


十二、链表的优缺点

1. 优点:无需一次性定制链表的容量,插入和删除无需移动数据元素。

2. 缺点:数据元素必须保存后继元素的位置信息,获取指定数据的元素操作需要顺序访问之前的元素。






猜你喜欢

转载自blog.csdn.net/qq_31990987/article/details/80642240
今日推荐