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 学习体会

       看不懂,但仔细看完之后,感觉它的语言比较简洁,一个函数里面只有几句语句。而且大多语句类型雷同。
原文地址:https://www.cnblogs.com/Gejkdj/p/10625394.html