zoukankan      html  css  js  c++  java
  • DS博客作业02-线性表

    1.本周学习总结

    1.1思维导图

    1.2学习体会

    本周学习了线性表的相关内容,第一次接触到了抽象数据类型这个概念。目前来讲,线性表的内容对于我来讲还是有点抽象,平时预习主要以看书本和看视频为主
    像初始化线性表,删除或者插入某个节点这样的基本操作还不太熟练,做题要用到的时候一般都是照着书本上的模板写。
    顺序表相对于链表来说,更容易理解一点,链表中又分为单链表,双链表和循环链表,还有各种七七八八的结点经常让我混乱。
    

    2.PTA实验作业

    2.1题目1:顺序表删除重复元素

    2.1.1设计思路(伪代码)

    思路:遍历该表,把不重复的元素放入重构的表中
    
    void CreateSqList(List &L,int a[],int n)  //创建顺序表
    .定义i和k
    .对L分配内存空间
    .用while循环将数据不断存入L->data[i]中
    .i++,k++
    .end  while
    .设置L的长度:L->length=k
    
    void DelSameNode(List &L) //删除顺序表重复元素
    .定义变量i,j,k三个变量和一个开关变量flag
    .for i=0 to i<L->length 
        没有重复元素时把flag=1
        for j=0 to j<k 
             if   有元素相同  flag=0  break
             end  for
             if   没有元素相同   
                   L->data[k++] = L->data[i]
    .end for
    .置重构后该表的长度为L->length=k
    

    2.1.2代码截图

    2.1.3提交列表及说明

    .Q:一开始理解错题目意思了,以为是把前后有相同的元素时,两个元素都删去,然后就一直部分正确
    .A:这个题目的正确做法是首先要把第一个元素存到重构的表中,然后再跟后面的元素比较是否相同,若相同则删去后面的元素
    

    2.2题目2:有序表插入数据

    2.2.1设计思路(伪代码)

    思路:遍历该表,找到合法的插入位置,插入后再把插入元素后面的元素都向后移动一个位置,使插入元素后的表仍然有序
    
    void CreateSqList(SqList &L, int n)//创建表
    .对L分配内存空间
    .用while循环将数据不断存入L->data[i]中
    .设置L的长度:L->length=n
    
    
    void InsertSq(SqList &L, int x)     //插入数据的函数
    .定义变量i和j
    .while (x > L->data[i] && i < L->length) //x插入表中的条件控制 
                i++
    找到插入位置i
    .end while
    .for  j=L->length-1  to  j>=i    //从最后一个数开始到第i个数都往后移动一个位置
    .    L->data[j+1]=L->data[j]
    .end for 
    .把数x插入第i个位置
       
    void DispSqList(SqList L) //输出顺序表内容 ,数据间空格隔开,尾部不能有空格。
    .定义变量i
    .如果L是空表,输出“erorr”
    .否则  先输出L->data[0]
    .for  i=1  to  i<L->length 
           输出“ ” ,输出L->data[i]         //保证最后一个数尾部无空格
    . end for
    

    2.2.2代码截图

    2.2.3提交列表及说明

    .Q:那个多种错误里主要是格式错误,一开始是用每个数后面都带一个空格的做法,这样虽然可以保证前n-1个数符合要求,但最后一个数后面也会带空格,不符合要求
    .A:后来用先输出第一个数,再在后面输出的每个数前面都带一个空格,这样就可以保证了最后一个数后面没有空格的问题
    

    2.3题目3:尾插法建链表

    2.3.1设计思路(伪代码)

    void CreateListR(LinkList &L, int n)//尾插法建链表,L表示带头结点链表,n表示数据元素个数
    .定义两个LinkList类型的指针s,r和两个整型变量i,k
    .给L分配空间并让r指向头结点
    .for  i=0  to  i<n
           给s分配空间
           循环输入k,并把它存放到s->data中
           将s结点插入r->next
           r=s
    .end for
    .r->next =NULL
    
    void DispList(LinkList &L)//输出链表
    .定义变量i和指针p
    .p=L->next    //
    .如果p为空,输出“空链表”
    .否则 进入while循环
          if   i!=0  输出空格
              输出p->data
             p=p->next
             i++
    end while
    

    2.3.2代码截图

    2.3.3提交列表及说明

    .Q:在尾插法建链表的时候,给s指针分配空间应该放在while循环里面,我给它整到外面去了
    

    3.阅读代码

    3.1

    .删除字符串中所有的空格
    

    3.2解题思路

    使用重构数组的做法,把原来数组中的非空格存到新的数组中去
    

    3.3代码截图

    3.4学习体会

    这段代码是上学期学习C语言时的一段代码,虽然年代有点有点久远了,但它仍有值得我学习的地方。以前在元素的删除和插入这类型的题目中,不懂用重构数组的做法去做,就会很麻烦,而且也比较难以理解。重构数组就比较好理解了,代码量也少。主要是把需要的元素放入一个新的数组里面,再输出新数组元素,这个操作便完成了。
    
  • 相关阅读:
    开源WebGIS实施方案(五):基于SLD实现图层符号化及其应用
    开源WebGIS实施方案(四):GeoServer发布PostGIS数据
    开源WebGIS实施方案(三):Shapefile数据导入到PostGIS
    jdbcType与javaType的对应关系
    关于fastjson的一个坑:输出json时,bean对象属性首字母默认被小写
    TortoiseSVN本地版本控制管理
    ArcGIS“一个或多个ActiveX控件无法显示...”问题的解决方案
    JavaWeb学习系列——第一个JavaWeb程序
    ArcGIS提取影像边界
    调皮的MySQL服务 请你不要再躲猫猫
  • 原文地址:https://www.cnblogs.com/112Ada/p/10596140.html
Copyright © 2011-2022 走看看