zoukankan      html  css  js  c++  java
  • 第02次作业-线性表

    一、PTA实验作业

    题目一:6-3 jmu-ds- 顺序表删除重复元素

    1.题目要求

    2.设计思路

    1)创建顺序表
    
    创建顺序表L,并置其长度为零。
    
    将主函数传递过来的数组依次放入顺序表(定义i控制元素的写入),并将顺序表长度置为数长度
    
    (2)浏览顺序表
    
    定义i控制输出,当i<顺序表长度时输出,大于时结束输出。
    
    (3)删除重复元素
    
    定义i,j,k控制循环
    
    

    for(i=0;i<L->length-1;i++)
    {

      找到与下标为i的元素data域相同的元素
      for(j=i+1;j<L->length;j++)
        if(L->data[i]==L->data[j])
        {

          将重复元素后的元素向前移一位
          for(k=j;k<L->length-1;k++)
            L->data[k]=L->data[k+1];
          L->length--;
        }
    }

    当L的长度为2且两元素的data相同时,顺序表的长度减一

    if(L->length==2&&L->data[0]==L->data[1]){   
      L->length--;
    }

    3.代码截图

     

    4.pta提交列表说明

    错误点:全部重复数据时,结果应只有一个数字,而我未修改前有两个。

    修改前:                                                  修改后:

               

    修改方法:在删除重复元素的函数中,加入一个条件语句,当顺序表长度为2且两个元素data相同时,顺序表长度减一。

    题目二:7-1 两个有序链表序列的合并

    1.题目要求

    2.设计思路

     创建、浏览、销毁函数都比较常规,不做说明。

    void Union(LinkList *&ha,LinkList *&hb,LinkList *&hc) 
    {
    LinkList
    *pa=ha->next,*pb=hb->next,*r,*s,*q; hc=new LNode; r=hc;
    当pa且pb都不为空时,进行循环
    while(pa!=NULL&&pb!=NULL) {
    pa的data小于pb的data时创建新结点存放pa的data
    if(pa->data<pb->data) { s=new LNode; s->data=pa->data; r->next=s; r=s; pa=pa->next; }
         否则创建新节点存放pb的data
    else { s=new LNode; s->data=pb->data; r->next=s; r=s; pb=pb->next; } }
    pa或pb其中一个为空时上述循环结束,进入以下循环。
    将pa或pb中剩余数据放入新链表。
    while(pa!=NULL) { s=new LNode; s->data=pa->data; r->next=s; r=s; pa=pa->next; } while(pb!=NULL) { s=new LNode; s->data=pb->data; r->next=s; r=s; pb=pb->next; }
    将新链表的next域置空 r
    ->next=NULL; }

    3.代码截图

     

    4.pta提交列表说明

    错误点一:链表为空时段错误。

    修改方法:在主函数中加入一条判断语句。在建立了链表ha和hb后,直接判断ha与hb是否为空,若为空,则输出NULL。

    错误点二:大规模输入时运行超时。

    修改方法:我先找到了运行超时的原因。我原本是先将两链表合并后再排序再输出,但此题链表本身有序,我的这种算法应该比较适合本身无序的链表。后来新写了一个合并函数,将ha与hb中的元素比较大小后将较小的元素写入hc就不会超时了。

    题目三:6-2 jmu-ds-单链表逆置

    1.题目要求

    2.设计思路 

    1)用尾插法存入数据,以保证数据按输入顺序存储。代码与课本相同,不做说明。
    (2)用头插法将已创建的链表得到数据重新存入新链表
    void ReverseList(List &L)
    {
        ListNode *p;
        ListNode *q;
        p=new node;
        p->next=NULL;
            头插法存入数据
        while(L->next!=NULL){
            q=new node;
            L=L->next;
            q->data=L->data;
            q->next=p->next;
            p->next=q;
        }
        令原链表L等于新链表
        L=p;

    3.代码截图

    4.pta提交列表说明

    错误点一:链表为空时段错误。

    修改方法:一开始我是在CreateList函数中加入了条件语句,若输入的n为零就输出NULL,但修改后发现此错误仍然存在,不论在CreateList函数中是否输出了NULL,主函数都要接着运行,此时运行碰到PrintList函数时由于缺少对于链表为空情况的判断,出现了段错误,所以最后在PrintList函数中加入了判断链表是否为空的条件语句又删除了CreateList函数的判断结果就正确了。

    二、本周PTA题目集排名

    1.顺序表PTA排名

    2.链表PTA排名

    3.我的总分

    2分

    三、本周学习总结

    1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?

    1)学习时间:在上课前花1~2小时做预习工作,对于上课老师讲的有疑惑的地方课后花时间解释解决。其余学习时间主要是在编程时对于疑惑的地方再翻书或询问同学。2)编程时间:没课的时候基本都在打pta。3)对于不懂的问题主要是询问同学或自行百度。

    2.我对线性表的认识

    线性表的存储结构主要分为两种:顺序表和链式存储。对于元素的插入与删除,用顺序表做会比较麻烦,用链表则比较方便快捷。

    3.Git提交记录截图

     

  • 相关阅读:
    Macbook键盘的使用基础技巧
    JSTL详解
    为了理想,因为爱情-开课第一天有感(鸡汤向)
    HK游记 Day2迪斯尼(下)
    MP20 MBO issue summary
    音频测量加权
    有没有降噪
    信源编码信源译码和信道编码和译码和加密和解密数字调制和解调和同步
    gcc
    数据挖掘|统计的艺术
  • 原文地址:https://www.cnblogs.com/chenyutin/p/8627411.html
Copyright © 2011-2022 走看看