严蔚敏版数据结构中的线性数据结构是基础数据结构之一,包含的算法代码涉及线性表、链表、栈、队列、数组、广义表以及串等数据结构的实现和操作。下面将详细介绍这些知识点。
线性表是数据结构中常见的逻辑结构,它具有相同的特性:数据元素之间是一对一的关系,除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。在代码中,线性表是通过结构体list实现的,包含了指向数据结点的指针p,当前顺序表长度length和当前分配的线性表长度listsize三个成员变量。
线性表的操作包括初始化、销毁、清空、判断是否为空、获取元素、获取前驱元素、获取后继元素、插入元素、删除元素等基本功能。
初始化函数initlist用于构造一个空的线性表,会分配一块内存空间,设置当前顺序表长度length为0,并设置当前分配的线性表长度listsize为一个预设值LIST_INIT_SIZE。销毁函数destroylist用于销毁一个线性表,如果线性表存在,会释放其内存空间,并打印销毁成功的消息。
清空函数clearlist用于将线性表置空,即删除所有元素,并设置当前顺序表长度length为0。判断是否为空的函数listempty用于检查线性表是否为空表,如果线性表的指针p为空,则返回真。
获取元素的函数getelem用于返回线性表中第i个元素,如果线性表存在并且索引i有效,则将其存储到e中并返回真。获取前驱元素和后继元素的函数priorelem和nextelem分别用于获取第i个元素的前驱和后继元素。
插入元素的函数insertlist用于将新元素e插入到线性表l中第i个元素的后面,如果插入成功,返回真。删除元素的函数deletelist用于删除表中第i个元素,如果删除成功,将该元素的值存储到e中并返回真。
归并两个按非递减排列的线性表的函数mergerlist用于将两个线性表la和lb归并成一个新的线性表lc,归并过程中要求la和lb都是非递减排列的。
链表是一种物理存储结构,它的数据元素分散存储在内存中的任意位置,每个数据元素是一个结点,每个结点由数据域和指针域组成。链表不需要预先分配存储空间,数据元素的插入和删除不需要移动其它元素,只需要改变指针的指向即可。
栈是一种后进先出(LIFO)的数据结构,具有插入、删除、查找和访问等操作。在栈中,最后一个插入的元素第一个被删除。栈的操作包括入栈(push)和出栈(pop),以及获取栈顶元素(top)等。
队列是一种先进先出(FIFO)的数据结构,与栈相反,队列允许插入操作在一头进行,而删除操作在另一头进行。队列的操作包括入队(enqueue)和出队(dequeue),以及获取队首元素(front)等。
数组是一种线性数据结构,它的每个元素具有相同的类型,可以通过下标进行访问。数组的元素在内存中是连续存放的。
广义表是线性表的推广,其元素可以是原子项,也可以是另一个广义表,因此广义表可以是多层次的。广义表的操作包括创建、销毁、获取长度、获取表头和表尾等。
串是由零个或多个字符组成的有限序列,它是字符型数据的线性集合。串的操作包括赋值、连接、求子串、比较、查找和替换等。
以上就是严蔚敏版数据结构中涉及线性数据结构的算法代码的知识点总结。在编写数据结构的算法时,需要根据实际应用场景和性能要求来选择合适的数据结构和算法。