线性表
-
定义:零个或多个数据元素的有限序列
-
线性表的抽象数据类型定义:
-
实现两个线性表集合A和B的并集操作。即:A=A U B :
-
线性表的顺序存储的结构代码:
-
线性表中第i+1个数据元素的位置和第i个数据元素的存储位置如下:
-
获得元素操作:
-
插入算法实现思路:
如果插入位置不合理,抛出异常; 如果线性长度大于数组长度,则抛出异常或动态增加容量; 从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置; 将要插入元素填入位置i处; 表长加1。
-
代码实现如下:
-
删除算法实现思路:
如果删除位置不合理,抛出异常; 取出删除元素; 从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置; 表长减1。
-
代码实现如下:
存储和读取数据时,无论在哪个位置,时间复制度都是O(1); 而插入和删除时,时间复杂度都是O(n)
-
线性表顺序存储结构的优缺点:
-
x线性表链式存储结构定义:
-
头结点:在链表的第一个结点前附设的一个结点,数据域可以不存储任何信息,也可以存储如线性表的长度等附加信息,头结点的指针域存储指向第一个结点的指针:
-
头指针与头结点的异同:
头指针: 链表指向的第一个结点的指针,若链表有头结点,则指向头结点的指针 头指针具有标识作用,所以常用头指针冠以链表的名字 无论链表是否为空,头指针均不为空。头指针是链表的必要元素 头结点: 头结点是为了操作的统一和方便而设立的;放在第一元素的结点之前,其数据域一般无意义(也可以放链表的长度) 有了头结点,对在第一元素点前插入结点和删除第一结点,其操作与其它结点的操作就统一了 头结点不一定是链表的必要元素
单链表在C语音中的实现
/*线性表的单链表存储结构*/
typedef struct Node
{
ElemType data;
struct Node *next;
} Node;
typedef struct Node *LinkList; /*定义LinkList*/
- 单链表的读取:
- 单链表的插入:
- 单链表的删除:
- 单链表的整表创建: