DS博客作业02--线性表

1.本周学习总结

1.1思维导图

总结线性表内容💡

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

开始总是一头雾水的🚬,写代码过程也总是按照书本复制黏贴,以为自己理解代码了,但是没了书就没了脑子。好多东西没有实质上的理解。做后有一题pta的时候没用书,暴露了好多基础知识不牢固的问题,问同学才正真明白是什么,在此之后的一节链表课,感觉清晰了很多。

2.PTA实验作业

2.1.题目9:有序链表合并 (有序表)👻

2.1.1设计思路(伪代码)

void MergeList(LinkList &L1,LinkList L2)
{
    定义指针p,s,r
    if(L1->next==NULL)
      L1->next=L2->next
    else if(L2->next==NULL)
      return
    将L1赋值为r
    将L1->next赋值为s
    将L2->next赋值为p
    while(s!=NULL&&p!=NULL)
      {
         if(s->data<p->data)
        { 
           r->next =s
           s向后移一个位置
         }
         else if(p->data<s->data)
        {
           r->next =p	
           p向后移一个位置
         }
         else if(s->data==p->data)
        {
           r->next =p;
           p,s同时向后移一个位置
        }
       r向后移一个位置
       }
    if(s==NULL)
      r->next=p        break
    else if(p==NULL)
      r->next=s         break
}

2.1.2代码截图


  • 正确使用if,else if 语句❗❗❗❗❗❗❗❗❗❗
  • 最开始想建个新链表直接搞上去,失败了🤦‍然后就段错误,多种错误
  • 用归并法做的时候,开始没考虑清楚空的多种可能性
  • 接着就是因为if ,else if语句,做的时候完全没考虑都用if语句的话每个都会进入一次,就很有可能出现差错😱

2.1.3本题PTA提交列表说明。

2.2 单链表逆置(单链表)💃

2.2.1设计思路(伪代码)

void ReverseList(LinkList &L)
{
    定义指针p,s
    定义指针L1
    将p指向L->next
    L1动态申请内存
    将L1->next赋值为NULL
    //运用头插法逆置 
    while(p)
      {
         s动态申请内存
         s->data=p->data;
         s->next=L1->next;
         L1->next=s;
         p=p->next;
       }
}

2.2.2代码截图

2.2.3本题PTA提交列表说明。

  • 主要代码没有错误,就是定义指针的时候,结构名写错了😭😭😭

2.3 顺序表删除重复元素(顺序表)👼

2.3.1设计思路(伪代码)


void CreateSqList(List &L,int a[],int n)
{
    定义i
    动态申请内存
    把n的值赋给L->length
    for i=0 to i<n
       把a[i]的值赋给L->data[i]
}
void DispSqList(List L)
{
    定义i
    for i=0 to i<L->length
    {
       输出L->data[i]
       if(i!=(L->length)-1)      输出空格
    }
}
void DelSameNode(List &L)
{
    定义i,k=0,j,flag
    for i=0 to i<L->length                //按从小到大顺序排序
      for j=1 to i<L->length
        if(L->data[j]<L->data[j-1])
          用flag进行位置交换
    L->data[k++]=L->data[0]
    for i=1 to i<L->length 
        if(L->data[i]!=L->data[i-1])	

          L->data[k++]=L->data[i]
}

2.3.2代码截图


2.3.3本题PTA提交列表说明。

3、阅读代码😲🤨😮🤔😱😵😇🐱‍👤👌

找一份优秀代码,理解代码功能,并讲出你所选代码优点及可以学习地方。主要找以下3种类型代码:

读源码,如从python或C++中找用线性表封装的库源码,分析代码功能及可以学习地方。
考研题种关于线性表内容。可以找参加过考研的学长学姐拿。尤其是想要考研同学,可以结合本章内容,用考研题训练学习。
ACM、PTA天梯赛、leecode面试刷题网站,找线性表相关题目阅读分析。

3.1 题目
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

3.2 解题思路

  • 定义i,在循环里依次增加
  • 判断i能否被2整除,依次存入l和r中
  • 使用两个链表来存放,最后连接起来
    3.3 代码截图

3.4 学习体会

  • 学习了分别运用两条链存放符合要求的东西,最后再将其连接的方法
  • 在我浅薄的见识中,见识到连等的魅力
  • 其中存放数据时,第一个位置很关键,在分类中单独考虑
  • 这代码,看起来比较清晰,比较好理解

posted on 2019-03-31 00:07  白居过隙巍澜可期  阅读(260)  评论(1编辑  收藏  举报

导航