• 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 学习体会

  • 相关阅读:
    [大数据相关] Hive中的全排序:order by,sort by, distribute by
    [mysql] Mysql数据分组GROUP BY 和HAVING,与WHERE组合使用
    【hadoop环境问题】namenode无法启动问题解决
    【java】Java.math.BigDecimal.subtract()方法实例
    利用 force index优化sql语句性能
    navicat连接远程数据库报错'client does not support authentication protocol requested by server consider ...'解决方案
    spark SQL学习(数据源之parquet)
    spark SQL学习(load和save操作)
    spark学习(RDD案例实战)
    spark学习12(Wordcount程序之spark-shell)
  • 原文地址:https://www.cnblogs.com/lkjhgfdsa/p/10630086.html
Copyright © 2020-2023  润新知