DS第2章学习小结
- 你对本章内容的小结
- 完成作业或实践时解决困难的经验分享
- 这段时间,你参考了哪些值得向大家分享的资料?每一项推荐都请说明推荐理由及列出相关链接(或书目名称,具体页码)
- 目前学习过程中存在的困难,待解决或待改进的问题
- 上次博客确定的目标达到了吗?如果没达到,请分析原因
- 接下来的目标
一、你对本章内容的小结
第2章主要学习了两种存储结构的线性表,分别是
有着 顺序存储结构、随机存取结构的 顺序表
有着 链式存储结构、顺序存取结构的 链式表
顺序表在c++可以用数组来实现,链表呢则可以用指针来实现,相对于数组来说,链表对我而言更加的陌生,在对算法的实现上,链表的操作也更难。
对单链表的基本操作是我们需要收悉掌握的。
单链表的定义
1 typedef struct LNode 2 { 3 int data; 4 struct LNode *next; 5 }LNode,*LinkList;
LNode*和LinkList本质上是等价的。通常习惯用LinkList定义单链表,表示头指针;用LNode*定义指向链表中结点的指针变量。
单链表的初始化
1 int InitList(LinkList &L) 2 { 3 L=new LNode; 4 L->next=NULL; 5 return 1; 6 }
单链表的后插法
1 void CreateList(LinkList &L,int n) 2 { 3 InitList(L); 4 LNode *r=L; 5 LNode *p; 6 for(int i=0;i<n;i++) 7 { 8 p=new LNode; 9 cin>>p->data; 10 p->next=NULL; r->next=p; 11 r=p; 12 } 13 }
单链表的遍历输出
1 void traverseList(LinkList &L,int n)//链表的遍历 2 { 3 LNode *p; 4 p=L->next; 5 for(int i=0;p!=NULL&&i<n;i++) 6 { 7 cout<<p->data; 8 if(i<n-1) cout<<' '; 9 p=p->next; 10 } 11 }
若遍历的条件中有 p->next、p->data ,则必须 p!=NULL 在前,防止在p=NULL时,内存的访问错误。
顺序表和链表的比较
顺序表 | 链表 | ||
空间 | 存储空间 | 预先分配,会导致空间闲置或溢出现象 | 动态分配,不会出现存储空间闲置或溢出现象 |
存储密度 | 不用为表示结点间的逻辑关系而增加额外的存储开销,存储密度等于1 | 需要借助指针来体现元素间的逻辑关系,存储密度小于1 | |
时间 | 存取元素 |
随机存取,按位置访问元素的时间复杂度为O(1) |
顺序存取,按位置访问元素时间复杂度为O(n) |
插入、删除 | 平均移动约表中一半元素,时间复杂度为O(n) | 不需移动元素,确定插入、删除位置后,时间复杂度为O(1) | |
适用情况 |
①表长变化不大,且能事先确定变化的范围 ②很少进行插入或删除操作,经常按元素位置序号访问数据元素 |
①长度变化较大 ②频繁进行插入或删除操作 |
二、完成作业或实践时解决困难的经验分享
在做PTA上 7-2 单链表的创建及遍历 时,开始时,我对课本上的代码还不太理解,
然后就直接 LinkList L; L->next=NULL; 然后后面的当然都错了。
后来我看了一下老师的填空题,再仔细看了下课本,发现,
正确的应该是 LinkList L; L=new LNode; L->next=NULL;
LinkList L; 只是定义了一个指针,若该指针要有数据,如 L->next ,如 L->data ,则要先给L分配空间,L=new LNode;
有些题目容易超时,则要另辟蹊径,头脑不够清晰时,可以先在草稿纸上比划比划~
三、这段时间,你参考了哪些值得向大家分享的资料?每一项推荐都请说明推荐理由及列出相关链接(或书目名称,具体页码)
https://www.cnblogs.com/qyaizs/articles/2039101.html
在刚开始学习数据结构的时候,我不太懂 typedef有什么用,看了这篇博客,大概懂了,在定义结构体前加typedef,之后的LNode*、LinkList才可以是指向结构体的指针类型。
四、目前学习过程中存在的困难,待解决或待改进的问题
课本上的代码定义的变量名、函数名好长,好多英文意思我都不太懂,看代码之前最好先把课本第8页的预定义记清楚,这样就能够更好的读懂课本的代码。链表接来接去对我来说还是有点绕,课上有时候想着想着就会突然不懂了。
五、上次博客确定的目标达到了吗?如果没达到,请分析原因
第一次写博客,继续加油!
六、接下来的目标
认真听懂课?
看老师给的高质量c++编程指南1~30页。