zoukankan      html  css  js  c++  java
  • 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 返回可以区别是否有找到要删除的数
    逆置使用的是数组,觉得还是用链表比较节约空间
    
  • 相关阅读:
    机器学习
    Python
    sublime的推荐插件
    C语言编程
    将生成logo图片导入到Altium Designer中
    基于MDK的stm32实践过程中,debug的总结
    LCD12864使用总结
    c语言使用技巧
    LCD12864显示中文乱码
    在Keil中做stm32的软件仿真,查看输出PWM波形时,在逻辑分析仪中规定IO口signal,出现"unknow signal"
  • 原文地址:https://www.cnblogs.com/B-hai/p/10618036.html
Copyright © 2011-2022 走看看