DS博客作业02--线性表

1.本周学习总结

1.1思维导图

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

    初学线性表,也感觉到数据结构的一大难点,首先是顺序表,顺序表和数组类似,储存位置是连续的,但是顺序表多了长度length,
  麻烦的是顺序表的插入和删除需要移动一大部分数据。有序表就是把数据排好序,有序表可以用顺序表储存,也可以用单链表储存。
  链表有单链表和双链表、循环链表,链表在处理数据的插入和删除有明显的便捷。当然,在线性表中,运用了很多算法,然而算法
  是一个比较困难的部分,需要花大量时间去理解,才能够消化。

2.PTA实验作业

2.1.题目1:

    要求实现3个函数,在递增的顺序表中插入一个新整数,并保持该顺序表的有序性

2.1.1设计思路(伪代码)

    遍历顺序表,记录要插入的位置i,将i后面的数据后移,将要插入的数据插入位置i

    定义i,j
    for    i=0  to  n-1
       if    L->data[i]>x    //寻找到要插入的位置 
	break;
    end for
    for   j=n    to    i //将L的第i项后的后移一位 
    L->data[j]=L->data[j-1]
    L->data[i]=x    //将x插入到i的位置 

2.1.2代码截图


2.1.3本题PTA提交列表说明

    Q1:考虑范围时没有考虑完整
    A1:经过几次数据输入验证,调试好范围

2.2.题目2:

    本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表为带头结点链表。请实现逆转函数

2.2.1设计思路(伪代码)

    新建一个链表,将L链表用头插法读取到新建的链表里

        申请node,head结点
        为newL申请动态空间
	让head为newL的头节点;
	while    L->next    //利用头插法,把L链表的值重构到新链表里
		让    node->next    指向    newL->next
		让    newL->next    指向    node
		L    指向    L->next;
        end while
	L=head;

2.2.2代码截图



2.2.3本题PTA提交列表说明

    Q1:编译错误是L传参的结构体名错误
    A1:在编译软件改了结构体,忘了pta里給的是函数,结构体不能改

    Q2:后来只有空链表可以过
    A2:修改了循环里链的关系

2.3.题目3:

  链表L是一个有序的带头结点链表,实现有序链表插入删除操作。

2.3.1设计思路(伪代码)

    插入:遍历链表,以L->next->data与要插入的e作比较,当L->next->data大于e时,
  让e所在的结点指向L->next,L->next指向e所在的结点
    删除:遍历链表,找到L->next->data与要删除的e作比较,找到后,令L->next指向
  L->next->next;

    while    p->next    //以p->next为判断的好处的,可以找到等于e的上个节点 
	if     p->next->data >= e
	break
	p    指向    p->next
    end while
	r->next    指向    p->next
	p->next    指向    r

2.3.2代码截图




2.3.3本题PTA提交列表说明

    Q1:链表全删这个点没考虑到
    A1:反复看题目才发现,看题很重要啊

3、阅读代码

3.1 题目

    线性表是n个元素的有序集合(n≥0),n是线性表中元素的个数,称为线性表的长度。可以用一组地址连续的存储单元依次
    存储线性表中元素,采用这种存储方式的线性表称为顺序表。请在顺序表上实现运算,实现顺序表的逆置,删除表中所有
    元素值等于x的元素
    输入
    三组数据,顺序表元素类型分别为整型、字符型和实型。
    每一组第一行给出元素数目n(0<n≤1000),第二行给出元素数值,第三行给出待删除的元素。
    输出
    三组数据,每一组第一行给出逆置后的顺序表元素,第二行是在此基础上删除指定元素后的顺序表元素,每一个输出元素后
    均有一个空格,如果元素全部被删除,那么输出一个空行。

3.2 解题思路

    初始化线性表,将数据写入线性表中,都是运用头插法,删除就是遍历查找相同,找到后改变结点指向

3.3 代码截图



3.4 学习体会

    写法上比较简洁,而且使用标记,这样使得判断更加简单方便,在删除函数里,return 返回可以区别是否有找到要删除的数
    逆置使用的是数组,觉得还是用链表比较节约空间
posted @ 2019-03-28 22:03  白白以桃花入笺  阅读(464)  评论(0编辑  收藏  举报