博客作业2---线性表

一、PTA实验作业

1、6-3 jmu-ds- 顺序表删除重复元素

1)、设计思路

CreateSqList://新建顺序表,存放数据,记录个数
    //给L分配内存;
    L->length=n;
    //循环变量i
    for i=0 to n-1
        //将a[i]的内容放到L->data[i]中
    end i
    
DispSqList://输出顺序表,如果顺序表为空则不输出
    //定义循环变量i
    for i=0 to L->length-1
        //如果i的值等于L->length-1
            //就输出L->data[i]
        //否则输出L->data[i]+" "
    end i
    
DelSameNode://删除相同元素(即循环向前覆盖)
    //定义循环变量i,j,k;定义s存放数值
    for i=0 to L->length-1
        //把L->data[i]的值放到s中
        for j=i+1 to L->length-1
            //如果s的值等于L->data[j]
                for k=j to L->length-1            //循环覆盖
                    将L->data[k+1]的值放在L->data[k]中
                end k;
                L->length减一,i也减一;
        end j;
    end i;

2)、代码截图


3)、PTA提交列表说明

  • 测试点中的空表,由于我第一次用的输出方式问题,使得在空表的时候会输出一些乱码。后来在输出的循环中加入判断来控制空格的输出就完成了。
  • “全部重复数据”,则是由于循环覆盖的i的问题,覆盖完成后要使i减一,再次判断才行。至于那些5分的则是因为把i--放在了不合适的地方导致无限循环。

2、7-1 两个有序链表序列的合并

1)、设计思路

//定义结构体LNode{ int data ; struct LNode *next};其结构体指针别名为List
CreatList:
    新建头结点L,定义n存放输入的数据,定义结构体指针p指向L;
    while 1
        //记录n
        若n等于-1就结束循环
        新建结点s,存放n的数值
        以尾插法连接s和p
    end while

DispList:
    新建指针p指向头结点L的下一个结点
    若p内容为空,就输出NULL
    while p
        若p的下一结点为空,则输出不带空格的p->data;
        不然就输出p->data+" "
        p指向p的下一结点
    end while

Union:
    //合并
    新建指针:p1指向S1的下一个结点,p2指向S2下一结点,t,s。
    给S3赋予空间,并把t指向S3
    while p1 && p2
        若p1指向的结点的数据数值小于p2指向的,就将p1指向的结点的数据以尾插法的形式放到S3中,并且p1移向下一结点。
        不然就是p2指向的结点数据同样以尾插法放到S3中,p2移向下一结点
    end while
    while p1 
        若S1链表还有结点未经历,将这些结点也以尾插法放进S3里
    end while
    while  p2
        若S2链表还有结点未经历,将这些结点也以尾插法放进S3里
    end p2
    将t指向的结点的指针域初始为空

2)、代码截图





3)、PTA提交列表说明

  • 基本上错在“有并列”和“大规模输入”这两个测试点。
  • 在尝试之后发现题目不要求求并集,有并列的情况下无需去重。
  • “大规模输入”的话,在我这里跟“有并列”是一起的,在改完代码之后就一起通过了。

3、7-2 一元多项式的乘法与加法运算

1)、设计思路

//定义结构体LNode{ int  coef ; int expn  ;struct LNode * next ;}//依次是系数、指数、指针域
CreateList:
    //定义循环变量i,引入个数n
    给L赋予空间,新建指针s,p;p指向L;
    for i=0 to n-1
        给s赋予空间,读入数据,尾插法与p连接
    end i
    p的指针域置为空
    
DispList:
    定义控制变量i;使L指向L的下一结点
    若L没有内容,输出“0 0”;
    否则
        while L
            若i非0,不输出空格
            不然,输出空格
            输出该结点的系数和指数数据,中间有空格;L指向L的下一结点
        end while

MultipList:
    //乘法
    定义整型变量coef、expn存放要用到的数据
    新建指针p1指向L1的下一结点,p2指向L2的下一结点,指向要删除的结点的del,t,s;
    赋予L3空间,让t指向L3,L3的指针域置为空
    若L1、L2有一个为空链表,则返回
    while p2
        先使L1的第一项遍乘p2,将获得的多项式尾插法形式存放L3中;
    end while p2
    for p1=p1->next to NULL
        将t重新指向L3,p2重新指向L2的下一结点
        for p2 to NULL
            coef存放p1的系数乘p2的系数之积,expn存放p1的指数加上p2的指数之和;
            for t to t->next==NULL或t->next->expn>expn
            end t;
            若t->next为真且t->next->expn==expn
                若t->next->coef + coef 值不为0,就使t->next->coef 加上coef
                否则删除这一结点
            不然尾插法加上新建的数据为coef和expn的结点
        end p2
    end p1

AddList:
    //相加
    给L3分配空间,将其指针域置为空
    定义指针p指向L3,p1指向L1->next,p2指向L2->next,t;
    while p1 && p2
        若p1的指数等于p2的指数,
            若p1与p2的系数相加不为0,则尾插法插入L3中,p1和p2指针指向向后移动。
        或p1指数大于p2指数
            新建结点,尾插法插入L3,p1指针指向向后移动
        不然
            新建结点,尾插法插入L3,p2指向向后移动
    end while
    若L1或L2链表还有结点未经历,则将这些未经历的结点尾插法接入L3中。

2)、代码截图










3)、PTA提交列表说明

  • “系数和指数取上限,结果有零多项式”,原因是我使用的是来自数据结构群的模板,模板中的系数是float类型,不符合这个测试点的要求。
  • “输入有零多项式和常数多项式”,原因是我在AddList函数里多加了一个对L1、L2是否有一个为空的判断,这个判断对于加法而言是没有必要的。

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

1.顺序表PTA排名

2.链表PTA排名

3.我的总分:

  • 261

三、本周学习总结

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

  • 在能够完成各科作业/预习作业/实验作业的基础上多花些时间看书或看视频学习。
  • 不是很满意。想在周末的时候多花一些时间在数据结构的学习上。

2.谈谈你对线性表的认识?

  • 线性表包含顺序表和链表。是常用的数据结构,合理的设计线性表能够更好的完成目标。
  • 学习顺序表的操作集
  • 学习链表的操作集
  • 学习单链表、双链表的构建
  • 学习循环单链表、循环双链表的构建

3.代码Git提交记录截图

posted @ 2018-03-25 21:25  那就这个名字  阅读(291)  评论(1编辑  收藏  举报