DS博客作业02—线性表
1.思维导图及学习体会
1.1第一章绪论知识点思维导图
1.2.谈谈你对线性表的认识及学习体会。
线性表最重要的就是对指针的操作,插入删除都是看指针的指向进行操作以达到改变节点,以达到目的的。对于上学期对链表的初步认识,我对它也不算陌生,虽然懂得其中的原理,但是在表达上还是有所欠缺。现在终于知道了学习指针的重要性,通过指针的不断移动进行链表的各种操作。比如:头插法可以进行链表逆置,尾插法可以合并链表等等。总体来说:想学好链表就一定要先熟练掌握指针。
2.PTA实验作业
2.1.题目1:6-4 顺序表操作集
2.1.1设计思路:
- 按照题目要求设计算法,不过要时刻注意操作指针的位置
List MakeEmpty() 创建并返回一个空的线性表
{
定义指针 L;
L动态分配空间
初始化并返回 L
}
Position Find(List L, ElementType X) 返回线性表中X的位置
{
定义int类型变量 i
for i++ to L->Last-1
if 找到X
return i;
end for
找不到则会退出循环 并返回ERROR
}
bool Insert(List L, ElementType X, Position P) 将X插入在位置
{
if 栈满
输出 FULL
并返回 false ;
end if
if 插入X的位置在非法位置
输出 ILLEGAL POSITION
return false;
end if
for i-- to p
L->Data[i + 1] = L->Data[i];
end for
L->Data[P] = X;
L->Last++;
return true;
}
bool Delete(List L, Position P)
{
if P位置合法
{
printf("POSITION %d EMPTY",P);
return false;
}
for i++ to L->Last-1
L->Data[i] = L->Data[i++];
end for
L->Last--;
return true;
}
2.1.2代码截图
2.1.3本题PTA提交列表说明
Q1:怎么创建空链表?
A1:我们设计的链表不需要一个单独的节点,那么就直接使用head=NULL就可以表示空链表,顺序表就是L->Last = 0
Q2:怎么在链表中查找特定数据的位置?
A2:遍历链表,通过指向运算符来查找。
Reflect:上学期没把指针掌握的熟练,这学期处处是指针,真是书到用时方恨少,在不连段的碰壁之后也是慢慢找到指针的“内涵”吧,尽管做不到随心而欲,但也精进了不少,在借鉴过大佬的代码算法时,确实学来学去还是那句话:熟能生巧!
2.2.题目1:6-7 jmu-ds-单链表逆置
2.2.1设计思路:
单链表逆置讲究一个逆,目的就是要把指针的方向180°旋转,特殊位置再进行特殊照顾就可以了。
void ReverseList(LinkList &L) 单链表逆置
{
if L -> next == NULL
return ;
end if
定义指针类型 p,q,m
p = L -> next p为L链表的头结点
q = p -> next q为L链表头结点的后继节点
p -> next = NULL;
L = p; p = q; L记录前继节点 p记录后继节点
for p ->next!=NULL(++)
q = p -> next;
p -> next = L;
L = p;
p = q; 逆置
end for
m = new LNode;
m -> next = L; 头结点
L = m;
}
2.2.2代码截图
2.2.3本题PTA提交列表说明
Q1:如何改变指针方向?
A1:用多个指针记录整条链以及具体操作位置的数据,然后转换指针方向,最后记得让链表指向空,并创造一个新的头结点。
Reflect:以前做过数组逆置之类的题目,对于其算法也是有所了解,但是因为链表的不熟练还是有所曲折的。虽然我想法没什么错误,但是我的代码太繁琐,记录节点太麻烦,看了大佬们的代码后,知道了原来可以直接改变指针方向,不用通过类似于重构的方法去逆置。学海无涯啊。
2.3题目3:6-10 jmu-ds-有序链表的插入删除
2.3.1设计思路
插入和删除都是对应特殊位置的操作,注意链表的特殊位置就行了
void ListInsert(LinkList &L, ElemType e) 有序链表插入元素e
{
定义指针pre,s
pre记录链表L
while pre->next != NULL && pre->next->data < e
pre = pre->next; 找到插入位置的前一个结点
end while
s = new LNode;
s->data = e;
if L->next == NULL 尾结点处特殊处理
L->next = s;
s->next = NULL;
return; 退出函数,void无返回
end if
s->next = pre->next; 普通插入
pre->next = s;
}
void ListDelete(LinkList &L, ElemType e) 链表删除元素e
{
LinkList pre = L, q, p;
q = pre->next;
if L->next == NULL
return; 判断是否为空链表
end if
while q != NULL
if q->data == e
pre->next = q->next;
p = q;
q = q->next;
删除节点
return;
end if
pre = pre->next;
q = pre->next;
end while
if q == NULL
栈满情况 "找不到!"
end if
}
2.3.2代码截图
2.3.3本题PTA提交列表说明
Reflect:插入和删除时截至我们现在习得内容而言是优于数组的最突出的地方,学好这基本的链表知识也能为了以后的二叉树什么的高级算法省一些力气。
3.阅读代码
3.1 题目:递归法实现链表的反转
3.2 解题思路
node* reverse(node* head, node* pnode)
node *nextNode = head->next; 记录头结点的后继节点
head->next = pnode; 实现反转
pnode = head; 记录前继节点 同时改变头结点
return (nextNode == NULL) ? pnode : reverse(nextNode, pnode);
链表没到最后 一直反转
3.3 代码截图
3.4 学习体会
递归函数可以极大程度简短代码,实属高端算法。在上学期的学习中也曾使用过递归法解题,有所了解但很不熟练:在递归中函数不断引用自身,直到引用的对象已知。Skill comes from practice!
DS博客作业02—线性表的更多相关文章
- DS博客作业01--线性表
1.本周学习总结(0--2分) 1.1思维导图 1.2.谈谈你对线性表的认识及学习体会. 1.线性表的内容上了三星期的课,相对来说内容比较丰富,尤其是链表方面,包含单链表,双链表和循环链表.作为第一部 ...
- DS博客作业02--线性表
1.本周学习总结 1.1思维导图 1.2.谈谈你对线性表的认识及学习体会 这阶段学习学的是线性表,学习线性表的两种存储顺序-----链表和顺序表,体会了两者存储结构之间的区别,通过对顺序表,单链表,双 ...
- DS博客作业05--查找
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...
- DS博客作业--07查找
目录 DS博客作业--07查找 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 2.1.题目1:6-1 二叉搜索树的操作集 (30 分 ...
- DS博客作业04--图
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...
- DS博客作业03--树
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业03--树 这个作业的目标 学习树结构设计及运算操作 姓名 黄静 目录 0. PTA得分截图 1. 本周学习总结 ...
- DS博客作业——树
DS博客作业--树 1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会. 在树这一章节,我们学习的是二叉树的算法. 树的构建:一种是直接给树的顺序存储结构的字符串,一种是通过先序遍历和 ...
- DS博客作业08--课程总结
DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...
- c语言1博客作业02
c语言1博客作业02 这个作业属于哪个课程 C语言程序设计 这个作业的要求在哪 [作业要求](https://edu.cnblogs.com/campus/zswxy/SE2019-2/homewor ...
随机推荐
- 迁移FRS至DFSR SYSVOL
截至2017年6月20日,Windows 2016 RS1系统为最后一版支持FRS,后续版本将不再包含该功能,详细见 https://support.microsoft.com/en-us/help/ ...
- Proverbs(谚语)
Proverbs(谚语) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请查看:English 1. Every man is the maste ...
- [认证授权] 4.OIDC(OpenId Connect)身份认证(核心部分)
1 什么是OIDC? 看一下官方的介绍(http://openid.net/connect/): OpenID Connect 1.0 is a simple identity layer on to ...
- Nginx+Django-Python+BPMN-JS的整合工作流实战项目
前言 找一个好用的画图工具真心不容易,Activiti 工作流自带的 Web 版画图工具,外表挺华丽,其实使用起来各种拧巴:Eclipse 的 Activiti 画图插件,对于相对复杂的流程也是很不友 ...
- 队列(FIFO)—循环队列、队列的链式存储
1 队列的定义 队列是只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删除操作的线性表. 2 队列的特点 1)先进先出是队列最大的特点,是应用中非常常见的模型,例如排队: 2)队列也属于线性表 ...
- Linux(Ubuntu)使用日记------Mongodb的安装与使用
1.安装 Linux下安装mongodb还是比较容易的 直接使用apt-get安装即可,命令如下: sudo apt-get install mongodb 安装完成之后进行检验, “mongo sh ...
- anaconda相关使用方法
本文不涉及anaconda的安装,如果需要请自行搜索,cnblogs和CSDN都挺多的. conda安装完,大部分人都jupyter notebook的使用需求,jupyter的开启命令是什么呢? j ...
- [LOJ3084][GXOI/GZOI2019]宝牌一大堆——DP
题目链接: [GXOI/GZOI2019]宝牌一大堆 求最大值容易想到$DP$,但如果将$7$种和牌都考虑进来的话,$DP$状态不好设,我们将比较特殊的七小对和国士无双单独求,其他的进行$DP$. 观 ...
- CSS3常用的循环动画
定义动画 @keyframes rotatefresh { from { transform: rotate(0deg) } to { transform: rotate(360deg); trans ...
- MySql自动备份shell
MySql黑屏备份是每个运维工程师必备的技能,以下是MySQL自动备份脚本: #/bin/bash#This is mysql backup shell on 2019/4/28 BAKUP_DIR= ...