第02次作业-线性表

1.题目1:6-3 jmu-ds- 顺序表删除重复元素(25 分)

2.设计思路:

List Delete( List L, ElementType minD, ElementType maxD ){

  定义整型变量i,j,s;

  s=0;

  for i=0 to L->Last

    i的值加一;

  end;

  if L->Data[i]小于等于minD or L->Data[i]大于等于maxD;

  then L->Data[j]等于L->Data[i];j的值加一;

  end if;

  s等于i-j;

  if s不等于0;

  thenL->Last等于L->Last-s;

  返回L的数据;

  end if;

}

3.代码截图

 

4.PTA提交列表说明。

 

 

 

 

 

错误1:没有控制好输出的长度,导致输出数据末尾自动补0

解决方法:将循环的次数修改,数组的长度从-1开始。

错误2:一时卡路,多用了一个循环,步骤变的复杂,导致数据错误。

解决方法:删除多的循环

1. 题目2:6-3 jmu-ds-链表倒数第m个数(20 分)

2.设计思路

int Find(LinkList L, int m ){

  定义结构指针p指向L的下一个结点,q指向L的下一个节点;

  定义整型变量i和j;

  j的初始值为0;

  while p 不为空;

  do  j的值加一;

           p指向下一个结点 ;

  end

  if  m大于j or m小于等于0

  then

    返回-1;

  end if

  for i等于1 to i等于j-m;

    if q不为空;

    then q指向下一结点;

    else 返回-1;

    end if

  end;

  返回q指向的结点的数据;

}

3.代码截图

 

 

4.PTA提交说明

 

 

 

 

错误1:编译错误是因为没有仔细看题目要求,将创建链表函数和删除函数一起提交了;

错误2:没有考虑的当链表为空的情况;

解决方法:加上if(q==NULL) return -1;

1. 题目3:7-1 两个有序链表序列的合并(20 分)

2.设计思路

  定义结构体LNode;

  定义函数 InitList,

  定义函数 CreateListR;

  定义函数 Union;

  定义函数 printf;

  int main{

    定义指针la,lb,lc;

    引用函数

     InitList(la);

    InitList(lb);

    InitList(lc);

    CreateListR(la);

    CreateListR(lb);

    Union(la,lb,lc);

     printf(lc);

    end;

}

void InitList(LinkList &L){

  为L申请存储空间;

   L下一结点为空 ;

   end;

}

void CreateListR(LinkList &L){

  定义指针p,tem;

  定义整型变量i;

  指针tem等于L;

  输入i的值 ;

  while i大于0

  do   为p分配动态存储空间;

      将i的值赋给p指针所在结点;

      p的下一结点为空;

    指针tem指向的下一结点为p指针所在结点;

      tem等于p;

    输入x的值;

  end

}

void Union(LinkList La,LinkList Lb,LinkList &Lc){

  定义指针pa,pb,r,s;

  指针pa指向La下一结点,指针pb指向Lb下一结点;

  定义整型变量j;

  指针r等于Lc;

  while 指针pa和Pb都不为空

  do

    if pa->data小于pb->data;

    then 为s申请动态存储空间;

       pa指向结点的数据赋给s所在结点;

       指针r指向的下一结点为s指针所在结点;

       指针r指向s指针所在结点;

       pa指向下一结点;

    else

       s申请动态存储空间;

       pb指向结点的数据赋给s所在结点;

       指针r指向的下一结点为s指针所在结点;

       指针r指向s指针所在结点;

       pb指向下一结点;

    end if

  end

  while pa不为空;

  do  为s申请动态存储空间;

    将pa指向结点的数据赋给s所在结点;

    指针r指向的下一结点为s指针所在结点;

    指针r指向s指针所在结点;

       pa指向下一结点;  

  end

  while pb不为空;

  do  为s申请动态存储空间;

    将pb指向结点的数据赋给s所在结点;

    指针r指向的下一结点为s指针所在结点;

    指针r指向s指针所在结点;

     pb指向下一结点;

}

void printf(LinkList L){

  定义指针p指向指针L的下一结点;

  if p为空;

  then  输出NULL;

  else 输出p指针指向结点的数据;

     p指向下一节点;

     while p不为空;

     do  输出p指向结点的数据;

        p指向下一结点;

     end

  end if

}

3.代码截图

 

 

4.代码提交列表说明

 

错误1:没有给出循环终止的条件,陷入死循环;

错误2:自己给出了输入数据个数范围,导致答案错误;

解决方法:将循环进行的条件改成当i>0时,循环可进行。

 

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

 

本次2个题目集总分:290分

 

1.顺序表PTA排名

 

2.链表PTA排名

3.我的总分:PTA总分在200--250分:2分

三、本周学习总结

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

    一般在中午和晚上打代码,或者是没课的时候。效率很低,有时候大半天一题都做不出来,应该多问问老师和同学,同时多看书上的内容,多敲代码。

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

1.线性表是具有相同特性的数据元素的一个有限序列

2.线性表有顺序存储结构和链式存储结构,链式存储结构会比顺序存储结构要方便

3.链表的添加和删除只需改变指针的指向,再增加或删除结点,而顺序表需要移动删除或增加的元素后面的所有元素。

3.代码Git提交记录截图

 

 

posted @ 2018-03-24 20:45  张馨玙  Views(148)  Comments(4Edit  收藏  举报