数据结构复习(一)
毕业要求的小论文已经投出去啦,目前的任务就是复习算法基础知识准备实习,为了方便回顾内容和分享,我会将相关知识梳理并总结在csdn上~
基本概念
数据结构的三要素:逻辑结构、物理结构、数据运算。
逻辑结构:(线性结构)线性表、栈、队列(非线性结构)树、图、集合。
物理结构:顺序存储、链式存储、索引存储、散列存储。
1.顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元里,元素之间的逻辑关系由存储单元的邻接关系体现。
优点:可以实现随机存取。
缺点:只能使用相邻的一整块存储单元。
2.链式存储:不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储地址的指针表示元素之间的逻辑关系。
优点:充分利用所有存储单元。
缺点:每个元素因存储指针而占用额外的存储空间,只能实现顺序存取。
3.索引存储:在存储元素信息的同时,建立附加的索引表。索引项的一般形式,(关键字,地址)。
优点:检索速度快。
缺点:附加的索引表占用较多的存储空间。
4.散列存储:根据元素的关键字计算元素的存储地址。
优点:检索、增加和删除结点的操作都很快。
缺点:可能出现元素存储单元的冲突,而解决冲突会增加时间和空间开销。
算法效率的度量
算法的五个重要特性:有穷性、确定性、可行性、输入和输出。
时间复杂度:最深层循环内语句的频度。
空间复杂度:存储空间、工作单元、辅助空间。
线性表
除了第一个元素外,每个元素有且仅有一个直接前驱。除了最后一个元素外,每个元素有且仅有一个直接后继。
顺序表(顺序存储)
顺序表的特点:表中的元素的逻辑顺序与其物理顺序相同。(因此插入和删除需要移动大量元素)
线性表插入、删除和查找的平均时间复杂度为O(n)。
ElemType data[MaxSize];
int length;
链表(链式存储)
单链表:除了存放元素自身的信息以外,还需要存放一个指向其后继的指针。
ElemType data;
struct LNode *next;
头结点和头指针的区别,不管带不带头