第二章学习小结

liulei1 liulei1     2023-03-09     493

关键词:

一.      本章内容小结

  1. 线性表定义:由n(n>=0)个数据特性相同的元素构成的有限序列。
  2. 线性表中元素的个数n定义为线性表长度,n=0时为空表
  3. 顺序表特点:逻辑上相邻的数据元素,其物理次序也是相邻的。
  4. 顺序表基本操作的实现:

           (a).初始化:Status InitList(SqList &L)

         //构造一个空的顺序表L

                 L.elem=new ElemType[MAXSIAZE];//为顺序表分配一个大小为MAXSIZE的数组空间

                 if(!L.elem) exit (OVERFLOW);//存储分配失败退出;

                 L.length=0;//空表长度为0

                 return Ok;

         

           (b).取值:Status GetElem(SqList L, int i, ElemType &e)

       

                    if(i<1||i>L.length) return ERROR; //判断i值是否合理,若不合理,返回ERROR

                    e=L.elem[i-1];//elem[i-1]单元存储第i个数据元素

                    return Ok;

       

            (c).查找:Status LocateElem(SqList L, ElemType e)

        //在顺序表L中查找值为e的数据元素,返回其序号

                 for(i=0;i<L.length;i++)

                 if(L.elem[i]==e) return i+1;     //查找成功,返回序号i+1

                 return 0;                            //查找失败,返回0

              

              (d).插入:Status ListInsert(SqList &L,int i, ElemType e)

         //在顺序表L中第i个位置插入新的元素e,i值得合法范围是1<=i<=L.length+1

                  if((i<1)||(i>L.length+1))   return ERROR; //i值不合法

                  if(L.length==MAXSIZE)       return ERROR; //当前存储空间已满

                 for(j=L.length-1;j>=i-1;j--)

                  L.elem[j+1]=L.elem[j];                //插入位置及之后得元素后移

                          L.elem[i-1]=e;                       //将新元素e放入第i个位置

                          ++L.length;                               //表长加1

                          return OK;                                

         

             (e).删除:Status ListDelete(SqList &L,int i)

        //在顺序表L中删除第i个位元素,i值的合法范围是1<=i<=L.length+

                       if((i<1)||(i>L.length+1))   return ERROR; //i值不合法

                                       for(j=i;j<L.length-1;j++)

                            L.elem[j-1]=L.elem[j];                //被删除元素之后的元素前移

                                 --L.length;                               //表长减1

                                 return OK;                                

        

  1. 链式存储结构特点:用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
  2. 首元结点是指链表中存储第一个数据元素a1的特点。

             头指针是指向链表中第一个结点的指针。

  1. 单链表基本操作的实现:

            (a).初始化:Status InitList(LinkList &L)

         //构造一个空的单链表L

                     L= new LNode; //生成新结点作为头结点,用头指针指向头结点

                 L->next=NULL; //头结点的指针域置空

                 return Ok;

         

         (b).取值:Status GetElem(LinkList L, int i, ElemType &e)

       //在带头结点的单链表L中根据序号i获取元素的值,用e返回L中第i个数据元素的值

                      p=L->next,j=1;             //初始化,p指向首元结点,计数器j初值赋为1

                      while(p&&j<1)              //顺链域向后扫描,直到p为空或p指向第i个元素

                      

                                           p=p->next;             //p指向下一个结点

                                           ++j;                   //计数器j相应加1

                            

                                 if(!p||j>1) rerurn ERROR   //i值不合法i>n或i<=0

                                 e=p->data;                 //取第i个结点的数据域

                                  return OK;

                           

          (c).查找:LNode *LocateElem(LinkList L,ElemType e)

        //在带头结点的单链表L中查找值为e的元素

                                        p=L->next;                    //初始化,p指向首元结点

                                          while(p&&p->data!=0)  //顺链域向后扫描,直到p为空或p所指结点的数据域等于e

                           p=p->next;              //p指向下一个结点

                           return p;                 //查找成功返回值为e的结点地址,查找失败p为NULL

                     

          (d).插入:Status ListInsert(LinkList &L, int i, Elemtype e)

        

                                         p=L;j=0;

                                         while(p&&(j<i-1))

                                      

                                                        p=p->next;++j;

                                      

                                         if(!p||j>i-1)  return ERROR;

                                         s=new LNode;

                                         s->data=e;

                                         s->next=p->next;

                                         p->next=s;

                                         return OK;

        

        (e).删除:Status ListDlete(LinkList &L, int i)

       //在带头结点的单链表L中,删除第i个元素

                                      p=L;j=0;

                                      while((p->next)&&(j<i-1))        //查找第i-1个结点,p指向该结点

                                       

                                                  p=p->next; ++j;

                                     

                                         if(!(p->next)||(j>i-1))  return ERROR;                //当i>n或i<1时,删除位置不合理

                                         q=p->next;                        //临时保存被删结点的地址以备释放

                                         P->next=q->next;                      //改变删除结点前驱结点的指针域

                                         delete q;               //释放删除结点的空间

                                         return OK;

        

  1. 在单链表中,查找直接后继结点的执行时间为O(1),而查找直接前驱的执行时间为O(n)。

            而双向链表是为了克服单链表这种单向性的缺点而存在的。

