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

    一、PTA实验作业


    1.题目一 7.1最长连续递增子序列(20 分)

    2.实验思路

    struct list{
    	int a;
    	int b;
         }data[100000];//定义结构体数组data[100000],用b来表示递增子列个数,a存数据
        int i,j,n;定义变量i,j,n表示输入个数
    	int max=1,head;定义初始最大递增子列数max初始为1,定义head为最大递增子列的头
    	for(i=0;i<n;i++)//!!
    	{
    		for(j=i+1;j<n;j++)  //与其后面元素相比较
    		{
    			if(data[j].a>data[j-1].a)	
    			{
    				data[i].b++;//增加递增子列个数b
    			}	
    			else 跳出循环
    		}
    	}
    	
    	for(i=0;i<n;i++)
    	{
    		if(data[i].b>max)
    		{
    			max=data[i].b;//找出b最大所对应的i;
    			head=i;
    		}
    	}
    	for(i=head;i<head+max-1;i++)
    	{
    		printf("%d ",data[i].a);
    	}
    	printf("%d",data[head+max-1].a);//输入最后不带空格
    

    3.代码截图


    4.PTA的提交列表说明

    • 多次错误

    里面有格式错误和随机最大n的段错误。
    题目中规定最后一项不得有多余空格,格式错误。增加

    printf("%d",data[head+max-1].a);
    
    • 部分错误
      随机最大值n段错误
      增大数组的长度由1000改到10000

    1.题目二.6-2 jmu-ds-单链表逆置(25 分)

    2.实验思路

    void ReverseList(List &L)头插法实现逆置
    {    
       *定义新链表newL ,指针p,q;
        p指向L
        if(L->next非空)
        {
             while(p不为空)
        {
          头插法将p中元素放入newl;
        }
        L=newL;
    }
    

    3.代码截图



    4.PTA的提交列表说明

    • 1.链表不空,格式错误
      while(p->next!=NULL)
      {

      if(p->next!=NULL)
      printf("%d ",p->data);
      .........
      改为
      while(p->next!=NULL
      {

      if(p->next->next!=NULL)
      printf("%d ",p->data);
    • 2.链表为空,段错误
      if(p==NULL)
      printf("NULL");
      while(p->next!=NULL)
      {

      .....
      改为
      if(p==NULL)
      printf("NULL");

      else{
      while(p->next!=NULL)
      {
      思考:如果不加else的话,通过if语句后会进入while语句,可能若p为空执行p->next是否为空会导致段错误。

    1.题目三 一元多项式的乘法与加法运算(20 分)

    2.实验思路

    typedef struct pnode
    {
        int xnumber;
        int znumber;
        struct pnode* *next;
    }*polynomial,pnode;* *定义一个结构造组包含系数指数和指针。
    
    void sumpolynomial(polynomial &a,polynomial &b,polynomial &c)
    {
    定义新链表c,并分配空间,定义新节点s
    while(两个有序表不为空)
    {   if(pa指数大于pb)
       {   s保存pa数据,
           用尾插法插入新链表c
           }
       if(pa指数小于pb)
       {    s保存pb数据,
           用尾插法插入新链表c
       }
       if(pa指数等于pb)
       {    s保存pb数据,
           用尾插法插入新链表c
       }
     }
    }
    
    void mulpolynomial(polynomial &a,polynomial &b,polynomial &c)
    {
     定义节点s,新链表c
    if(a或b为空)
       则c为空
    while(a,b均不为空)
     {
              遍历链表a
              使a中每个元素与系数相乘,指数相加
              保存在新节点s
    }
    void sorting(polynomial &l)
    {
    定义指针p p=l->next->next;
       while(p!=不为空)
        {
            q指向p->next
            pre指向l;
        while(pre->next不为空并且大于p的next)
        pre指向其下一个;
        else
        p的next指向pre的next
        
        pre->next=p;
        p=q;
        }
    }
    void conbine(polynomial &l)
    {
    while(l不为空)
    {
        定义两个指针指向p=l->next,q=p->next.
        while(p->next不为空)
        if(q,p指数相同)
        {
        系数相加,
        p->next指向q->next,
        q指向q->next并且删除q.
        }
      else{
        p,q分别指向它们的下一个。
        }
    }
    

    3.代码截图









    4.PTA的提交说明

    本题因提交多次,所以按照获得的分数档次说明。分别为0,12,14,16,18

    • 0分->12分
      ①编译器选择错误
      ②没有写合并同类项函数。
      ③合并同类项函数出现段错误
      void conbine(polynomial &l)
      {
      polynomial p,q,Q;
      p=l->next;
      q=p->next;
      while(p->next!=NULL)
      {
      ........
      改为
      while(q->next!=NULL)
    • 12分->14->16分->18
      ①同类项合并时有抵消
      同类项合并时有抵消不需要输出“0 0”
      if(q->znumber!=0&&q->xnumber==0)
      {
      q=q->next;
      }
      在输出函数中多添加一个类别,跳过合并同类项相消的那项
      ②系数和指数取上限,结果有零多项式
      if (!q)
      {
      printf("0 0");
      }
      若零多项式,按题目要求应输出“0 0”,在输出函数增添if语句。
    • 18分->20分
      ①输入有零多项式和常数多项式
      若输入有零多项式和常数多项式,加法运算结果为h该常数多项式,乘法运算结果为“0 0”。不应是空白结果。
      if(paNULL&&pbNULL)
      {
      s=new pnode;
      s->xnumber=0;
      s->znumber=0;
      r->next=s;r=s;
      r->next=NULL;
      }
      在加法运算中,除了分类a为空,b为空,还要分a,b同时为空

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

    1.顺序表PTA排名


    2.链表PTA排名


    3.我的总分:

    必做全做,选做做部分。总分2.5

    三、本周学习总结

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

    在周末的时候和周中有空闲的时间写代码,改代码。觉得自己改代码时间比较久,应该多多询问请教老师同学,并且多多熟悉书本里的基础操作集。注重细节的变化。

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

    线性表从逻辑结构上说,是一种线性结构,里面的元素是一对一关系。
    从存储结构上说,分顺序存储和链式存储。顺序存储与链式存储差别在于物理存储地址是否相邻。顺序存储包括顺序表,链式存储包括单链表,双链表,循环链表。

    • 2.1 讲述线性表定义和逻辑结构,抽象数据类型
    • 2.2 顺序存储之顺序表的相关操作集,及应用实例
    • 2.3 链式存储之单,双,循环链表相关操作集
    • 2.4 线性表应用
    • 2.5 有序表的抽象数据类型描述,存储结构,基本运算,以及归并算法,及应用
      以上相关操作集包括建立,删除,查找,插入,销毁,初始化......

    3.代码Git提交记录截图

  • 相关阅读:
    《经济学通识》六、生命有限
    《经济学通识》五、反垄断的罪与罚
    《经济学通识》四、贸易与互惠
    《经济学通识》三、价格与市场
    《经济学通识》二、管制的愿望与结果
    《经济学通识》一、前言
    《必然》十三、开始,正从脚下开始
    《必然》十二、一个好问题足以改变世界
    字符串之strstr
    STL之内存处理工具
  • 原文地址:https://www.cnblogs.com/huangqingqing/p/8638356.html
Copyright © 2011-2022 走看看