第二章学习小结

Posted liulei1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章学习小结相关的知识,希望对你有一定的参考价值。

一.      本章内容小结

  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++的结构体和指针给看一遍,并且多看代码,多打代码。

以上是关于第二章学习小结的主要内容,如果未能解决你的问题,请参考以下文章

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

20181117-python第二章学习小结-part2

第二章学习小结

第二章学习小结

数据结构第二章小结

20181117-python第二章学习小结-part1