博客作业2---线性表

一、PTA实验作业(5分)

1.题目1:6-3 jmu-ds- 顺序表删除重复元素(25 分)

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

	for  i=0 to  i<L->length遍历链表
	    for  j=i+1 to  j<L->length查找链表中的数看似否为重复元素
		    如果找到该数,把它的置为-100
			 
	for i=0  to  i<L->length再次遍历链表
           当链表元素不是重复元素,即不等于-100时
           把不重复元素依次放入链表中,即依次修改旧链表元素值
	    k++记录新链表长度
	end i	
  把链表长度置为k

3.代码截图



4.PTA提交列表说明。


第一次提交时有一个点没通过,提示词-空表,后来发现输出语句是错的,错误如下:

 j=L->length-1;
    for(i=0;i<j;i++)
       printf("%d ",L->data[i]);
       printf("%d",L->data[j]);

后来更改了该语句为:

for(i=0;i<L->length;i++){
    	if(i==L->length-1)  printf("%d",L->data[i]);
    	else printf("%d ",L->data[i]);}

先判断是否为最后一个节点,再决定节点结尾带不带空格,避免了顺序表为空的情况

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

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

 - 排序
 
    for  p=L  to  p!=NULL遍历链表
   
         for  q=p->next  to  q!=NULL遍历p后面的链表
        
               当 p->data大于q->data时
            
               p指向的元素与q指向的元素交换
               重复交换操作直到遍历完整个p链表

 - 求并集
令新链表头节点等于ha的头结点
	令pa=ha->next,pb=hb->next
	while  pa和pb都不为空指针
        分别比较pa和pb中的元素
            将最小的元素放入新链表中
            取完最小值的链表指针移向下一元素
      重复上面操作,直到其中一个链表已经遍历完       
	如果pa!=NULL
    	pc->next直接指向剩余的pa
   如果pb!=NULL
    	pc->next直接指向剩余的pb

   
 - 求差集
 
  while  pa不是空指针
       pb=hb->next;
       while  pb!=NULL 且 pb->data小于pa->data
             pb指针指向下一个节点
       若pa结点值不在B中
        s=(LinkList *)malloc(sizeof(LinkList));
        s->data=pa->data;
        pc->next=s;
        pc=s;     插入新链表中
   pa指向下一个结点

3.代码截图

冒泡排序

求并集

求交集

求差集

4.PTA提交列表说明。



后面两个测试点无法通过,原因是我之前写的输出函数有错误,当链表为空表时,该题的要求是不能输出内容,而我写的会输出NULL,后来我把输出语句改了一下,最后两个测试点都通过了。

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

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

求并集
令新链表头节点等于ha的头结点
	令pa=ha->next,pb=hb->next
	while  pa和pb都不为空指针
	
        分别比较pa和pb中的元素
            将最小的元素放入新链表中
            取完最小值的链表指针移向下一元素
      重复上面操作,直到其中一个链表已经遍历完       
	
   如果pa!=NULL
    	pc->next直接指向剩余的pa
   如果pb!=NULL
    	pc->next直接指向剩余的pb

把两链表连成一个有序链表
while(r){
		n1++;
		r=r->next;
	}
求新链表的长度n1
由于(n1+1)/2即为中位数,指针后移(n1+1)/2就得到中位数的节点

3.代码截图




4.PTA提交列表说明。


第一次写的时候用的是数组来写,出现了两个错误

第二个错误的原因是我理解错了题意,题中要求的是把两个表组成一个表,而我求了他们的并集,把相同的元素删掉了。最后一个错误是我用了数组来写,而数组空间不够大,后来我就改成了用链表来动态申请空间,不过数组来写的话把数组写大点也是可以的。

改了用链表之后最后一个测试点又由段错误变成了答案错误
错误原因:把函数前面的“typedef int ElemType”语句错写成了“typedef char ElemType”

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

1.顺序表PTA排名

2.链表PTA排名

3.我的总分:235

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

1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?(1分)
安排内容:学习时间安排、编程时间安排、不懂问题是哪种方式交流?

本周主要时间都花在写PTA上,写PTA时遇到问题的时候会向同学请教。不太满意,写的时候发现对链表还不熟悉,很多基本的操作如链表的删除等都要翻看课本才写得出来,主要原因是预习的时候不太认真。本周打算先看一下课本,复习一下,这周写PTA集太依赖课本了。

2.谈谈你对线性表的认识?(1分)
线性表是很灵活的,可以随时改变大小,而我们之前学的数组不能,所以数组会占用很多内存,运行效率没有线性表高,比如有一些题目的数据大小没有给出,运用线性表可以灵活的分配内存,不会造成资源的浪费,这是线性表的优点。线性表包括顺序表和链表,线性表存储元素的类型都是一样的。

3.代码Git提交记录截图

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

posted @ 2018-03-25 21:00  梁才玉  阅读(223)  评论(1编辑  收藏  举报