week02 线性表

 一:作业内容

      本周要求挑3道题目写设计思路、调试过程。设计思路用伪代码描述。题目选做要求:

  • 顺序表选择一题(6-2,6-3,7-1选一题),代码必须用顺序结构抽象数据类型封装
  • 单链表选择一题(6-1不能选)
  • 有序表选择一题

     选择的题:顺序表6-3(删除重复元素);

                       单链表6-2(单链表逆置);

                       有序表7-3(两个有序序列的中位数);

题目一:

     1,题目名称: 6-3 jmu-ds- 顺序表删除重复元素(25 分)

        设计一个算法,从顺序表中删除重复的元素,并使剩余元素间的相对次序保存不变。

    2伪代码:

     定义变量i,j,作为判断循环的下标,k作为新形成的链表的下端

          for  i=0  to  length(链表的长度)--外循环

          k=0    (从零开始重新对链表每个元素赋值)

         for  j=i-1  to  0(内循环,判断i之内的数据是否有和data[k]相等的值)        

         k--(如果有相同的值,则k要减一,让下一个值覆盖它;

   3,设计思路

    从第一个元素开始对链表重新赋值,若判断到第i个数据和前面某个数据相同,此时data[k]保留了这个与之前有相同的数据,则让k--

这样下一次循环新赋进来的值覆盖了之前相同的值,而元素的物理位置不变,从而实现重复元素的删除

  4,代码截图:

5,提交列表

错因分析:第一个是格式问题,忘记最后不能空格;

                  第二个是在第一个改好的基础上,没有考虑空表特殊情况的输出;

                  第三个是不小心少打了个符号,导致编译错误;

题目二  

1,题目名称:6-2 jmu-ds-单链表逆置(25 分)

本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表为带头结点链表。链表结点定义如下

2,伪代码:

     再定义一个链表L2,将L1中的数据给L2赋值,使用头插法;

3,设计思路 :

    使用头插重新将原链表中的数据插入新链表中,最后将原链表的头指针指向新链表就好;

4,代码截图:

5,提交列表:

 

错误原因:没有考虑链表为空时的特殊情况;

题目三

1,题目名称:

    7-3 两个有序序列的中位数(25 分)

    已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0​​,A1​​,,AN1​​的中位数指A(N1)/2​​的值,

即第(N+1)/2⌋个数(A0​​为第1个数)。

2,伪代码:

    定义三个数组s1,s2,s3;

    从i=0  to  n(数组的长度)

    if(s1[i]<s2[i])则将 s1[i]赋值给s3[j++];

3,设计思路

新建一个链表将原链表中一次比较后更小的值一次赋进去;

4,代码截图

5,提交列表

错误原因:第一下用链表做,用C++语言,忘了加头文件;

                  第二下用字符串做,但对一些字符串函数的用法忘记,导致做错

二、截图本周题目集的PTA最后排名

本次2个题目集总分:290分

1,顺序表PTA排名

 2,链表PTA排名

 

3,我的总分    2分

三、本周学习总结

1,这周对数据结构的安排时间是挑大段的时间去写代码,时间安排还好,但打代码效率低,有一些

不懂的没有即使问老师或同学,导致一些题目欠了好几天才完成;

2,线性表就使计算机中数据元素的能够线性存储; 实现线性存储有两种不同的方式:顺序表和链表,

 两者最大的区别在于存储时数据元素的物理位置是否相邻;

3,代码Git提交记录截图

原文地址:https://www.cnblogs.com/huyaoco/p/8646334.html