DS博客作业02-线性表

1.本周学习总结

1.1思维导图

1.2学习体会

本周学习了线性表的相关内容,第一次接触到了抽象数据类型这个概念。目前来讲,线性表的内容对于我来讲还是有点抽象,平时预习主要以看书本和看视频为主
像初始化线性表,删除或者插入某个节点这样的基本操作还不太熟练,做题要用到的时候一般都是照着书本上的模板写。
顺序表相对于链表来说,更容易理解一点,链表中又分为单链表,双链表和循环链表,还有各种七七八八的结点经常让我混乱。

2.PTA实验作业

2.1题目1:顺序表删除重复元素

2.1.1设计思路(伪代码)

思路:遍历该表,把不重复的元素放入重构的表中
void CreateSqList(List &L,int a[],int n)  //创建顺序表
.定义i和k
.对L分配内存空间
.用while循环将数据不断存入L->data[i]中
.i++,k++
.end  while
.设置L的长度:L->length=k

void DelSameNode(List &L) //删除顺序表重复元素
.定义变量i,j,k三个变量和一个开关变量flag
.for i=0 to i<L->length 
    没有重复元素时把flag=1
    for j=0 to j<k 
         if   有元素相同  flag=0  break
         end  for
         if   没有元素相同   
               L->data[k++] = L->data[i]
.end for
.置重构后该表的长度为L->length=k

2.1.2代码截图

2.1.3提交列表及说明

.Q:一开始理解错题目意思了,以为是把前后有相同的元素时,两个元素都删去,然后就一直部分正确
.A:这个题目的正确做法是首先要把第一个元素存到重构的表中,然后再跟后面的元素比较是否相同,若相同则删去后面的元素

2.2题目2:有序表插入数据

2.2.1设计思路(伪代码)

思路:遍历该表,找到合法的插入位置,插入后再把插入元素后面的元素都向后移动一个位置,使插入元素后的表仍然有序
void CreateSqList(SqList &L, int n)//创建表
.对L分配内存空间
.用while循环将数据不断存入L->data[i]中
.设置L的长度:L->length=n


void InsertSq(SqList &L, int x)     //插入数据的函数
.定义变量i和j
.while (x > L->data[i] && i < L->length) //x插入表中的条件控制 
            i++
找到插入位置i
.end while
.for  j=L->length-1  to  j>=i    //从最后一个数开始到第i个数都往后移动一个位置
.    L->data[j+1]=L->data[j]
.end for 
.把数x插入第i个位置
   
void DispSqList(SqList L) //输出顺序表内容 ,数据间空格隔开,尾部不能有空格。
.定义变量i
.如果L是空表,输出“erorr”
.否则  先输出L->data[0]
.for  i=1  to  i<L->length 
       输出“ ” ,输出L->data[i]         //保证最后一个数尾部无空格
. end for

2.2.2代码截图

2.2.3提交列表及说明

.Q:那个多种错误里主要是格式错误,一开始是用每个数后面都带一个空格的做法,这样虽然可以保证前n-1个数符合要求,但最后一个数后面也会带空格,不符合要求
.A:后来用先输出第一个数,再在后面输出的每个数前面都带一个空格,这样就可以保证了最后一个数后面没有空格的问题

2.3题目3:尾插法建链表

2.3.1设计思路(伪代码)

void CreateListR(LinkList &L, int n)//尾插法建链表,L表示带头结点链表,n表示数据元素个数
.定义两个LinkList类型的指针s,r和两个整型变量i,k
.给L分配空间并让r指向头结点
.for  i=0  to  i<n
       给s分配空间
       循环输入k,并把它存放到s->data中
       将s结点插入r->next
       r=s
.end for
.r->next =NULL

void DispList(LinkList &L)//输出链表
.定义变量i和指针p
.p=L->next    //
.如果p为空,输出“空链表”
.否则 进入while循环
      if   i!=0  输出空格
          输出p->data
         p=p->next
         i++
end while

2.3.2代码截图

2.3.3提交列表及说明

.Q:在尾插法建链表的时候,给s指针分配空间应该放在while循环里面,我给它整到外面去了

3.阅读代码

3.1

.删除字符串中所有的空格

3.2解题思路

使用重构数组的做法,把原来数组中的非空格存到新的数组中去

3.3代码截图

3.4学习体会

这段代码是上学期学习C语言时的一段代码,虽然年代有点有点久远了,但它仍有值得我学习的地方。以前在元素的删除和插入这类型的题目中,不懂用重构数组的做法去做,就会很麻烦,而且也比较难以理解。重构数组就比较好理解了,代码量也少。主要是把需要的元素放入一个新的数组里面,再输出新数组元素,这个操作便完成了。
原文地址:https://www.cnblogs.com/112Ada/p/10596140.html