zoukankan      html  css  js  c++  java
  • 第02次作业-线性表

    一、PTA实验作业


    题目一:1.6-3 jmu-ds- 顺序表删除重复元素(25 分)
    2.设计思路:
    删除函数:

    变量定义i,j表示计数。
    if L->length>0{
    for i=1 to L->length{
    k一直初始化为0;
    while(k<=j且L->data[k]!=L->data[i])
    k加一;
    if k>j{
    L->data[i]赋予L->data[++j]
    }
    }
    L长度=j+1;
    }
    else{
    L长度为0;
    }
    

    3.代码截图

    4.PTA提交列表说明

    (1)应是链表形式却写成结构体形式导致编译错误。

    eg:L.data[i]=a[i];应改为L->data[i]=a[i];
    (2)输出函数出错:题目要求最后输出不能有空格。删除函数:只能在空表的情况下成立,代码不符合要求,第二个人for循环j++后此节点就往后移动,最后比较不了。
    输出函数修改:从第一个到倒数第二个输出后面都带空格,最后一个数单独输出,不带空格。

    for(i=0;i<L.length;i++)
    		printf("%d",L.data[i]);
    	printf("
    ");
    

    改为:

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

    (3)删除函数修改:利用for循环嵌套while循环,利用while循环从前到后找与i所指向的元素相同的数,找到跳出while循环,若没有重复数字,则K一定大于j,在k>j的情况下重新记录数据。一定要记住判断此顺序表是否为空,否则空表的测试点不通过。

    for(i=1;i<L->length;i++){
    		k=0;
    		while(k<=j&&L->data[k]!=L->data[i])
    		k++;
    		if(k>j)
    		L->data[++j]=L->data[i];
    	}
    

    改成

    if(L->length>0){
    			for(i=1;i<L->length;i++){
    		k=0;
    		while(k<=j&&L->data[k]!=L->data[i])
    		k++;
    		if(k>j)
    		L->data[++j]=L->data[i];
    	}
    	L->length=j+1;
    	}
        else{
        	L->length=0;
    	}
    

    题目二:6-2 jmu-ds-单链表逆置(25 分)
    2.设计思路:

    if(L的下一个节点不为空){
    创建p指向L的节点;
    s=p的下一个节点;
    while(s的下一个节点不为空){
    int t指向s的下一个节点;
    s的下一个节点指向p;
    p指向s;
    s指向t;
    }
    最后一个还是要指向其前一个;
    头指针逆序后变最后一个,最后一个next=null ;
    头指针指向s;
    }
    

    3.代码截图

    4.PTA提交列表说明
    (1)没有考虑到空链表的情况,导致空链表运行出错。
    解决方法:在每一个函数要进行时都判断一下链表是否为空,不为空才继续进行。


    题目三:7-2 一元多项式的乘法与加法运算(20 分)
    2.设计思路:

    分别建立创建一元多项式,一元多项式加法,一元多项式乘法,一元多项式输出四个函数。
    (2)一元多项式的加法:

    定义结构体指针ha,hb分别指向链表a,b头节点,
    定义结构体指针f用于存储新链表,
    while a and b都不空
    do
    if(ha->exp!=hb->exp)
    then 指数,系数相加后存入新链表
    else ha,hb同时往后移一个节点,同样存入新链表
    if a不为空
    then c
    if b不为空
    then c
    返回c
    

    (3)一元多项式乘法

    定义结构体指针ha,hb分别指向链表a,b头节点,
    定义结构体指针f用于存储新链表,
    if a空orb空
    then 返回空的c
    while ha
    do
    依次乘b中的指数和系数
    调用加法函数,将结果赋予f,
    返回f
    

    3.代码截图




    4.PTA提交列表说明
    (1)没意识到输出要求数字间以空格分隔。

      if(hc==NULL){
            printf("0 0");  
        }  
        while(hc!= NULL){  
            printf("%d %d",hc->coef,hc->exp);  
            hc = hc->next;  
        } 
    

    改为:

    if(hc==NULL){
            printf("0 0");  
        }  
        while(hc!= NULL){  
            if(flag)  
                printf(" ");  
            else  
                flag=1;  //打出一对后中间要有空额 
            printf("%d %d",hc->coef,hc->exp);  
            hc = hc->next;  
        }  
    

    (2)
    乘法函数:没有意识到俩链表相乘完没有按递减顺序排放,应在乘完之后再利用加法函数使其成递减输出。

    	while(ha!=NULL){
    		temp=new node;
    		L=temp;
    		hb=b->next;
    		while(hb!=NULL){
    			node *l=new node;
    			l->exp=ha->exp+hb->exp; //指数相加,系数相乘  
                l->coef=ha->coef*hb->coef;  
                hb=hb->next;
                L->next=l;
                L=l;
    		}
    		ha=ha->next;
    	return f;
    }
    

    应在ha=ha->next;后添加

    L->next=NULL;
    	    f= add(f,temp); //相当于按递减排序 
    

    二、截图本周题目集的PTA最后排名

    1.顺序表PTA排名

    2.链表PTA排名

    3.我的总分:
    总分:2.5分

    三、本周学习总结

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

    1.1)编程时间:每天都有进行,一般划分较大片时间进行编码学习,尽量每天都能有所发现。2)学习时间:周一至周五有提前预习并做必要笔记和复习,一般安排在晚上自习时间,在周末进行系统复习总结。3)遇到不懂问题大部分向班级大佬求救和百度搜查,还有和舍友探讨。对自己的学习安排认为还有待提高,领悟能力较差,需要多加练习。

    2.谈谈你对线性表的认识?

    线性表就是有唯一的“第一个”和“最后一个”元素的有限序列。线性表元素与位置有关,这种位置上的的有序性就是一种线性关系。1)顺序表:在存储空间中是按顺序存储,不容易随意改动。2)链表:含有指向后继节点的指针,变换更灵活。

    3.代码Git提交记录截图


  • 相关阅读:
    获取腾讯soso地图坐标代码
    PHP获取服务器的mac地址类
    关于PHPExcel导出Excel时身份证,数字会导出为科学计数的处理方法
    PhpExcel笔记,phpExcel中文帮助手册
    微信开发之——Php批量生成带参数的二维码
    [转载]数据管理——数据血缘关系概述
    HDFS学习总结
    CDH5.7Hadoop集群搭建(离线版)
    QlikSense系列(1)——整体介绍
    Python学习小计
  • 原文地址:https://www.cnblogs.com/tanghuan/p/8635640.html
Copyright © 2011-2022 走看看