DS博客作业02--线性表

1.本周学习总结(0--2分)

1.1思维导图

1.2.谈谈你对线性表的认识及学习体会。

认识:线性表是数据结构的一种,分顺序和链式。线性表中数据元素之间的关系是一对一的关系。线性表的相邻元素之间存在着序偶关系。
学习体会:上学期没怎么搞懂的链表这学期基本上明白了,数据结构的题涉及到不少指针的运用,可以说上学期学指针是给现在打的基础,这个基础真的很重要。

2.PTA实验作业(6分)

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

2.1.1设计思路(伪代码)

伪代码尽量文字描述,请用下面markdown符号渲染。如:

函数1:void CreateSqList(List &L,int a[],int n)  //创建顺序表
	定义变量i;
	给指针L分配空间,大小为n个SqList,
	for i=0 to n
		用a[i]对L->data[i]进行赋值
	令顺序表长度等于n;

函数2:void DispSqList(List L)  //输出顺序表
	定义变量i;
	for i=0 to L->length
		if(i) 输出一个空格;
		输出L->data[i]的值;

函数3:void DelSameNode(List &L)  //删除顺序表重复元素
{
	定义变量i,j,k=0;
	for i=0 to L->length
		L->data[k]=L->data[i];
		for j=0 to i
			if(L->data[i]==L->data[j])
			{
				该次赋值不算数,重新对这个L->data[k]进行赋值;
				break退出第二个循环;
			}
		}
		k++;
	}
	令顺序表长度等于k;
}

2.1.2代码截图


2.1.3本题PTA提交列表说明

2.2 题目2:6-9 jmu-ds-有序链表合并

2.2.1设计思路(伪代码)

定义LinkList类型的三个变量p,q,r;
if(L1是空链表) 
	L1头指针指向L2头结点;
	return;
else if(L2是空链表)	
	return;
指针r指向L1链表开头,进行链表重构 
p,q指向L1,L2链表首结点
while(p&&q)
	if(p->data<q->data)
		将p结点尾插入链表L1;
		指针p向后移动;
	else if(p->data>q->data)
		将q结点尾插入链表L1;
		指针q向后移动;
	else if(p->data==q->data)     //两结点数据大小相等 
		将p结点尾插入链表L1;
		指针p,q同时向后移动;
	指针r向后移动 
	if(p==NULL)
		将q结点及其后结点全部尾插入链表L1;
		退出循环;
	else if(q==NULL)
		将p结点及其后结点全部尾插入链表L1;
		退出循环;

2.2.2代码截图


2.2.3本题PTA提交列表说明

2.3 题目3:7-2 一元多项式的乘法与加法运算

2.3.1设计思路(伪代码)

函数1:LinkList AddList(LinkList L1,LinkList L2)  //多项式相加合并链表
{
	定义LinkList类型的五个变量 L,p,q,r,s;
	if(L1为空链表) 
		返回 L2;
	else if(L2为空链表)
		返回 L1;
	给头结点L分配大小为一个LNode的空间;
	指针r指向L1链表开头,新建链表;
	p,q指向L1,L2链表首结点;
	while(p&&q) 
	{
		给结点s分配大小为一个LNode的空间;
		if(p,q所指两结点指数大小不相等)
			s->index=较大的指数;
			s->coefficient=较大指数对应的系数;
			较大指数对应的指针向后移动;
		else if(两结点指数大小相等)
			s->index=该相等的指数;
			s->coefficient=两系数进行相加;
			p,q两个指针一起向后移动 
		将结点s用尾插法插入链表L;   
		指针r向后移动;
		if(q==NULL) 
			将剩余的p及其之后的结点依次赋值给结点s
			将结点s用尾插法插入链表L;
			最后一个结点的next指向NULL;
			退出循环;
		else if(p==NULL)
			将剩余的q及其之后的结点依次赋值给结点s
			将结点s用尾插法插入链表L;
			最后一个结点的next指向NULL;
			退出循环;
	返回 L;
函数2:LinkList MultiplyList(LinkList L1,LinkList L2) //多项式相乘合并链表
{
	定义LinkList类型的变量 p,q,s,r,La,Lb; 
	if(L1为空链表)
		返回 L1;
	else if(L2为空链表)
		返回 L2;
	q指向L2链表首结点 
	给结点La分配空间,新建La链表;
	if(L1或L2是空链表) 
		返回 NULL;
	while(q)
		p指向L1链表首结点 
		给结点Lb分配空间;
		指针r指向Lb链表开头,新建链表;
		while(p)
			给结点s分配空间;
			s->index=p->index+q->index;
			s->coefficient=p->coefficient*q->coefficient;
			将s结点用尾插法插入链表Lb;
			指针p,r向后移动;
		Lb链表最后一个结点的next指向NULL;
		引用AddList函数令两个多项式进行相加,并将所得结果重新给La;
		指针p,r向后移动;
	返回 La;

2.3.2代码截图







2.3.3本题PTA提交列表说明

3、阅读代码(-2--2分)

找一份优秀代码,理解代码功能,并讲出你所选代码优点及可以学习地方。主要找以下3种类型代码:

读源码,如从python或C++中找用线性表封装的库源码,分析代码功能及可以学习地方。
考研题种关于线性表内容。可以找参加过考研的学长学姐拿。尤其是想要考研同学,可以结合本章内容,用考研题训练学习。
ACM、PTA天梯赛、leecode面试刷题网站,找线性表相关题目阅读分析。
请按照下面内容填写代码阅读内容。请未必认真完成,如果发现应付,没有介绍代码思路、体会等扣分。

3.1 题目

介绍代码解决问题

3.2 解题思路

3.3 代码截图

3.4 学习体会

posted @ 2019-03-31 04:47  明微  阅读(274)  评论(0编辑  收藏  举报