DS第2章学习小结

  1. 你对本章内容的小结
  2. 完成作业或实践时解决困难的经验分享
  3. 这段时间,你参考了哪些值得向大家分享的资料?每一项推荐都请说明推荐理由及列出相关链接(或书目名称,具体页码)
  4. 目前学习过程中存在的困难,待解决或待改进的问题
  5. 上次博客确定的目标达到了吗?如果没达到,请分析原因
  6. 接下来的目标

一、你对本章内容的小结

  第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页。

 

posted on 2019-03-17 21:12  J丶2000  阅读(168)  评论(1编辑  收藏  举报

导航