DS博客作业02--线性表

时间:2023-01-14 16:22:44

1.本周学习总结

1.1思维导图

DS博客作业02--线性表

1.2.谈谈你对线性表的认识及学习体会

这阶段学习学的是线性表,学习线性表的两种存储顺序-----链表和顺序表,体会了两者存储结构之间的区别,通过对顺序表,单链表,双链表,循环链表,有序表的特点的了解,和学习它们的算法设计方法,综合运用线性表解决一些问题,在查资料时,也领悟一点单双链表的在一些方面使用的优劣,对线性表的知识更加加深一点。

2.PTA实验作业

2.1.题目1:6-2 jmu-ds-有序表插入数据

2.1.1设计思路(伪代码)

void CreateSqList(SqList &L, int n)
分配存放线性表L的空间;
定义k表示L中的元素个数,初始值为0;
while(i<n//扫描数组元素){
将a[i]存放入L中;
k++;
i++;
}
设置L的长度k;
void InsertSq(SqList &L, int x)
定义i=1,使插入的数放在第一个位置;
定义j来使线性表向后退一位
定义k和t来进行两层循环排序
定义y当中间值对调需要对调的两个数值
if i的值错误,返回false;
for j=L->length to i
将线性表往后退一格
将x存入第一个位置
Length++;
for k=0 to L->length
{
for t=0 to k
if(L->data[k]=L->data[t])
用y为中间值将两个对调
end for
}
end for;
void DispSqList(SqList L)
int i来遍历线性表
if L->length=0
cout <<"error"
else
for i=0 to L->length-1
cout<< L->data[i];
if i!=L->length-1
输出空格

2.1.2代码截图

DS博客作业02--线性表

DS博客作业02--线性表

2.1.3本题PTA提交列表说明

DS博客作业02--线性表

  • Q1:一开始还不熟悉线性表,编译错误
  • A1:后来看书看题,慢慢钻研
  • Q2:部分正确
  • A2:因为一开始空格输出没有弄好,导致后面一直出现格式错误
  • Q3:关于算法
  • A3:一开始有用过遍历比较哪个位置可以插入,后来出现一些错误,直接改把数插在第一个,然后冒泡排序。

2.1.题目1:6-5 jmu-ds-头插法建链表

2.2.1设计思路(伪代码)

void CreateListF(LinkList &L,int n)
创建结点s;
L=new Lnode
创建头结点,其next域为0
for int i=0 to n
遍历将a[i]的值存入链表
s->next=L->next
L->next=s
将s插入之前首节点的前面,头结点之后
void DispList(LinkList L)
定义p指向首结点
while(p!=NULL)
输出p结点的data域
p指向下个结点
并且if(p->next!=0)
cout<<" "

2.2.2代码截图

DS博客作业02--线性表

2.2.3本题PTA提交列表说明

DS博客作业02--线性表

  • Q1:段错误
  • A1:链表傻傻指向搞不清楚,导致乱指,然后各种错误
  • Q2:格式错误
  • A2:同上

2.3.题目3:6-7 jmu-ds-单链表逆置

2.3.1设计思路(伪代码)

void ReverseList(List &L)
创建p结点和q结点
p指向首节点
其next域制空
while (p)
将链表同时向后退一位
使用头插法使链表逆序

2.3.2代码截图

DS博客作业02--线性表

2.3.3本题PTA提交列表说明

DS博客作业02--线性表

  • Q1:编译错误
  • A1:原本打在建一个链表,然后逆序存放,结果没弄好
  • Q2:头插法之外
  • A2:头插法还是同学帮忙提出思路,助教说的直接改数值也ok,黑猫白猫,抓鼠就是好猫。

3、阅读代码

3.1 题目

3.2 解题思路

3.3 代码截图

3.4 学习体会