第二次作业-线性表

一、PTA实验作业

本周要求挑3道题目写设计思路、调试过程。设计思路用伪代码描述。题目选做要求:

  • 顺序表选择一题(6-2,6-3,7-1选一题),代码必须用顺序结构抽象数据类型封装
  • 单链表选择一题(6-1不能选)
  • 有序表选择一题

题目:

6-2 线性表元素的区间删除(20 分)

 

 

给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。

设计思路:

int i,j=0,c=0;i j用于计数,c为统计被删除的个数

for(i=0;i<=L->Last;i++){
if(L->Data[i]>minD&&L->Data[i]<maxD){判断符合删除条件的个数
c++;需要被删除的数加一
}
else{
L->Data[j]=L->Data[i];不满足删除条件的存入 从新的下标开始储存
j++;
}
}
L->Last=L->Last-c;数组长度减去删除个数
return L;

代码截图

PTA提交说明:

 

6-2 jmu-ds-单链表逆置(25 分)

本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表为带头结点链表。链表结点定义如下:

 

设计思路:

void CreateList(List &L,int n)
{
ListNode *s,*r;
int x;x为输入的数
L=(ListNode*)malloc(sizeof(ListNode));L作为头指针
r=L;
for(i=0;i<n;i++)
{
s=(ListNode*)malloc(sizeof(ListNode));
scanf("%d",&x);
s->data=x;使用尾插法创建链表
r->next=s;
r=s;
}
r->next=NULL;r最后指向空
}
void ReverseList(List &L)
{
ListNode *p,*q;定义两个链表
p=L->next;
L->next=NULL;
while(p!=NULL) 不为空时逆置
{
q=p;
p=p->next;使用尾插法倒置链表
q->next=L->next;
L->next=q;
}
}
void PrintList(List L)
{
ListNode*p=L->next;
if(p!=NULL)
{
printf("%d",p->data);满足格式要求输出
p=p->next;
while(p!=NULL)
{
printf(" %d",p->data);满足格式输出
p=p->next;
}
}
else
printf("NULL");
}

 代码截图:

PTA提交说明:错误部分:小细节没有注意到,具体我也不记得了。

 

7-1 两个有序链表序列的合并(20 分)

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。

 

设计思路:

定义结构 与结构成员data next
typedef struct Node*List;
struct Node{
int data;
struct Node*next;
};
int main()
{
定义三个链表l1,l2,l3;
l1=intList();
l2=intList();
l3=intList();初始化
并输入链表再混合链表
print(l3);输出混合链表
return 0;
}
List intList()
{
List L;
L=(List)malloc(sizeof(struct Node));给其分配空间
return L;
}
void print(List l)
{
l=l->next;
if(l==NULL)
{
printf("NULL");
return ;
}
while(l)
{
if(l->next!=NULL)
printf("%d ",l->data);
else
printf("%d",l->data);
l=l->next;
}

}
void read(List l)
{
List X;
int a;
scanf("%d",&a);
while(a>0)输入小于0时停止输入
{
X=(List)malloc(sizeof(struct Node));X申请空间
if(!X)return ;
X->data=a;
//尾插法输入数字
l->next=X;
l=X;
scanf("%d",&a);
}
l->next=NULL;指针最后指向空
return ;

}
void combine(List l1,List l2,List l3)
{
l1=l1->next;
l2=l2->next;
while(l1!=NULL&&l2!=NULL)按小到大顺序排列
{
if(l1->data>l2->data)
{
l3->next=l2;//小的先存入l3
l2=l2->next;下一位
}
else
{
l3->next=l1;另一个接着存入
l1=l1->next;
}
l3=l3->next;
}
if(l1==NULL&&l2==NULL)
return ;
if(l1!=NULL)
l3->next=l1;//如果l2为空,l3指向l1
else
l3->next=l2;反过来

}

代码截图:

PTA提交结果

 

 

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

 1、顺序表PTA排名

 

 2、链表PTA排名

3. 我的总分:215分

PTA总分在200--250分:2分

 

 

三、本周学习总结

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

 答: 本周的数据结构课程的预习都是提前一天看半小时书然后抽一点时间写课堂派,感觉时间不太够用,然后打pta的时候也没有太多思路,常常要去看书和问同学,我打算多看书,记住并理解基础的代码然后抽出更多时间打pta

2、谈谈你对线性表的认识

线性表是数据结构中很基础一种,其中各元素的相对位置都是线性的,除了第一位和最后一位,其中的元素都有前一位和后一位但都唯一。并且线性表能比较好的完成插入和删除操作

 3、代码Git提交记录截图

posted on 2018-03-24 17:35  今天啊霄减肥了吗  阅读(852)  评论(5编辑  收藏  举报