二.       完成作业或实践时解决困难的经验分享

主要还是PTA的格式问题,当然在填写时也遇到了一些困难,不过在百度上看了一些相关的代码,变解决了,那就说一下格式正确的过程吧,是同学帮助解决的

 

void DisplayList( SqList L )

  for ( int i = 0; i < L.length; i++ )
  cout <<L.elem[i]<< " ";

这儿是一开始的,问题就是在最后一个数字后面有空格

 

void DisplayList( SqList L )

  for ( int i = 0; i < L.length; i++ )
  cout <<L.elem[i];      if(i<L.length-1) cout<< " ";

然后改了这个就变成编译问题了,其实是因为没把if放入for语句里

 void DisplayList( SqList L )

  for ( int i = 0; i < L.length; i++ )
  cout <<L.elem[i];      if(i<L.length-1) cout<< " ";

最后改成这样,就全部正确了

三.       分享的资料

百度搜索CSDN博客,有很多专业的人会讲解相关知识,也可以看看代码,提升自己的逻辑能力。

四.       学习过程中的困难,待解决或待改进的地方

其实困难还是挺多的,因为上学期学C++时没有认真学习,就算期末考试突击学习,也只能学点皮毛,结构体和指针都不是特别能理解。

五.       目标

利用碎片时间把C++的结构体和指针给看一遍,并且多看代码,多打代码。

数据结构第二章学习小结

1.对本章内容的小结本章学了一个新的结构类型—链表,除此以外,还学习了线性表的定义和基本操作,并且还进行了两次小组合作,打了两次代码,加深了对线性表的了解。这一章的学习中,感觉自己对指针的用法越来越娴... 查看详情

第二章学习小结

一.     本章内容小结线性表定义:由n(n>=0)个数据特性相同的元素构成的有限序列。线性表中元素的个数n定义为线性表长度,n=0时为空表。顺序表特点:逻辑上相邻的数据元素,其物理次序也是相邻的。... 查看详情

第三章学习小结

.第三章学习了栈和队列,有了第二章对线性表的学习,已经了解学习的一个思维过程,在这里分享一下。例如学习栈,首先要了解它的存取特点,然后是学习它的ADT,然后从具体的方面学习,分别从两种不同的存储结构来探讨... 查看详情

数据结构第二章小结(代码片段)

数据结构第二章小结一、本章小结第二章学习的是线性表的两种结构:顺序和链式存储结构。2.1~2.3小结主要学习的线性表的定义。2.4节学习的是线性表的顺序存储的表示和实现,顺序表是利用数组与数组长度打包为结构体类型... 查看详情

2016710101302016-2017-2《java程序设计》第二周学习小结

