数据结构笔记精品资料.doc
《数据结构笔记精品资料.doc》由会员分享,可在线阅读,更多相关《数据结构笔记精品资料.doc(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目录第一章 概 论1第 二 章 线 性 表2第 三 章 栈 和 队 列8第 四 章 串17第 五 章 多 维 数 组 和 广 义 表21第 六 章 树23第 七 章 图27第 八 章 排 序31第 九 章 查 找35第 十 章 文 件40第一章 概 论1.数据:信息的载体,能被计算机识别、存储和加工处理。2.数据元素:数据的基本单位,可由若干个数据项组成,数据项是具有独立含义的最小标识单位。3.数据结构:数据之间的相互关系,即数据的组织形式。它包括:1)数据的逻辑结构,从逻辑关系上描述数据,与数据存储无关,独立于计算机;2)数据的存储结构,是逻辑结构用计算机语言的实现,依赖于计算机语言。3)数
2、据的运算,定义在逻辑结构上,每种逻辑结构都有一个运算集合。常用的运算:检索/插入/删除/更新/排序。4.数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。数据的存储结构是逻辑结构用计算机语言的实现。5.数据类型:一个值的集合及在值上定义的一组操作的总称。分为:原子类型和结构类型。6.抽象数据类型:抽象数据的组织和与之相关的操作。优点:将数据和操作封装在一起实现了信息隐藏。7. 抽象数据类型ADT:是在概念层上描述问题;类:是在实现层上描述问题;在应用层上操作对象(类的实例)解决问题。8.数据的逻辑结构,简称为数据结构,有:(1)线性结构,若结构是非空集则仅有一个开始和终端结点,并且所有结点
3、最多只有一个直接前趋和后继。(2)非线性结构,一个结点可能有多个直接前趋和后继。9.数据的存储结构有:1)顺序存储,把逻辑相邻的结点存储在物理上相邻的存储单元内。2)链接存储,结点间的逻辑关系由附加指针字段表示。3)索引存储,存储结点信息的同时,建立附加索引表,有稠密索引和稀疏索引。4)散列存储,按结点的关键字直接计算出存储地址。 10.评价算法的好坏是:算法是正确的;执行算法所耗的时间;执行算法的存储空间(辅助存储空间);易于理解、编码、调试。 11.算法的时间复杂度T(n):是该算法的时间耗费,是求解问题规模n的函数。记为O(n)。时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O
4、(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、k次方阶O(nk)、指数阶O(2n)。13.算法的空间复杂度S(n):是该算法的空间耗费,是求解问题规模n的函数。12.算法衡量:是用时间复杂度和空间复杂度来衡量的,它们合称算法的复杂度。13. 算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。第 二 章 线 性 表1.线性表:是由n(n0)个数据元素组成的有限序列。2.线性表的基本运算有:1)InitList(L),构造空表,即表的初始化;2)ListLength(L),求表的结点个数,即表长;3)GetNode(L,i),取
5、表中第i个结点,要求1iListLength(L);4)LocateNode(L,x)查找L中值为x的结点并返回结点在L中的位置,有多个x则返回首个,没有则返回特殊值表示查找失败。5)InsertList(L,x,i)在表的第i个位置插入值为x的新结点,要求1iListLength(L)+1;6)DeleteList(L,i)删除表的第i个位置的结点,要求1iListLength(L);3.顺序表:把线性表的结点按逻辑次序存放在一组地址连续的存储单元里。4.顺序表结点的存储地址计算公式:Loc(ai)=Loc(a1)+(i-1)*C;1in 5.顺序表上的基本运算(1)插入void inser
6、tlist(seqlist *L,datatype x,int i)int j;if(iL-length+1) error(“position error”);if(L-length=listsize) error(“overflow”);for(j=L-length-1;j=i-1;j-) L-dataj+1=L-dataj; 结点后移L-datai-1=x;L-length+;在顺序表上插入要移动表的n/2结点,算法的平均时间复杂度为O(n)。(2)删除void delete (seqlist *L,int i)int j;if(iL-length) error(“position err
7、or”);for(j=i;jlength-1;j+) L-dataj-1=L-dataj; 结点前移 L-length-;在顺序表上删除要移动表的(n+1)/2结点,算法的平均时间复杂度为O(n)。 6.单链表:只有一个链域的链表称单链表。在结点中存储结点值和结点的后继结点的地址,data next data是数据域,next是指针域。 (1)建立单链表。时间复杂度为O(n)。加头结点的优点:1)链表第一个位置的操作无需特殊处理;2)将空表和非空表的处理统一。(2)查找运算。时间复杂度为O(n)。 1) 按序号查找。Listnode * getnode(linklist head,int i)
8、int j;listnode *p;p=head;j=0;while(p-next&jnext; 指针下移 j+;if(i=j) return p;else return NULL;2) 按值查找。Listnode * locatenode(linklist head ,datatype key)listnode *p=head-next;while(p&p-data!=key) p=p-next;return p;(3)插入运算。时间复杂度为O(n)。Void insertlist(linklist head ,datatype x, int i)listnode *p;p=getnode(
9、head,i-1);if(p=NULL); error(“position error”);s=(listnode *)malloc(sizeof(listnode);s-data=x;s-next=p-next;p-next=s; (4) 删除运算。时间复杂度为O(n)。Void deletelist(linklist head ,int i)listnode *p ,*r;p=getnode(head ,i-1);if(p=NULL|p-next=NULL) error(“position error”);r=p-next;p-next=r-next;free(r);7.循环链表:是一种首
10、尾相连的链表。特点是无需增加存储量,仅对表的链接方式修改使表的处理灵活方便。8.空循环链表仅由一个自成循环的头结点表示。9.很多时候表的操作是在表的首尾位置上进行,此时头指针表示的单循环链表就显的不够方便,改用尾指针rear来表示单循环链表。用头指针表示的单循环链表查找开始结点的时间是O(1),查找尾结点的时间是O(n);用尾指针表示的单循环链表查找开始结点和尾结点的时间都是O(1)。10.在结点中增加一个指针域,prior|data|next。形成的链表中有两条不同方向的链称为双链表。1) 双链表的前插操作。时间复杂度为O(1)。Void dinsertbefore(dlistnode *p
11、 ,datatype x)dlistnode *s=malloc(sizeof(dlistnode);s-data=x;s-prior=p-prior;s-next=p;p-prior-next=s;p-prior=s;2) 双链表的删除操作。时间复杂度为O(1)。Void ddeletenode(dlistnode *p)p-prior-next=p-next;p-next-prior=p-prior;free(p);11.顺序表和链表的比较1) 基于空间的考虑:顺序表的存储空间是静态分配的,链表的存储空间是动态分配的。顺序表的存储密度比链表大。因此,在线性表长度变化不大,易于事先确定时,宜
12、采用顺序表作为存储结构。2) 基于时间的考虑:顺序表是随机存取结构,若线性表的操作主要是查找,很少有插入、删除操作时,宜用顺序表结构。对频繁进行插入、删除操作的线性表宜采用链表。若操作主要发生在表的首尾时采用尾指针表示的单循环链表。12.存储密度=(结点数据本身所占的存储量)/(整个结点结构所占的存储总量)存储密度:顺序表=1,链表top=-1;2)判栈空。int stackempty(seqstack *s)return s-top=-1;3)判栈满。int stackfull(seqstack *s)return s-top=stacksize-1;4)进栈。Void push(seqst
13、ack *s,datatype x)if(stackfull(s) error(“stack overflow”);s-data+s-top=x;5)退栈。Datatype pop(seqstack *s)if(stackempty(s) error(“stack underflow”);return S-datas-top-;6)取栈顶元素。Dtatatype stacktop(seqstack *s)if(stackempty(s) error(“stack underflow”);return S-datas-top;6.链栈:栈的链式存储结构称链栈。栈顶指针是链表的头指针。7.链栈上的
14、基本运算:1) 建栈。Void initstack(linkstack *s)s-top=NULL;2)判栈空。Int stackempty (linkstack *s)return s-top=NULL;3) 进栈。Void push(linkstack *s,datatype x)stacknode *p=(stacknode *)malloc(sizeof(stacknode);p-data=x;p-next=s-top;s-top=p;4) 退栈。Datatype pop(linksatck *s)datatype x;stacknode *p=s-top;if(stackempty(
15、s) error(“stack underflow”);x=p-data;s-top=p-next;free(p);return x;5) 取栈顶元素。Datatype stacktop(linkstack *s)if(stackempty(s) error(“stack is empty”);return s-top-data;8.队列是一种运算受限的线性表,允许删除的一端称队首,允许插入的一端称队尾。队列又称为先进先出线性表,FIFO表。9.队列的基本运算:1) initqueue(q),置空队;2) queueempty(q),判队空;3) queuefull(q),判队满;4) enq
16、ueue(q,x),入队;5) dequeue(q),出队;6) queuefront(q),返回队头元素。10.顺序队列:队列的顺序存储结构称顺序队列。设置front和rear指针表示队头和队尾元素在向量空间的位置。11.顺序队列中存在“假上溢”现象,由于入队和出队操作使头尾指针只增不减导致被删元素的空间无法利用,队尾指针超过向量空间的上界而不能入队。12.为克服“假上溢”现象,将向量空间想象为首尾相连的循环向量,存储在其中的队列称循环队列。i=(i+1)%queuesize13.循环队列的边界条件处理:由于无法用front=rear来判断队列的“空”和“满”。解决的方法有:1) 另设一个布
17、尔变量以区别队列的空和满;2) 少用一个元素,在入队前测试rear在循环意义下加1是否等于front;3) 使用一个记数器记录元素总数。14.循环队列的基本运算:1) 置队空。Void initqueue(cirqueue *q)q-front=q-rear=0;q-count=0;2) 判队空。Int queueempty(cirqueue *q)return q-count=0;3) 判队满。Int queuefull(cirqueue *q)return q-count=queuesize;4) 入队。Void enqueue(cirqueue *q ,datatype x)if(que
18、uefull(q) error(“queue overfolw”);q-count+;q-dataq-rear=x;q-rear=(q-rear+1)%queuesize;5) 出队。Datatype dequeue(cirqueue *q)datatype temp;if(queueempty(q) error(“queue underflow”);temp=q-dataq-front;q-count-;q-front=(q-front+1)%queuesize;return temp;6) 取队头元素。Datatype queuefront(cirqueue *q)if(queueempt
19、y(q) error(“queue is empty”);return q-dataq-front;15.链队列:队列的链式存储结构称链队列,链队列由一个头指针和一个尾指针唯一确定。16.链队列的基本运算:1) 建空队。Void initqueue(linkqueue *q)q-front=q-rear=NULL;2) 判队空。Int queueempty(linkqueue *q)return q-front=NULL&q-rear=NULL;3) 入队。Void enqueue(linkqueue *q,datatype x)queuenode *p=(queuenode *)malloc
20、(sizeof(queuenode);p-data=x;p-next=NULL;if(queueempty(q) q-front=q-rear=p;else q-rear-next=p; q-rear=p; 4) 出队。Datatype dequeue(linkqueue *q)datatype x;queuenode *p;if(queueempty(q) error(“queue is underflow”);p=q-front;x=p-data;q-front=p-next;if(q-rear=p) q-rear=NULL;free(p);return x;5) 取队头元素。Dataty
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构笔记 精品资料 数据结构 笔记 精品 资料
限制150内