第02次作业-线性表

2018/03/24 20:56
阅读数 123

一、PTA实验作业-02

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

2. 设计思路(伪代码或流程图)

题目要求:创建顺序表,输出顺序表,删除顺序表重复元素;

 

创建顺序表:

Procedure  <CreateSqList>  ([List &L,int a[],int n])

Begin

定义i=0

L分配一个动态存储空间;

If <L->length==0>

return

else

For i=0 to n-1

{

 L->data[i]=a[i];

}
End

 

输出顺序表

Procedure  DispSqList(List L)

Begin

定义i

If (L->length==0)

Return

Else

For i=0  to length-1

{

cout<<L->data[i]<<" ";

}

输出L->data[length]和“\n

End

 

删除顺序表中重复元素

Procedure  DelSameNode(List &L)

Begin

定义i=0j

If(L->length==0)

  return;

Else
For i=0  to length-1

{

For j=i+1 to L->lenth

{

If(L->data[i]==L->data[j])

       for(int k=j;k<L->length-1;k++)

{

L->data[k]=L->data[k+1];
}

 L->length--;

      i--;       

}
}

End

 

3. 代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

 

 

 

 

 

 

4. PTA提交列表说明。

 

 

 

 

全部重复数据错误是因为在DelSameNode函数中,在多次循环时,没有i--使得,程序进入死循环

 

 

 

而空表错误是因为在函数输出函数中没有考虑到L->length=0的情况,无返回

 

 

1.题目26-4 集合的基本运算(单链表)

2. 设计思路(伪代码或流程图)

Procedure DispList(LinkList *L);  //输出链表元素,每个结点元素值以空格符间隔,以换行符结束

Begin

 定义s并初始化s=L->next;

while(s!=NULL)do

{

 printf("%c ",s->data);

   s=s->next;

}
printf("\n");

End

Procedure CreateListR(LinkList *&L,ElemType a[],int n); //用数组元素值尾插法创建链表。

 

Begin

定义sri

L分配一个动态存储空间

r=L;

For i=0 to n-1

{

 s=new LNode;

    s->data=a[i];

    r->next=s;

    r=s;

}

 r->next=NULL;

End

Procedure DestroyList(LinkList *&L)//销毁链表。


Begin

定义q并初始化

q=L->next;

while(q!=NULL)do

  {

    L=q->next;

    free(q);

    q=L;

  }

End

Procedure sort(LinkList *&L) //单链表元素递增排序。

 

定义pqs

并初始化p=L->next->next;             

L->next->next=NULL;          

while(p!=NULL)do

{

q=p->next;              

s=L;                   

while(s->next!=NULL&&s->next->data<p->data)do

   s=s->next;        

p->next=s->next;      

s->next=p;

p=q;                    

}

End

Procedure Union(LinkList *ha,LinkList *hb,LinkList *&hc)  //求两有序集合ha、hb的并集hc。

Begin

定义sqi

hc分配一个动态存储空间

 r=hc;

  while(ha->next!=NULL&&hb->next!=NULL)do//hahb都不为空时,两个链表从头结点的下一个结点开始比较大小,小的在前,,并把小的值存入人中,此链表往后移一个结点,若相同则取一个结点的值放入r,链表都往下移一个结点,

  {

    

    if(ha->next->data>hb->next->data)

    {

      s=new LNode;

      s->data=hb->next->data;

      hb=hb->next;

      r->next=s;

      r=s;

    }

    else if(ha->next->data<hb->next->data)

    {

       s=new LNode;

       s->data=ha->next->data;

       ha=ha->next;

       r->next=s;

       r=s;

    }

    else

    {

       s=new LNode;

       s->data=ha->next->data;

       ha=ha->next;

       hb=hb->next;

       r->next=s;

       r=s;

    }

  }

  while(ha->next)

  {

     s=new LNode;

     s->data=ha->next->data;

     ha=ha->next;

     r->next=s;

     r=s;

  }

  while(hb->next)

  {

     s=new LNode;

     s->data=hb->next->data;

     hb=hb->next;

     r->next=s;

     r=s;

  }

  r->next=NULL;

End

同理可得

 

 

Procedure void InterSect(LinkList *ha,LinkList *hb,LinkList *&hc) //求两有序集合ha、hb的的交集hc。

 

Procedure void Subs(LinkList *ha,LinkList *hb,LinkList *&hc) //求两有序集合ha、hb的差集hc。

3. 代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

 

 

 

 

 

 

 

 

 

 

 

 

4. PTA提交列表说明。

 

 

误以为两链表差集为两链表不同的数据,所以在Subs(LinkList *ha,LinkList *hb,LinkList *&hc)函数中,在有一链表结束的情况下,接着输出还没结束的链表,所以错了。

 

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

2. 设计思路(伪代码或流程图)

同题目2中的Procedure Union(LinkList *ha,LinkList *hb,LinkList *&hc)  //求两有序集合ha、hb的并集hc。函数

 

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

 

 

 

 

 

 

 

 

 

4.PTA提交列表说明。

 

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

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

1. 顺序表PTA排名

 

 

2.链表PTA排名

 

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部