学习Java第三章小结本周我学会了:首先是解决关于解决运行程序前出现了错误提示“editordosenotcontainamaintype”程序无法运行”的问题,通过网友的博客http://blog.csdn.net/huazhangena/article/details/7349044,出现这个问题的原因是我们所建... 查看详情

第二章小结

小结:学习了有关线性表的知识,线性表主要有两种存储结构,链式存储结构和顺序存储结构,两种结构分别在c语言上有不同的编写方式、时间复杂度和空间复杂度,适合需要不同操作类型的数据,如插入删除和顺序添加等不... 查看详情

第二章学习小结

一、对本章内容的小结:  本章主要讲述了线性表的定义、特点、表示及实现,同时也说明了顺序表与链表之间的异同,让我们对顺序表和链表有了更深入的认识。学习本章知识后,我们  理解了线性表的基本性质。顺序表... 查看详情

第二章学习小结

这学期一开始,接触到线性表的时候,其实上课有点懵懵的,毕竟上学期都是学具体的C++语言,而在讲线性表的时候转变为了更抽象的表示方法,但是在具体理解时用C++的类,链表去代入理解,我还是有一定收获的。首先是线性... 查看详情

第二章学习小结

第2章学习小结我对本章内容的小结1.1.线性表的定义和实现 线性表可以用顺序存储和链式存储两种存贮结构实现。它们的表示分别为顺序表和链式表。 顺序表的基本操作如初始化,插入,查询,删除等的介绍也分别计算... 查看详情

第1章学习小结

...码经常有云里雾里的感觉。下一阶段的努力目标:希望在第二章的学习中能保持现在的劲头,逼自己经常钻研课本和多敲代码。一定要学好数据结构!!! 查看详情

第二章小结

第二章学习了线性表的两种存储方式-顺序存储结构和链式存储结构。其实上学期稍微接触了链表,但没有深入了解,这学期开始学习链表,对于我来说挺难的。刚开始根据书本写代码,看到typedef,Status是很懵的,这是什么??... 查看详情

第二章学习小结

数据结构第二章的学习结束了,了解了顺序表,单链表的建立,插入,删除,查找的算法,以及对它们时间复杂度,空间复杂度的分析。学会区分头指针,头结点和首元结点。前插法,后插法创建单链表,相比之下,我觉得后插... 查看详情

数据结构:第二章学习小结(代码片段)

内容小结:1.书上2.3了解到线性表的类型定义,注意类型定义的规范写法;2.书上2.4、2.5了解到线性表的两种存储结构,即顺序存储(顺序表)和链式存储(链表),进而学习了相关的初始化、插入、删除等操作及其各操作空间... 查看详情

数据结构:第四章学习小结

数据结构第四章学习的是串,数组和广义表串的定义其实在c++学习中就有所接触,所以这里不详说,重点说的是两个串模式匹配算法1.BF算法BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则... 查看详情

第八章学习小结

一、排序的稳定性:A、B关键字相同,排序后A、B先后次序保持不变——这种排序算法是稳定的排序算法效率的评价指标:1.时间效率——排序速度:比较次数和移动次数2.空间效率——占内存辅助空间大小3.稳... 查看详情

数据结构第二章小结

第二章主要围绕线性表进行学习。线性表有两种存储结构:顺序存储结构和链式存储结构。其中,顺序表的特点之一是地址连续;链式表分为单链表,循环链表和双向链表。在使用链式表的时候,要考虑是否要带有尾指针的结构... 查看详情

我的游戏学习日志36——游戏结构(小结)

我的游戏学习日志36——游戏结构(小结)1.第一节  围绕游戏性的基础展开论述。  基础性质:自愿性、规则性、系统性、挑战性、不确定性、安全性、佯信性和交互性。  高层性质:均衡性、象征性、目标性和非... 查看详情

javascript学习笔记——选项卡小结

Js制作选项卡小结1.先构思好需要展示的页面效果,比如这样 2.需要显示的效果通过html和css制作出来,包括选项(第一课、第二课)的鼠标停留背景变色、下方选项页内容切换的内容等。3.把此选项卡分为上下两个部分,并且... 查看详情