DS博客作业02—线性表

1.本周学习总结

1.1思维导图

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

线性表是本学期学到的第一种抽象数据类型,相对不是很难
单链表部分复习了上学期的链表知识,并拓展了双链表,循环链表等内容
新学了 有序表二路归并 等算法,稍微了解了C++的STL容器

2.PTA实验作业

2.1 题目1 单链表

已知一个带有表头节点的单链表,查找链表中倒数第m个位置上的节点

2.1.1设计思路

思路1 链表倒置后输出第m位

定义变量i计算链表长度
定义指针p,q
L->next=NULL; //断开头节点
while(q!=NULL) //链表倒置
    遍历链表将q指向元素用头插法插于L后
    i++; //链表长度计数+1
while end
if (m<=i)
    遍历输出正数第m个数
else
    返回-1

思路2 两指针错开m位同步后移

定义指针p,q指向头节点
if (m<=0)
    返回-1
if end
将q后移m位
if (q==NULL)
    返回-1
if end
while(q!=NULL)
    p,q同步后移,当q=NULL时,p指向即为倒数第m个元素
while end
输出p->data

2.1.2代码截图

思路1


思路2

2.1.3本题PTA提交列表说明

Q1.忘了m<=0时的特判
Q2.换了个思路重写又忘了特判

2.2 题目2 顺序表

顺序表操作集

2.2.1设计思路

插入

if (L->Last==MAXSIZE-1) //顺序表已满
    输出 "FULL"
    返回false
if end
if  (P<0||P>(L->Last+1)) //插入位置非法
    输出 "ILLEGAL POSITION"
    返回false
if end
for i=L->Last to P
    从第L->Last-1个元素到第P个元素依次后移1位
for end
L->Data[P]=X //插入X
L->Last++
返回true

删除

if (P<0||P>L->Last)
    输出“POSITION %d EMPTY”
    返回false
if end
for i=P to L->Last
    从i+1个元素到L->Last-1个元素依次前移1位
for end
L->Last--
返回true

2.2.2代码截图



2.2.3本题PTA提交列表说明

A1.完全理解错题目意思,按照任意位置插入的方式写
Q1.对比了输出样例和我的输出,发现理解的错误
A2.非法插入的位置理解错误,以为只要0<P<MAXSIZE就合法
Q2.P的范围改成0<PList+1
A3.手抖打错符号233

2.3 题目3 有序表

一元多项式的乘法与加法运算

2.3.1设计思路

AddList//加法函数

新建头节点L
while //遍历链表L1
将L1各个节点元素存入新节点p
调用Insert将节点p插入链表L中
while end
while
将L2各个节点元素存入新节点p
调用Insert将节点p插入链表L中
while end

MultList//乘法函数

新建头节点L
定义指针p,q,temp
p=L1->next
while //遍历链表L1
    q=L2->next //内层循环结束q回到L2第一个元素
    while //遍历链表L2
        新建节点temp
        temp->multiple=p->multiple*q->multiple
        temp->exponent=p->exponent+q->exponent //p,q指向节点相乘
        if (temp->multiple==0) //系数时temp为0 0
            temp->exponent=0
        if end
        调用Insert将节点temp插入链表L中
        q=q->next
    while end
    p=p->next
while end

InsertList//插入排序函数

定义指针p指向首个元素,pre指向头节点
while(p!=NULL) //遍历L
    if (p,q指向元素指数相同)
        p的系数加上q的系数
        if(相加后系数为0)
            删去元素p
        if end
        return
    if end
    if (p的指数小于q的指数)
        将q插于pre和p之间
        return
    if end
while end
将q插于链尾

2.3.2代码截图






2.3.3本题PTA提交列表说明

Q1 在原版函数中使用了min max指针标注新链表首尾元素,在插入过程中产生野指针,(以及其它n种制造野指针的神奇操作)
A1 放弃修正野指针bug 将新链表插入部分拆分成一个单独的函数统一处理

3.阅读代码

k个一组反转链表 leetcode 困难题

3.1 题目

3.2 解题思路

反转部分
定义指针pre,lat标记反转k个元素的前,后节点

定义两个指针lpre=pre->next和cur=lpre->next

lpre->next=cur->next
cur->next=pre->next
pre->next=cur
cur=lpre->next
循环执行行直到cur=lat反转全部k个元素

3.3 代码截图

3.4 学习体会

网上找到的解题代码使用的是python语言,但同样可用C/C++重现解题方法,体会到了数据结构的不依赖具体某种语言
为读懂代码查找了python的相关资料,粗略理解了部分python的语法

posted @ 2019-03-31 08:28  KISAMKO  阅读(252)  评论(0编辑  收藏  举报