第02次作业-线性表

一、PTA实验作业

题目1:6-2 线性表元素的区间删除(20 分)

2. 设计思路(伪代码或流程图)

int a[MAXSIZE]   //用来存储小于等于minD大于等于maxD的数 
for i=0 to L->Last 
  if(L->Data[i]<=minD&&L->Data[i]>=maxD) 
    a[p++]=L->Data[i] 
然后将a[]中的数赋给L->Data[],且L->Last=p-1

3.代码截图

 

4.PTA提交列表说明。

出现过段错误,多种错误,是因为没有理解清楚题目中L->Last是如何变化的,因此判断条件出错。后来将判断条件改为i<=L->Last就行了。

题目2:6-2 jmu-ds-单链表逆置(25 分)

2. 设计思路(伪代码或流程图)

创建一个有头结点的单链表,然后利用尾插法建表

ListNode *s 
for i=1 to n{ 
  cin>>s->data; 
  L->next=s; 
  L=s; 
} 
L-next置为空

对链表进行逆置相当于头插法

ListNode *s,*p 
whileL->next不为空){ 
  L=L->next; 
  p->data=L->data; 
  L=L->next; 
  p->next=s->next; 
  s->next=p; 
} 
L=s

打印链表

判断链表是否为空,若是,打印NULL;反之,打印是数与数之间用空格隔开,尾部不能有空格。 
实现方法如下: 
先打印第一个节点的数据,然后 
whileL不为空){ 
  cout<<”“<<L->data; 
  L=L->next; 
}


3.代码截图

 

4.PTA提交列表说明。

段错误,打印链表是判断为空输出NULL之后又进入了一次不为空的循环输出。将两种情况用if-else分开。

题目3:7-3 两个有序序列的中位数(25 分)

2. 设计思路(伪代码或流程图)

利用尾插法分别建立两个单链表,然后合并递增排序,根据数据个数判断出中位数所在位置输出即可

定义一个数组a[200001] 
while(i<=n&&j<=n){ 
  if S1中的数小于S2中的数 
    a[k++]=S1->data然后S1指针后移 
  else 
    a[k++]=S2->data然后S2指针后移 
} 
如果有链表指针还未到达尾部,则用循环将剩下的数据赋给a[] 
中位数所在位置的下标为(k-1)/2 
最后直接输出a[(k-1)/2]


3.代码截图

 

4.PTA提交列表说明。

此题提交一次就全部通过了测试点。

二、截图本周题目集的PTA最后排名

1.顺序表PTA排名

2.链表PTA排名

 

3.我的总分:261

三、本周学习总结

1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?

学习时间安排:在做预习作业前认真看视频,并结合书将新知识大概学习一遍。等老师上课讲时在认真听,敲代码遇到不会的再细读一遍课本。

编程时间安排:一般都在晚上打,因为晚上时间较为充足。或者有两三个小时空余的时候,这样代码可以有足够的的时间来想,不会断断续续的,那样效率不高。

遇到不懂的问题解决方法:与同学交流,让她帮忙找出错误;有时会问学姐思路,然后自己慢慢敲;由于链表不能调试,所以出现问题时会自己按照样例在纸上手动运行一遍,这样很快就能找出错误啦。

2.谈谈你对线性表的认识?

线性表是一种常用的数据结构。有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点,即“一对一”的关系。线性表中的数据元素要求具有相同类型,它的数据类型可以根据具体情况而定,我们将它的类型设定为elemtype,表示某一种具体的已知数据类型。它可以是一个数、一个字符或一个字符串,也可以由若干个数据项组成。它有顺序和链式两种存储结构。

3.代码Git提交记录截图

 

posted @ 2018-03-24 19:45  咿呀!  阅读(283)  评论(4编辑  收藏  举报