zoukankan      html  css  js  c++  java
  • 线性表博客园作业

    1.本周学习总结

    1.1思维导图

    总结线性表内容

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

    对于本章线性表的学习,对链表的灵活性又有了新的认识,线性表这章学到了顺序表的存储结构顺序表(一般联系数组结构),线性表的存储结构是链表(用到链的知识点),链表中又分支了单链表、双链表、循环链表....单链表我认为是最常用和最基础的一种线性表储存方式,另外双链表对于特点问题解决起来更方便,循环链表不用担心指针指向空。

    2.PTA实验作业

    2.1.题目1:题目名称

    6-1 jmu-ds-区间删除数据

    2.1.1设计思路(伪代码)

    begin:
    函数1{
    定义变量i,n;//(i用于对该数组元素进行遍历,n用来存储数组长度)
    输入数组元素。
    }
    
    and then:
    函数2{
    定义变量j  //(用于存储当前数组的新长度)max,min设置为删除区间
    for i=1;i<L->length 
    {
    then:if判断是否在该删除区间;
    j++  ------》》》记长度;
    }
    end
    L->length=j;
    }
    函数3{
    if 判断删除操作后长度是否为0 是 ----> cout<<"***** "
    else
    {
    对链表进行遍历
    i!=L->length    /////防止越界;
    }
    

    2.1.2代码截图

    2.1.3本题PTA提交列表说明。


    简要概括遇到的问题:
    Q1:开始不理解void DelNode(SqList &L,int min,int max)中j变量为什么要设置,后来知道j其实是为了对新的链表长度的储存 qwq
    A1.解决方案:开始只是用i进行遍历,没有用j进行保存长度,编译答案不对,后来增加j进行储存删除后的链表长度======答案正确

    2.2 题目2

    题目名称

    6-7 jmu-ds-单链表逆置

    2.2.1设计思路(伪代码)

    begin:
    {   定义头结点,申请动态空间
      head=newL;//初始化头结点
     and then:重构数据
    newL->next=NULL;
      L=L->next;
    }
    while(L)//进行遍历
    {
    申请新的动态空间
    node->data=L->data;
        node->next=newL->next;
        newL->next=node;
        L=L->next;
    }//让node指的内容等于newl指向的内容,newl指针再指node,从而得到逆序的链表
    

    2.2.2代码截图

    2.2.3本题PTA提交列表说明。


    先说明一下,这道题我自己觉得很有意思,所以放上来qwq
    说一下觉得难懂和有用的部分:
    A1.### 图中是自己对这段代码的理解,比较抽象,所以很难用语言解释。。。。

    A2. 进行重构的做法

    2.3 题目3

    3.1 题目

    6-10 jmu-ds-有序链表的插入删除//这道题是借鉴同学的,实在做不出来

    3.2 解题思路

    //插入元素e函数{
    申请动态空间  
    尾插法插入元素e
    
    }
    then:
    //链表删除插入元素e{
    设置flag
    定义和初始化新结点p,q,头结点为p
    while{
    遍历查找元素e
    若找到flag为0
    }
    //有序表删除元素e{
    同样定义新结点p为头结点,r指date域
    while{
    找出结点为e的上一节点
    }
    倒叙链表
    }
    

    3.3 代码截图



    3.2.3本题PTA提交列表说明。


    A1.在处理有序表的删除操作时 以p->next为判断的好处是可以找到等于e的上个节点

    3.4 学习体会

    3、阅读代码(-2--2分)

    //该代码摘录于IPMsg342r2
    #ifndef __TLIST_H
    #define __TLIST_H
     
    struct TListObj {
    	TListObj *prior, *next;
    };
     
    class TList {
    protected:
    	TListObj	top;
    	int			num;
     
    public:
    	TList(void);
    	void		Init(void);
    	void		AddObj(TListObj *obj);
    	void		DelObj(TListObj *obj);
    	TListObj	*TopObj(void);
    	TListObj	*EndObj(void);
    	TListObj	*NextObj(TListObj *obj);
    	TListObj	*PriorObj(TListObj *obj);
    	BOOL		IsEmpty() { return	top.next == &top; }
    	int			Num() { return num; }
    };
     
    #endif //__TLIST_H
     
    
    #include "TList.h"
     
    TList::TList(void)
    {
    	Init();
    }
     
    void TList::Init(void)
    {
    	top.prior = top.next = &top;
    	num = 0;
    }
     
    void TList::AddObj(TListObj * obj)
    {
    	obj->prior = top.prior;
    	obj->next = &top;
    	top.prior->next = obj;
    	top.prior = obj;
    	num++;
    }
     
    void TList::DelObj(TListObj * obj)
    {
    	if (obj->next) {
    		obj->next->prior = obj->prior;
    	}
    	if (obj->prior) {
    		obj->prior->next = obj->next;
    	}
    	obj->next = obj->prior = NULL;
    	num--;
    }
     
    TListObj* TList::TopObj(void)
    {
    	return	top.next == &top ? NULL : top.next;
    }
     
    TListObj* TList::EndObj(void)
    {
    	return	top.next == &top ? NULL : top.prior;
    }
     
    TListObj* TList::NextObj(TListObj *obj)
    {
    	return	obj->next == &top ? NULL : obj->next;
    }
     
    TListObj* TList::PriorObj(TListObj *obj)
    {
    	return	obj->prior == &top ? NULL : obj->prior;
    }
    

    分析:
    代码作者仅仅只有呢一百多行得代码就完成了双向链表
    功能如下

    1. 添加节点
    2. 删除节点
    3. 取得头节点
    4. 取得尾节点
    5. 取得下一个节点
    6. 取得上一个节点
    7. 链表是否为空的判断
    8. 取得链表节点个数
      代码优秀的地方:1.TListObj* TList::TopObj(void)函数中多次用到异或语法,使代码的长度减小但是代码的可读性更强和“高级”
      2.void TList::AddObj(TListObj * obj)函数中对于链表的指向进行双向定义,代码量小,但是思维量较大,很难想得出来这种处理方法,可借鉴
      3.代码的简洁度、命名等等都是非常的好,函数封装的很好

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

    读源码,如从python或C++中找用线性表封装的库源码,分析代码功能及可以学习地方。
    考研题种关于线性表内容。可以找参加过考研的学长学姐拿。尤其是想要考研同学,可以结合本章内容,用考研题训练学习。
    ACM、PTA天梯赛、leecode面试刷题网站,找线性表相关题目阅读分析。
    请按照下面内容填写代码阅读内容。请未必认真完成,如果发现应付,没有介绍代码思路、体会等扣分

  • 相关阅读:
    位运算操作
    C 动态分配内存
    数据查询语言 DQL
    数据操纵语言 ,DML, 增删改
    Convert Sorted List to Binary Search Tree
    Longest Consecutive Sequence
    Binary Tree Postorder Traversal
    Triangle
    4Sum
    3Sum Closest
  • 原文地址:https://www.cnblogs.com/mr3woman/p/10599401.html
Copyright © 2011-2022 走看看