经过这几周的学习,我已经明白了数据的定义、算法、结构;以及线性表的定顺序存储结构、链式存储结构以及线性表的应用。
数据结构:数据逻辑结构,数据存储结构,数据运算。
逻辑结构:线性结构,非线性结构。
存储结构:顺序结构,链式结构,索引结构,散列结构。
数据运算:插入运算,删除运算,修改运算,查找运算,排序运算。
常见运算:搜索运算、插入运算、删除运算、更新运算。
程序=数据结构+算法
线性表的定义
线性表的特点如下:
(1)表中元素个数有限。
(2)表中元素具有逻辑上的顺序性,表中元素有其先后次序。
(3)表中元素都是数据元素,每个元素都是单个元素。
(4)表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间。
(5)表中元素具有抽象性,即仅讨论元素间的逻辑关系,而不考虑元素究竟表示什么内容。
线性表的基本操作
线性表的主要操作如下:
InitList(&L):初始化表。构造一个空的线性表。
Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。
LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。
GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。
ListInsert(&L,i,e):插入操作,在表L中的第i个位置上插入指定元素e。
ListDelete(&L,i,&e):删除操作,删除表L中的第i个位置的元素,并用e返回删除元素的值。
PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值。
Empty(L):判空操作。若L为空表,则返回true,否则返回false。
DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占用的空间。
顺序表的定义
线性表的顺序存储又称为顺序表。
它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使逻辑上相邻的两个元素在物理位置上也相邻。
顺序表上基本操作实现
1.插入操作
2.删除操作
3.按值查找
2.3线性表的链式表示
2.3.1单链表的定义
单链表的结构如图所示:
date | next |
其中data为数据域,存放数据元素;next为指针域,存放其后继节点的地址。
2.3.2单链表上基本操作的实现
1.采用头插法建立单链表
2.采用尾插法建立单链表
双链表
为了克服单链表的缺点,引入双链表,双链表结点中有两个指针prior和next,分别指向其前驱结点和后继结点,如图所示
1.双链表的插入操作
2.双链表的删除操作
p->next=q->next;
q->next->prior=p;
free(q)
循环链表
1.循环单链表
循环单链表和单链表的区别在于,表中最后一个结点的指针不是NULL,而改为指向头结点,从而整个链表形成一个环,如图所示:
2.循环双链表
由循环单链表的定义不难推出循环双链表,不同的是在循环双链表中,头结点的prior指针还要指向表尾结点,如图所示: