DS博客作业02--线性表

1.本周学习总结

1.1思维导图

1.2.谈谈你对线性表的认识及学习体会。

  • 链表的创建和使用很奇怪,看似没有差别但是无法正常运行,有的时候需要头插法,有时需要尾插法。操作量大且复杂。

2.PTA实验作业

2.1.题目1:6-1 jmu-ds-区间删除数据

2.1.1设计思路(伪代码)

定义变量j,遍历链表
 L->length=j,  //以赋值的方式删除元素
cout<<L->data[i];
if(i!=L->length-1) cout<<" "//空格与元素分别输出

2.1.2代码截图

2.1.3本题PTA提交列表说明。

  • 本题主要是链表的基本知识,但是需要用C++的语法,模仿书本上的方式导致了错误
  • 在查询资料后解决了问题

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

2.2.1设计思路(伪代码)

定义i,j
    for    i=0  to  n-1  //遍历顺序表
       if    L->data[i]>x   //寻找插入的位置
    for   j=n    to    i //将L的第i项后的后移一位 
    L->data[j]=L->data[j-1]
    L->data[i]=x    //将x插入到i的位置 

2.2.2代码截图


2.2.3本题PTA提交列表说明。

  • 本题寻找插入元素的位置很难,先是两端的极限位置,然后是循环寻找数据大小,用赋值的方式删除元素。

2.3 题目3: 6-3顺序表删除重复元素

2.2.1设计思路(伪代码)

定义j,m 分别进行循环,控制循环顺序
for(i=0;i<L->length-m;i++) 外层从第一个数开始循环
    {
        for(j=i+1;j<=L->length-m;j++) 内层从第二个数开始循环,之后依次从外层循环的后一个数开始循环
        {
            if(L->data[i]==L->data[j]) 出现相同数据
            {
                L->data[j]=L->data[j+1]; 删除次数据,向后移动一位
                m++;
            }
        }  end for
    } end for 
    L->length-=m; 顺序表长度减少

2.2.2代码截图


2.2.3本题PTA提交列表说明。

  • 本题需要两层循环,一开始没有设置两层循环导致无法找到需要删除的元素。
  • 当最后一项删除时,题目的循环条件要到最后一个元素。

3、阅读代码

3.1 题目

删除单链表倒数第K个节点 

3.2 解题思路

  • 要删除倒数第K个节点,首先我们需要知道该链表有几个节点,然后再使指向头结点的指针走size-k-1步,删除该指针所指向的节点即可。

3.3 代码截图

3.4 学习体会

  • 本题的约束条件较多
  • 设置两个指向头结点的指针,可以先后出发,寻找倒数第K个节点
  • 让其中一个指针先走K步,后使两个指针同时运行
posted on 2019-03-31 02:10  Cosmosss  阅读(241)  评论(0编辑  收藏  举报