博客作业2---线性表

一、PTA实验作业(5分)

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

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

void CreateSqList(List &L,int a[],int n)  
	定义整型变量i表示下标
	为L申请SqList中的动态存储空间
	置L的初始长度为0
	如果长度为0 返回空
	否则
		for i=0  to n-1
	                L->data[i]=a[i];
                end for
        L->length++; 

void DispSqList(List L)//输出

	定义整型变量i表示下标
	if(L->length!=0)
	     for  i=0  to  L->length-1
	           输出L->data[i]<<" "
	输出L->data[L->length-1]

void DelSameNode(List &L) //删除顺序表重复元素

	定义整型变量k,i,j,flag=0;
	for  i=0 to i=L->length-1从头开始遍历
		for j=i+1 to j=L->length-1从下一个数开始遍历
		   如果L->data[i]等于L->data[j]
		   	  flag=1;//有重复
			  break; 
		如果有重复
		for k=j to k=L->length-1
		   L->data[k]=L->data[k+1]
	flag=0;
	L->length减一
	i减一

2.代码截图

3.PTA提交列表说明。

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

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


void Union(LinkList *ha,LinkList *hb,LinkList *&hc)  //求两有序集合ha、hb的并集hc。(二路归并)
	
        申请空间保留hc里面的数据
	while(pa!=NULL&&pb!=NULL){
		如果pa->data小于pb->data)
                        为s申请空间
			保留pa里面的数据
			连接到链表中
                        pa向后移动 
		否则
                        为s申请空间
                        保留pb里面的数据
			连接到链表中
                        如果pa->data==pb->data  
                             pa后移  
                        pb后移
	while(pa!=NULL)
                 将p中剩下的节点都用开辟新空间连接节点的方式放到链表去
	while(pb!=NULL)
                 将p中剩下的节点都用开辟新空间连接节点的方式放到链表去

void InterSect(LinkList *ha,LinkList *hb,LinkList *&hc)	//求两有序集合ha、hb的的交集hc。

    while(pa!=NULL)  
    	pb指向hb表头
    	while(pb!=NULL)
    	  如果pb->data==pa->data
                  为s申请空间
	          保留pa里面的数据
		  连接到链表中
                  插入pc
         pb=pb->next遍历B集合查找 
      pa后移 

void Subs(LinkList *ha,LinkList *hb,LinkList *&hc)//求两有序集合ha、hb的差集hc 

    while(pa!=NULL)  
    	pb指向hb表头
    	while(pb!=NULL){
    	    如果pb->data==pa->data
    	    	flag=1 AB集合有相同值 
    	    	跳出循环
           pb后移 遍历hb集合查找
        如果flag==0无交叉元素 
                  为s申请空间
	          保留pa里面的数据
		  连接到链表中
                  插入pc;  
        pa后移
        flag=0进入新一轮循环继续比较

2.代码截图

3.PTA提交列表说明。

二路归并一开始没有考虑两个集合有相同字母的情况 需要再判断一次 否则会重复输出,答案错误

题目3:7-1两个有序链表序列的合并

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

int main()

	int a[1000001]={0};
	int b[1000001]={0};
	定义整形变量i=0,存放下标,num存放数字
	while(1)
		输入数字num;
		如果num不等于-1
			a[i++]=num对数组赋值
		否则 跳出循环
	建立ha链表
	i=0
	while(1)
		输入num
		如果num不等于-1
			b[i++]=num对数组赋值
		否则 跳出循环
	建立hb链表
	调用合并函数
	输出链表hc

void Union(LinkList *ha, LinkList *hb, LinkList *&hc)

	 申请空间保留hc里面的数据
	while(pa!=NULL&&pb!=NULL){
		如果pa->data小于pb->data)
                        为s申请空间
			保留pa里面的数据
			连接到链表中
                        pa向后移动 
		否则
                        为s申请空间
                        保留pb里面的数据
			连接到链表中
                        如果pa->data==pb->data  
                             pa后移  
                        pb后移
	while(pa!=NULL)
                 将p中剩下的节点都用开辟新空间连接节点的方式放到链表去
	while(pb!=NULL)
                 将p中剩下的节点都用开辟新空间连接节点的方式放到链表去

2.代码截图

3.PTA提交列表说明。

没理解清题意,合并的时候不需要删去重复元素,最后一个元素后面还有空格

二、截图本周题目集的PTA提交列表及最后排名。

PTA排名

1.顺序表PTA排名

2.链表PTA排名

3.我的总分:211

三、本周学习总结

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

学习时间主要是等PTA或者预习作业发布,很少自己主动去学习,编程时间也大多比较集中,而不是有空就敲敲代码。不懂的问题一般是问写完了的同学,和他们交流询问解决。这学期知识容量大,预习的时候没有看完书本例题,导致上课感觉有点吃力,对链表的一些知识不太理解,听课效率不高。对目前被动的学习不太满意,时间分配需要转变,也需要花更多的时间来弥补对书本代码的熟悉,应该有空就敲敲代码,周末不能再那么放松。

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

线性表包括顺序表和链表。线性表的顺序存储结构是:把线性表中的所有元素按照其逻辑结构依次存储结构到向计算机申请的一块存储空间,但其缺点就是不好控制其内存大小,不便于内存的管理;线性表的链式存储结构是:每个存储节点中都包含有元素本身的信息,而且包含元素之间逻辑关系的信息,其相比顺序存储结构的优点是:可以实现动态申请空间进行管理。
另外就是链表里面节点的地址不是连续的,是通过指针连起来的。链表有利于保存数据(利用链表进行增加删除等操作会比较容易)
循环链表也是一种链式储存结构,它的特点是尾节点的指针域不再是空,而是指向头节点,使链表形成环状结构,因此可从表中任一一点出发寻找其他节点
双链表中每个节点有两个指针域,一个指向前驱节点,另一个指向后继节点,相比单链表,访问节点更加方便

3.代码Git提交记录截图

3.代码Git提交记录截图

posted @ 2018-03-25 22:16  evfun  阅读(226)  评论(1编辑  收藏  举报