0.PTA得分截图

1.本周内容总结

1.1总结线性表内容

  • 顺序表结构体定义
typedef struct LNode *List
struct LNode
{
ElementType Data[MAXSIZE];
int last;
};
struct LNode L;
List PtrL;
  • 顺序表插入
void Insert(ElementType X, int i; List PtrL)
{
int j;
if (PtrL->Last == MAXSIZE - 1)
{
cout << "表满"<<endl;
return;
}
if (i < 1 || i> PtrL->Last + 2)
{
cout << "位置不合法" << endl;
return;
}
for (j = PtrL->Last; j >= i - 1; j--)
{
PtrL->Data[j + 1] = PtrL->Data[j];
}
PtrL->Data[i - 1] = X;
PtrL->Last++;
return;
}
  • 顺序表删除
void Delete(int i, List PtrL)
{
int j;
if (i<1 || i>PtrL->Last + 1)
{
cout << "不存在第" << i << "个元素" << endl;
return;
}
for (j = i; j <= PtrL->Last; j++)
{
PtrL->Data[j - 1] = PtrL->Data[j];
}
PtrL->Last--;
return;
}
  • 链表结构体定义
typedef struct LNode  		//定义单链表结点类型
{
ElemType data;
struct LNode* next; //指向后继结点
} LNode, * LinkList;
  • 链表头插法及尾插法
List Insert(ElementType X, int i, List PtrL)
{
List p, s;
if (i == 1)/*新结点插入在表头*/
{
s == new LNode;/*申请、填装结点*/
s->Data = x;
s->Next = PtrL;
return s;/*返回新表头指针*/
}
p = FindKth(i - 1, PtrL);/*查找第i-1个结点*/
if (p == NULL)/*第i-1个不存在,不能插入*/
{
cout << "参数i错" << endl;
return NULL;
}
else
{
s = new LNode;/*申请、填装结点*/
s->Data = X;
s->Next = p->Next;/*新结点插入在第i-1个结点的后面*/
p->Next = s;
return PtrL;
}
}
  • 链表删除
