• DS博客作业02--线性表


    DS博客作业02--线性表

    1. 本周学习总结(0--2分)

    1.1 思维导图

    总结线性表内容
    

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

        线性表主要由顺序表或链式表示。在实际应用中,常以栈,队列,字符串等特殊形式使用。线性表中数据元素之间的关系是一对一的关系,逻辑结构简单,便于实现和操作。具有均匀性和有序性的结构特点。
        学习体会还是多打代码,多看书吧!!!
    

    2. PTA实验作业(6分)

    本周要求挑3道题目写设计思路,调试过程。设计思路用伪代码描述。题目选做要求:
    
    • 顺序表选择一题
    • 单链表选择一题
    • 有序表选择一题
      原则上题目选择越难,代码量越大分值越高。

    2.1 题目1:

      设计一个算法,从顺序表中删除重复的元素,并使剩余元素间的相对次序保存不变。
           输入格式: 第一行输入顺序表长度。 第二行输入顺序表数据元素。中间空格隔开。
           输出格式:数据之间空格隔开,最后一项尾部不带空格。
           输出删除重复元素后的顺序表。
    

    2.1.1 设计思路(伪代码)

    伪代码尽量文字描述,请用下面的markdown符号渲染。如  :
    ** 设计思路,伪代码要用 ' ' ' 符号渲染 **
    
    • 设计思路:创建顺序表,然后用两层循环找重复元素,若有重复元素,记住该位置,之后的元素依次往前移。循环完后,输出顺序表。

    • 伪代码:

        void CreateSqList(List &L,int a[],int n)  // 创建顺序表
        {
               L=new SqList;    //初始化
               for(i=0;i<n;i++)    //建立n个数据结点
               L->length=n;     //链的长度为n;
        }
        void DelSameNode(List &L)   //删除顺序表重复元素
        {
             for(i=0;i<L->length;i++)   
    	{
    		for(j=i+1;j<L->length;)
    		{
    			if()    //比较数据是否相等;
    			{
    				for(k=j;k<L->length-1;k++)   //移动数据
    				{
    					L->data[k]=L->data[k+1];
    					
    				}
                          L->length --;    //链表长度自减
    			}
    			else   //如果找不到重复元素,j再自增;
    			j++;
                       }
                }
           }
        void DispSqList(List L)//输出顺序表
        {
              for(i=0;i<L->length;i++)   //依次输出数据
              {
                     if()    //用一个if-else语句来控制空格
                     else()
                }
         }
    

    2.1.2 代码截图


    2.1.3 本题PTA提交列表说明

    PTA提交列表中的每个错误详细说明为什么及如何解决。如图:
    

    • Q1:在第二层循环中我把j++放在括号里面。导致链表的长度每一次都自减

    • A1:调试后发现问题,但不知道怎么改,经过问同学后参考相同做法同学代码,把j++放到移动元素的循环外面。

    • Q2:刚开始对空格的控制出错!

    • A2:提交列表提示错误!

    • 反思:多阅读同学代码,学习!

    2.2 题目2:

    实现头插法建链表。需要实现下述两个函数:
    

    输入说明:

    • 行1:数据个数
    • 行2:数据内容,空格隔开

    输出说明:

    • 链表不空,输出链表内容。数据之间空格隔开,尾部不带空格
    • 链表为空,输出空链表!

    2.2.1 设计思路(伪代码)

       void CreateListF(LinkList &L,int n) //头插法建链表,L表示带头结点链表,n表示数据元素个数
       {
             LinkList s;
    	 L=new LNode();  //重新申请;
    	 L->next=NULL;
    	 for(i=0;i<n;i++)   //循环建立数据结点s;
              {
                    //头插法的语句;
               }
         }
         void DispList(LinkList L) //输出链表
          {
               LinkList p=L->next ;  //p指向首结点   
               if(p!=NULL)            //判断链是否为空;
    	  {
                        while()         //控制空格并输出链表;
                         {
                            }
                }
    

    2.2.2 代码截图


    2.2.3 本题PTA提交列表说明

    PTA提交列表中的每个错误详细说明为什么及如何解决。如图:
    

    • Q1:没有给链表申请空间;

    • A1:运行后编译器给出提示,看书修改。

    • Q2:在编译器上运行结果正确,但在PTA上有测试点过不去。

    • A2:问同学看看哪儿有问题。

    • 反思:平时多看书,了解书上的代码。

    2.3 题目3:

    需实现以下3个函数,分别为:

    • CreateSqList:创建有序表,连续输入n个正数存入有序表中。L表示顺序表指针,n表示输入数据个数。
    • InsertSq(SqList *&L,int x):顺序表L中插入数据x。
    • DispSqList:输出顺序表L中所有数据。数据间空格隔开,尾部不能有空格

    2.3.1 设计思路(伪代码)

    伪代码尽量文字描述,请用下面的markdown符号渲染。如  :
    ** 设计思路,伪代码要用 ' ' ' 符号渲染 **
    
    • 设计思路:
            创建一个有序表,往有序表中插入一个数x, 遍历有序表,标记第一个大于x的值的位置,然后链表长度加一,从最后一个位置开始,往后移,移到该位置停止,并把x赋给该位置,最后输出有序表。
    
    • 伪代码:
        void CreateSqList(SqList &L,int n) //创建有序表;
        {
                  L=new List;
    	      L->length=n;       
    	      while(i<n)            //建立n个数据结点;
    	      
       }
       void InsertSq(SqList &L,int x)  //在有序表中插入x;
       {
               int flag=0;   //判断是否找到比x大的数,若找不到,则插在有序表末尾;
                for(i=0;i<L->length;i++)   //遍历有序表;
    	   {
                        if()       //找出第一个大于x的结点;
                        for(k=L->length ;k>i;k--)
    			{
    			    L->data[k]=L->data[k-1];    //往后移动有序表;
                              }
                 }
         }
        void DispSqList(SqList L)  //输出有序表;
        {
             if(L->length==0)   //判断有序表是否为空,为空,输出error;
             else   
              {
                        while()      //输出有序表;
               }
         }
    

    2.3.2 代码截图


    2.3.3 本题PTA提交列表说明

    PTA提交列表中的每个错误详细说明为什么及如何解决。如图:
    

    • Q1:没有考虑到x查到有序表最后的情况

    • A1:拿代码给同学帮忙看,与同学的代码做比较。

    • Q2:没仔细读题目,若有序表为空,则输出error。

    • A2:在PTA上提交后看提示错误。

    • 反思:读题目要仔细。

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

    找一份优秀代码,理解代码功能,并讲出你所选代码优点及可学习地方。主要找以下3种类型代码:
    
    • 读源码,如从python或C++中找用线性表封装的库源码,分析代码功能及可学习地方。

    • 考研题中关于线性表内容。可以找参加过考研的学长学姐拿。尤其是想要考研同学,可以结合本章内容,用考研题训练学习。

    • ACM,PTA天梯赛,leecode面试刷题网站,找线性表相关题目阅读分析。

    请按照下面内容填写代码阅读内容。请内务必认真完成,如果发现应付,没有介绍代码思路,体会等扣分。
    

    3.1 题目:用python实现下列函数。

    3.2 解题思路

    介绍代码解决问题
    
      (1)初始化线性表。
      (2)判断线性表是否为空。
      (3)判断线性表是否为满。
      (4)获取线性表中某一位置的值。
      (5)修改线性表中某一位置的值
      (6)按值查找第一个等于该值的索引。
      (7)在表尾插入一个元素。
      (8)在表中任意位置插入一个元素。
      (9)在线性表的第i个位置插入value   表头   表中  表尾  
      (10)删除线性表中某一位置的值。
      (11)删除线性表。
      (12)销毁线性表。
    

    3.3 代码截图



    3.4 学习体会

           看不懂,但仔细看完之后,感觉它的语言比较简洁,一个函数里面只有几句语句。而且大多语句类型雷同。
    
  • 相关阅读:
    【.NET】VS2013创建Windows服务与调试服务
    【JS】处理数据四舍五入(tofixed与round的区别详解)
    【微信小程序】 基础语义笔记2:基本组件、获取节点信息
    面向对象和面向过程的优点和缺点
    【微信小程序】 基础语义笔记1:配置、页面文件、组件。
    【微信小程序】 wxParse组件
    zookeeper 碎片知识点
    zookeeper 基本概念
    RocketMQ 知识点
    单例模式---双层检验锁+volatile
  • 原文地址:https://www.cnblogs.com/Gejkdj/p/10625394.html
Copyright © 2020-2023  润新知