博客作业2---线性表

一、PTA实验作业(5分)

题目1:6-3 jmu-ds- 顺序表删除重复元素

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

···
一、创建顺序表

if(n<=0) exit(0);
给L申请空间
for int i=0 to n-1
输入数据给L->data[i]
end for
令L->length等于循环次数n

二、输出顺序表

for int i=0 to L->length-2
输出 L->data[i]+空格
end for
输出 L->data[i]

三、删除顺序表重复元素

定义整型循环变量i, j=0, k;  
for i=1 to L->length-1; i++ 
    初始化k=0;  
    遍历已经保存下来的数,判断已存数与原数组中的数是否相同, 如果不同k++
    if (k>j)说明遍历了新的数组且无重复 ,则创建新的数组数据 
end for
L->length=j+1

···

2.代码截图

3.PTA提交列表说明。

这个问题是,刚开始没有判断空表,然后新建数组的下标弄乱了,改一改就对了。

题目2:6-4 集合的基本运算(单链表)

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

···
一、单链表元素递增排序

定义字符型变量t,用于数据交换
定义结构体指针 r, s;
for r=L; r!=NULL; r=r->next
for s=r->next; s!=NULL; s=s->next)
    	比较相邻两个数据的大小,如果前一个r->data大于后一个s->data
		交换两数
    end s
end r

二、输出链表元素

定义一个结构体指针p指向头结点L的下一个节点
while(p)
输出p->data
p后移一个节点
end while
换行

三、求两有序集合ha、hb的并集hc。
{
定义结构体指针 ta, tb, tc;
给hc申请空间
hc->next = NULL;

tc = hc;  
ta = ha->next;
tb = hb->next;
while(ta,tb同时不为空){
	if(ta->data < tb->data)
	    给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
        ta后移一个结点
else if(ta->data > tb->data)
    给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
        tb后移一个结点
else if(ta->data == tb->data) 给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
        ta,tb都后移一个结点

while (ta不为空)
    给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
        ta后移一个结点
end while

while (tb不为空)
	  给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
      tb后移一个结点
end while

tc->next = NULL;

}

四、求两有序集合ha、hb的的交集hc。

定义结构体指针ka, kb, kc;
给hc申请空间 
hc->next = NULL;
kc = hc;
ka = ha->next; kb = hb->next;
while(ka,kb同时不为空){    
    if ka中数据等于kb中数据 
            给kc下一个节点申请空间,kc后移,将相等的数据放在kc里
            ka,kb后移一个节点

    else if ka中数据小于kb中数据,ka后移一个结点
        else if ka中数据大于kb中数据,kb后移一个结点
    end while

kc->next = NULL;

五、求两有序集合ha、hb的差集hc

定义结构体指针ta, tb, tc;
给hc申请空间
ta = ha->next
tc = hc
while(ta)
每次进行外循环的时候对tb初始化为hb的下一个节点
while(tb不为空,切tb的数据不等于ta的数据)
	tb后移
    if(上一个循环结束后tb所指为空)说明没有找到相等的
	给tc的下一个节点申请空间,tc后移一个结点
		将ta中的数据存入tc
    ta后移一个节点,保证遍历完ta链表,控制循环
end while
tc->next = NULL;

···

2.代码截图



3.PTA提交列表说明。

这道题最大的问题就是,我没有先给L的下一个结点申请空间,编译的时候一个段错误,输出递增的结果之后就卡在那里了,卡了好久好久好久,最后去百度了一下才弄清楚是哪里除了问题。

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

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

···
求两有序集合ha、hb的并集hc。
{
定义结构体指针 ta, tb, tc;
给hc申请空间
hc->next = NULL;

tc = hc;  
ta = ha->next;
tb = hb->next;
while(t1,t2同时不为空){
	if(t1->data < t2->data)
	    给t下一个节点申请空间,t后移,将相等的数据放在t里
        t1后移一个结点
else if(t1->data > t2->data)
    给t下一个节点申请空间,t后移,将相等的数据放在t里
        t2后移一个结点
else if(t1->data == t2->data) 给t下一个节点和下下个节点申请空间,将相等的数据放在刚申请的t的两个节点上
        t1,t2都后移一个结点

while (t1不为空)
    给t下一个节点申请空间,t后移,将相等的数据放在t里
        t1后移一个结点
end while

while (t2不为空)
	  给t下一个节点申请空间,t后移,将相等的数据放在t里
      t2后移一个结点
end while

t->next = NULL;

}
···

2.代码截图


3.PTA提交列表说明。

  • 这道题就是集合的基本操作做会了就解决了,编辑错误是用了C的没用C++的。

二、截图本周题目集的PTA最后排名(3分)

1.顺序表PTA排名

2.链表PTA排名

3.我的总分:215

三、本周学习总结(2分)

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

  • 本周的课堂派预习作业只有一次,写PTA的时间还是不少的,顺序表和单链表的第一题都是基本操作,做的时候比较懵,是对着书打的代码,觉得对着书抄没什么用就自己慢慢打,还是要很久的,一道题要做很长时间。虽然耗时但是是有用的,记得住。
  • 学习时间安排:课堂派做预习作业之前预习课本,上课认真听, 做PTA 的时候再好好看看课本内容
  • 编程时间安排,通常除了书面作业之外,否则打开电脑后第一时间就是打开PTA做题,刚接触的部分做得慢就需要时间了
  • 不懂的问题会先看一下代码哪里出了问题,可能错的地方改改,看看结果,如果不行就去翻书,再改,还不对的话会去问问同学或者百度。

2.谈谈你对线性表的认识?(1分)

  • 线性表、包括顺序表和链表。顺序表里面元素的地址是连续的,链表里面节点的地址不是连续的,是通过指针连起来的。
  • 若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。若需要频繁插入和删除时,宜采用单链表结构。
  • 当线性表中的元素个数变化较大或者根本不知道有多大时,最好用单链表结构,这样可以不需要考虑存储空间的大小问题。而如果事先知道线性表的大致长度,用顺序存储结构效率会高很多。

3.代码Git提交记录截图

四、阅读代码(选做,加1分)

求a以内的所有质数的和


循环条件 用b,c,a,d控制得很巧妙,很大程度上减少了执行次数,但是for比较多,a的数小的话比较好用,过大会内存超限。

posted on 2018-03-25 22:27  黑白熊熊  阅读(203)  评论(2编辑  收藏  举报

导航