List Delete(int i, List PtrL)
{
List p, s;
if (i == 1)/*若要删除的是第一个结点*/
{
s = PtrL;/*s指向第一个结点*/
if (PtrL != NULL)
{
PtrL = PtrL->Next;/*从链表中删除*/
}
else
{
return NULL;
}
delete s;/*释放被删除结点*/
return PtrL;
}
p = FindKth(i - 1, PtrL);/*查找第i-1个结点*/
if (p == NULL)
{
cout << "第" << i - 1 << "个结点不存在" << endl;
return NULL;
}
else if(p->Next==NULL)
{
cout << "第" << i << "个结点不存在" << endl;
return NULL;
}
else
{
s = p->Next;/*s指向第i个结点*/
p->Next = s->Next;/*从链表中删除*/
delete s;/*释放被删除结点*/
return PtrL;
}
  • 链表插入
bool ListInsert(LinkList& L, int i, ElemType e)
{
int j = 0;
LinkList p = L;//p指向头结点,j为0
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)//未找到第i-1个节点
return false;
else
{
LinkList s;
s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
}
  • 有序链表的插入
void ListInsert(LinkList& L, ElemType e)
{
LinkList pre = L, p;
while (pre->next != NULL && pre->next->data < e)
{
pre = pre->next;
}
p = new LNode;
p->data = e;
p->next = pre->next;
pre->next = p;
}
  • 有序链表的删除
void ListDelete(LinkList& L, ElemType e)
{
LinkList p = L, s,j=L;
int flag = 0;
int cnt = 0;
while (p->next != NULL )
{
if (p->next->data == e)
{
flag = 1;
s = p->next;
p->next = p->next->next;
delete s;
}
else
{
p = p->next;
}
}
while (j->next != NULL)
{
cnt++;
j = j->next;
}
if (flag == 0&&cnt!=0)
{
cout << e << "找不到!" << endl;
} }
  • 有序链表的归并
void UnionList(LinkList L1, LinkList L2, LinkList L3)
{
LinkList p1 = L1->next, p2 = L2->next, r, s;
L3 = new LNode;
r = L3;
while (p1 != NULL && p2 != NULL)
{
if (p1->data < p2->data)
{
s = new LNode;
s->data = p1->data;
r->next = s;
r = s;
p1 = p1->next;
}
else
{
s = new LNode;
s->data = p2->data;
r->next = s;
r = s;
p2 = p2->next;
}
}
while (p1 != NULL)
{
s = new LNode;
s->data = p1->data;
r->next = s;
r = s;
p1 = p1->next;
}
while (p2 != NULL)
{
s = new LNode;
s->data = p2->data;
r->next = s;
r = s;
p2 = p2->next;
}
r->next = NULL;
}
  • 双链表定义
typedef struct DNode
{
ElemType data;
struct DNode* prior;//指向前驱节点
struct DNode* next;//指向后继节点
}DNode, * Dlist;
  • 双链表节点的插入片段
s->next=p->next;
p->next=s;
s->next->prior=s;
s->prior=p;
  • 双链表节点的删除片段
q=p->next;
p->next=p->next->next;
q->next->prior=p;
delete p;

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

  • 线性表是点对点的一个逻辑结构
  • 线性表(数据结构)所需要掌握的基本操作多,需多加练习才能达到要求
  • 线性表是数据结构之后学习的基础,应加以重视并多多练习

2.PTA实验作业

2.1题目1:两个有序序列的中位数

2.1.1代码截图











2.1.2本题PTA提交列表说明

  • Q1:段错误

    • A1:

      尾指针r一开始没有指向表头L3所导致
  • Q2:部分正确
    • A2:

      通过注释排查,问题出在链表合并这一函数的实现上。

      把合并还没合并完链表的代码错写在了合并两链表共有长度的片段上,导致出错。

2.2题目2:jmu-ds-有序链表的插入删除

2.2.1代码截图



2.2.2本题PTA提交列表说明

  • Q1:部分正确得5分

    • A1:没看清题目要求,没编辑相应的代码

  • Q2:部分正确得10分
    • A2:

      此代码为最终代码,在VS上的结果是:



      没有头绪。

2.3题目3: jmu-ds-有序表插入数据

2.3.1代码截图



2.3.2PTA提交列表说明

  • Q1:部分正确得10分

    • A1:插入函数中,寻找插入位置用for循环,导致考虑数组溢出问题,难以完成代码要求。故,改用while循环查找插入位置。



  • Q2:部分正确得15分

    • A2:未编辑空表需输出error的代码导致空表的测试点过不去
  • Q3:部分正确得20分

    • A3:查找插入位置的代码不严谨,在插入最后一个出现问题。因为顺序表用数组来实现,而没有读入数据的数组位置的数据随机,因此需完善代码。



3.阅读代码

3.1题目及解题代码



3.1.1该题的设计思路









3.1.2该题的伪代码

if (表A或表B为空表) return NULL;
定义链表指针pA指向表A,pB指向表B;
while (pA的值与pB的值不相等)
{
if (pA的值为NULL)
pA = headB;
else
pA = pA->next;
if (pB的值为NULL)
pA = headA;
else
pB = pB->next;
}
return pA;

3.1.3运行结果



3.1.4解题优势及难点

  • 难点

    • 怎么样构思找到相交的点
    • 是地址也要相同还是只有数据相同
  • 解题优势
    • 从具有相同长度入手,并遍历表后使其指向另一个表从而解决长度差的问题

      • 否则需考虑两表谁长谁短而进行分类,加大代码量
    • 运用了三目运算符,压缩了代码量,使得代码更为简洁

DS01-线性表的更多相关文章

  1. 线性表Linearlist

    顺序存储,链式存储,索引存储,散列存储 基本运算 SLIST         1.置空表 void SetNull(&L)     2.求长度 int Length(L)     3.取元素 ...

  2. 数据结构(Java描述)之线性表

    基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...

  3. JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表

    Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...

  4. 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。

    //归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...

  5. Java集合类学习笔记(各种线性表性能分析)

    ArrayList.LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表. Queue代表了队列,Deque代表了双端队列. 一般来说,由于数组以一块连续内存区来保存所有的数组 ...

  6. 动态分配的顺序线性表的十五种操作—C语言实现

    线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...

  7. Java Se :线性表

    Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...

  8. 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

    一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...

  9. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现

    注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...

  10. C#线性表之顺序表

    线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...

随机推荐

  1. spring学习笔记三:Component注解(把POJO类实例化到spring的IOC容器中)

    Component注解:把普通的POJO 类实例化到spring的IOC容器中,就是定义成<bean id="" class=""> 项目目录树: ...

  2. jstl之核心标签

    JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...

  3. [洛谷P3384] [模板] 树链剖分

    题目传送门 显然是一道模板题. 然而索引出现了错误,狂wa不止. 感谢神犇Dr_J指正.%%%orz. 建线段树的时候,第44行. 把sum[p]=bv[pos[l]]%mod;打成了sum[p]=b ...

  4. python标准库:datetime模块

    原文地址:http://www.bugingcode.com/blog/python_datetime.html datatime 模块题共用一些处理日期,时间和时间间隔的函数.这个模块使用面向对象的 ...

  5. redis命令学习(二) · THIS SPACE

    列表(Lists)操作命令 Redis列表是简单的字符串列表,按照插入顺序排序. 你可以添加一个元素导列表的头部(左边)或者尾部(右边)LPUSH命令插入一个新的元素导头部,而RPUSH插入一个新元素 ...

  6. Hexo博客maupassant主题添加Google Adsense广告

    自从在 Github Page 落户以后,很长一段时间使用的是极简且有点艺术范儿的 fexo 主题,而不是大名鼎鼎的 next 主题.后来偶然发现了符合我审美的Hexo博客 maupassant 主题 ...

  7. rsync auth failed on module xxx

    rsync 报错 "auth failed on module xxx", 一般有三种情况造成: 密码文件格式错误: 服务端密码文件的格式是: user:password 每个一行 ...

  8. Nginx之常用基本配置(二)

    上一篇我们把nginx的主配置文件结构大概介绍了下,全局配置段比较常用的指令说了一下,http配置段关于http服务器配置指令介绍了下,以及有几个调优的指令,server_name的匹配机制,错误页面 ...

  9. CentOS 7下Apache + PHP + MySQL环境(LAMP)的安装

    Step 1:更换阿里云 yum 源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7 ...

  10. 重置gitlab管理员密码

    gitlab web管理员登录密码忘记以后可以用如下方式修改密码(本演示系统为Linux-CentOS6.6): [root@localhost ~]# gitlab-rails console pr ...