ll_abc

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

学了专业已经一个学期多了,感觉并没有积累到什么东西,但是最近听到了一句话 “以前觉得代码什么都做不了,而现在觉得没有代码做不了的”。希望从现在开始 能写好博客,从点滴积累。

 

  1. 本章内容的小结

数据结构:分为逻辑结构(抽象)和存储结构(具体)

 

逻辑结构:分为线性结构和非线性结构【与数据元素本身的形式、内容、相对位置、个数无关】

 

线性结构:线性表、栈、队列、字符串、数组、广义表

 

非线性结构:树、图、集合(元素之间并无关系)

 

存储结构:顺序存储结构和链式存储结构

顺序存储结构:(地址/存储空间的连续性)

优点:随机存取

缺点:不方便删除、插入、扩容

链式存储结构:(地址/空间可以不连续)

优点:空间利用率高 (属于顺序存取)

 

某些术语:

数据元素:数据的基本单位

数据项:组成数据元素的最小单位

数据结构: 带结构的数据元素的集合

 

抽象数据类型(ADT)包括数据对象、数据对象上关系的集合、数据对象的基本操作的集合

独立于具体,将数据与操作封装一起,可实现信息隐藏。

 

与类的区别: ADT是概念层(抽象层) 类是应用层(实际化并解决问题)

 

 

在本章中还学到了两个语法

Ⅰ typedef + 已有类型名 + 新名字;

Ⅱ 内存的动态分配与释放  分配:指针变量=new 数据类型  释放: delete 指针变量

 

算法:5个特性:有穷性  确定性 可行性  输入  输出

评判标准:正确性 可读性 健壮性 高效性(时间复杂度和空间复杂度)

 

时间复杂度:(问题规模n、基本语句的执行次数)

T(n)=O(f(n))

例如:O(1)、O(m*n)、O(n²)、O(log3n)

 

空间复杂度:(辅助空间)

O(1):原地工作

 

插入一段小知识

数组越界:栈溢出访问(不一定会发生)

原因:①与编译器有关(编译器中的设置可对栈进行保护)

②与计算机体系结构有关

 

  2.第二章中学习线性表的表示和实现

从顺序表和链式表展开

 

顺序表:静态数组不够大的时候

一般定义数组a[], 它的最大长度是有限制的,在栈内储存

解决方案:①在全局变量中定义数组,则将储存在堆内(堆>栈)

②空间不足的时候(也称内存泄漏)则可申请新空间

int *a = new int [长度]  存储在堆内

当申请了新的空间时需要人为回收空间 需delete。

 

链式表:主要通过指针指向下一个空间地址进行连接

在学习的过程中曾被指针变量和结点变量弄混

LinkList p 或LNode *p ,则p 是指针变量 而*p 是对应得结点变量

另外 头结点是一般不存储信息 ,从首元结点开始

结点之间得存储空间可不连续,结点内部必连续

 

之后就是顺序表和链式表的实现与表示

 

  3. 在进行集合求交集的时候很绝望,一开始是按照定义3个数组,然后将数据输入进去到其中两个数组,然后将数组分别进行排序,然后就a[0]与b[0]比较,若相等则放进c数组,若a[0]>b[0] 则将b数组的下标往后移;若a[0]<b[0],则将a 数组的下标往后移,然后循环直到其中一个集合结束。

但是我虽然知道一定会超时,但是却有多种段错误,始终无法进行下去。

 

于是我去百度段错误

https://blog.csdn.net/e_road_by_u/article/details/61415732

在这篇文章中我以为是因为数组的空间太大,于是把数组定义为全局变量,在dev编译时无法发现错误,编译成功,但是在PTA上,仍没有变化。

 

后来我决定放弃自己的写法 去询问别人的想法

他将两个集合输入到同一个数组里,然后进行排序,然后遍历数组的时候将相同的值从copy进去到另外一个数组,然后最后直接输出。并且排序的时候直接运用sort算法的头文件#include<algorithm>

 

我发现速度非常快而且写的代码极少。于是我开始想我的代码为啥不能运行,从本质来讲应该没什么错误。

后来有发现我的形参没有传值过去,进行二次修改后发现仍然错误,于是事情并没有解决。由于时间关系,就草草了事。

 

  4.接下来的目标是找出此次问题所在,纠正代码。

以后可以自己找出问题所在,独立打出可以run的代码。

posted on 2019-03-17 23:02  ll_abc  阅读(146)  评论(3编辑  收藏  举报