DS博客作业02--线性表
1. 本周学习总结(0--2分)
1.1 思维导图
总结线性表内容
1.2 谈谈你对线性表的认识及学习体会。
线性表主要由顺序表或链式表示。在实际应用中,常以栈,队列,字符串等特殊形式使用。线性表中数据元素之间的关系是一对一的关系,逻辑结构简单,便于实现和操作。具有均匀性和有序性的结构特点。
学习体会还是多打代码,多看书吧!!!
2. PTA实验作业(6分)
本周要求挑3道题目写设计思路,调试过程。设计思路用伪代码描述。题目选做要求:
- 顺序表选择一题
- 单链表选择一题
- 有序表选择一题
原则上题目选择越难,代码量越大分值越高。
2.1 题目1:
设计一个算法,从顺序表中删除重复的元素,并使剩余元素间的相对次序保存不变。
输入格式: 第一行输入顺序表长度。 第二行输入顺序表数据元素。中间空格隔开。
输出格式:数据之间空格隔开,最后一项尾部不带空格。
输出删除重复元素后的顺序表。
2.1.1 设计思路(伪代码)
伪代码尽量文字描述,请用下面的markdown符号渲染。如 :
** 设计思路,伪代码要用 ' ' ' 符号渲染 **
-
设计思路:创建顺序表,然后用两层循环找重复元素,若有重复元素,记住该位置,之后的元素依次往前移。循环完后,输出顺序表。
-
伪代码:
void CreateSqList(List &L,int a[],int n) // 创建顺序表
{
L=new SqList; //初始化
for(i=0;i<n;i++) //建立n个数据结点
L->length=n; //链的长度为n;
}
void DelSameNode(List &L) //删除顺序表重复元素
{
for(i=0;i<L->length;i++)
{
for(j=i+1;j<L->length;)
{
if() //比较数据是否相等;
{
for(k=j;k<L->length-1;k++) //移动数据
{
L->data[k]=L->data[k+1];
}
L->length --; //链表长度自减
}
else //如果找不到重复元素,j再自增;
j++;
}
}
}
void DispSqList(List L)//输出顺序表
{
for(i=0;i<L->length;i++) //依次输出数据
{
if() //用一个if-else语句来控制空格
else()
}
}
2.1.2 代码截图
2.1.3 本题PTA提交列表说明
PTA提交列表中的每个错误详细说明为什么及如何解决。如图:
-
Q1:在第二层循环中我把j++放在括号里面。导致链表的长度每一次都自减
-
A1:调试后发现问题,但不知道怎么改,经过问同学后参考相同做法同学代码,把j++放到移动元素的循环外面。
-
Q2:刚开始对空格的控制出错!
-
A2:提交列表提示错误!
-
反思:多阅读同学代码,学习!
2.2 题目2:
实现头插法建链表。需要实现下述两个函数:
输入说明:
- 行1:数据个数
- 行2:数据内容,空格隔开
输出说明:
- 链表不空,输出链表内容。数据之间空格隔开,尾部不带空格
- 链表为空,输出空链表!
2.2.1 设计思路(伪代码)
void CreateListF(LinkList &L,int n) //头插法建链表,L表示带头结点链表,n表示数据元素个数
{
LinkList s;
L=new LNode(); //重新申请;
L->next=NULL;
for(i=0;i<n;i++) //循环建立数据结点s;
{
//头插法的语句;
}
}
void DispList(LinkList L) //输出链表
{
LinkList p=L->next ; //p指向首结点
if(p!=NULL) //判断链是否为空;
{
while() //控制空格并输出链表;
{
}
}
2.2.2 代码截图
2.2.3 本题PTA提交列表说明
PTA提交列表中的每个错误详细说明为什么及如何解决。如图:
-
Q1:没有给链表申请空间;
-
A1:运行后编译器给出提示,看书修改。
-
Q2:在编译器上运行结果正确,但在PTA上有测试点过不去。
-
A2:问同学看看哪儿有问题。
-
反思:平时多看书,了解书上的代码。
2.3 题目3:
需实现以下3个函数,分别为:
- CreateSqList:创建有序表,连续输入n个正数存入有序表中。L表示顺序表指针,n表示输入数据个数。
- InsertSq(SqList *&L,int x):顺序表L中插入数据x。
- DispSqList:输出顺序表L中所有数据。数据间空格隔开,尾部不能有空格
。
2.3.1 设计思路(伪代码)
伪代码尽量文字描述,请用下面的markdown符号渲染。如 :
** 设计思路,伪代码要用 ' ' ' 符号渲染 **
- 设计思路:
创建一个有序表,往有序表中插入一个数x, 遍历有序表,标记第一个大于x的值的位置,然后链表长度加一,从最后一个位置开始,往后移,移到该位置停止,并把x赋给该位置,最后输出有序表。
- 伪代码:
void CreateSqList(SqList &L,int n) //创建有序表;
{
L=new List;
L->length=n;
while(i<n) //建立n个数据结点;
}
void InsertSq(SqList &L,int x) //在有序表中插入x;
{
int flag=0; //判断是否找到比x大的数,若找不到,则插在有序表末尾;
for(i=0;i<L->length;i++) //遍历有序表;
{
if() //找出第一个大于x的结点;
for(k=L->length ;k>i;k--)
{
L->data[k]=L->data[k-1]; //往后移动有序表;
}
}
}
void DispSqList(SqList L) //输出有序表;
{
if(L->length==0) //判断有序表是否为空,为空,输出error;
else
{
while() //输出有序表;
}
}
2.3.2 代码截图
2.3.3 本题PTA提交列表说明
PTA提交列表中的每个错误详细说明为什么及如何解决。如图:
-
Q1:没有考虑到x查到有序表最后的情况
-
A1:拿代码给同学帮忙看,与同学的代码做比较。
-
Q2:没仔细读题目,若有序表为空,则输出error。
-
A2:在PTA上提交后看提示错误。
-
反思:读题目要仔细。
3. 阅读代码(-2--2分)
找一份优秀代码,理解代码功能,并讲出你所选代码优点及可学习地方。主要找以下3种类型代码:
-
读源码,如从python或C++中找用线性表封装的库源码,分析代码功能及可学习地方。
-
考研题中关于线性表内容。可以找参加过考研的学长学姐拿。尤其是想要考研同学,可以结合本章内容,用考研题训练学习。
-
ACM,PTA天梯赛,leecode面试刷题网站,找线性表相关题目阅读分析。
请按照下面内容填写代码阅读内容。请内务必认真完成,如果发现应付,没有介绍代码思路,体会等扣分。
3.1 题目:用python实现下列函数。
3.2 解题思路
介绍代码解决问题
(1)初始化线性表。
(2)判断线性表是否为空。
(3)判断线性表是否为满。
(4)获取线性表中某一位置的值。
(5)修改线性表中某一位置的值
(6)按值查找第一个等于该值的索引。
(7)在表尾插入一个元素。
(8)在表中任意位置插入一个元素。
(9)在线性表的第i个位置插入value 表头 表中 表尾
(10)删除线性表中某一位置的值。
(11)删除线性表。
(12)销毁线性表。
3.3 代码截图
3.4 学习体会
看不懂,但仔细看完之后,感觉它的语言比较简洁,一个函数里面只有几句语句。而且大多语句类型雷同。