篇一 :数据结构总结

本学期开设的《数据结构与算法》课程已经告一段落,现就其知识点及其掌握情况、学习体会以及对该门课程的教学建议等方面进行学习总结。一、《数据结构与算法》知识点在课本的第一章便交代了该学科的相关概念,如数据、数据元素、数据类型以及数据结构的定义。其中,数据结构包括逻辑结构、存储结构和运算集合。逻辑结构分为四类:集合型、线性、树形和图形结构,数据元素的存储结构分为:顺序存储、链接存储、索引存储和散列存储四类。紧接着介绍了一些常用的数据运算。最后着重介绍算法性能分析,包括算法的时间性能分析以及算法的空间性能分析。第二章具体地介绍了顺序表的概念、基本运算及其应用。基本运算有:初始化表、求表长、排序、元素的查找、插入及删除等。元素查找方法有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序及归并排序等。最后介绍了顺序串的概念,重点在于串的模式匹配。链表中数据元素的存储不一定是连续的,还可以占用任意的、不连续的物理存储区域。与顺序表相比,链表的插入、删除不需要移动元素,给算法的效率带来较大的提高。链表这一章中介绍了链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结构、功能和基本算法。堆栈与队列是两种运算受限制的线性结构。其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵循“先进后出”的规则,对堆栈的操作只能在栈顶进行;而队列要遵循“先进先出”的规则,教材中列出了

两种结构的相应算法,如入栈、出栈、入队、出队等。在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。第六章介绍了特殊矩阵和广义表的概念与应用。其中,特殊矩阵包括对称矩阵、三角矩阵、对角矩阵和稀疏矩阵,书中分别详细介绍了它们的存储结构。稀疏矩阵的应用包括转置和加法运算等。最后介绍了广义表的相关概念及存储结构,关于它的应用,课本中举了m元多项式的表示问题。

…… …… 余下全文

篇二 :数据结构查找实验报告

实验题9.1 设计一个程序exp9-1.cpp,输出在顺序表{3,6,2,10,1,8,5,7,4,9}中采用顺序方法找关键字5的过程。

程序如下:

//文件名:exp9-1.cpp

#include <stdio.h>

#define MAXL 100                             //定义表中最多记录个数

typedef int KeyType;

typedef char InfoType[10];

typedef struct

{    

       KeyType key;                         //KeyType为关键字的数据类型

    InfoType data;                         //其他数据

} NodeType;

typedef NodeType SeqList[MAXL];                   //顺序表类型

…… …… 余下全文

篇三 :数据结构学习总结

通过一学期对《数据结构与算法》的学习,大概的了解了基本的数据结构和相应的一些算法。下面总结一下自己一个学期学习的收获和心得。 数据结构是什么:

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 数据结构重要性:

一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。

常见的数据结构:

1. 顺序表:

定义:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

基本运算:

置表空:Sqlsetnull(L) 判表满:Sqlempty(L)

求表长:Sqllength(L) 插入:Sqlinsert(L,i,x) 按序号取元素:Sqlget(L,i) 删除:Sqldelete(L,i)

…… …… 余下全文

篇四 :算法数据结构总结

**大学

算法与数据结构课程设计

课 程:

专 业:

班 级:

学 号:

姓 名: **

2010 年 11 月 18日

本次算法与数据结构实践课中我们小组主要选择了两个课题,一个是迷宫的创建及求解问题,另一个是停车场管理系统问题,还选做了一个敢死队的问题。

在迷宫创建及求解这个问题中,我主要负责的是求解迷宫这个模块。迷宫求解采用的是课本中的回溯法,其求解过程就是沿着一个方向进行探索,若能走通,则继续向前走;否则原路返回,换一个方向在进行探索,直到找到了出口,或者所有可能的探索都失败而告终。

在探索过程中,可以用一个栈来保存探索的序列。其算法框架如下:

创建一个(保存探索过程的)空栈:

把入口位置压入栈中:

While 栈不空时{

取栈顶位置并设置为当前位置;

While 当前位置存在试探可能{

取下一个试探位置;

If(下一个位置是出口)

打印栈中保存的探索过程然后返回

If (下一个位置是通道)

把下一个位置进栈并且设置为当前位置;

}

}

这个模块在程序中对应的代码段是:

Status InitStack(Stack *s) /*创建栈s并初始化为空栈*/ {

s->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); /*分配内存空间*/

if(!s->base) Error("Overflow");

s->top=s->base;

s->stacksize=STACK_INIT_SIZE;

return OK;

}

Status DestroyStack(Stack *s) /*销毁栈*/

{

s->top=NULL;

…… …… 余下全文

篇五 :数据结构总结

总结:

第一章 绪论

1、数据结构的概念

数据、数据元素、数据对象、数据项、数据结构

2、逻辑结构

线性结构、树形结构、图形结构、集合结构

3、抽象数据类型 ADT

概念、操作(初始化、插入、删除、定位)

4、算法分析

时间复杂度(顺序、条件(if…else)、循环(for while))

空间复杂度

第二章 线性表

1、概念

特点、抽象数据类型

2、线性表的顺序表示

构造空表、求表长、判断表空、取指定位置元素、表元素的插入、删除

3、线性表的链式表示

单链表 head、双链表next prior (插入、删除)

循环链表 双循环链表

若要删除表尾元素或者在最后一个元素后插入一个元素 双循环链表>带尾指针的循环链表

第三章 栈和队列

1、栈的性质

2、顺序栈、链栈(top、base)

共享栈

3、队列性质

4、顺序队列、链队列(rear front)

5、循环队列(防止假溢出)

第四章 串

1、概念

子串 主串 串相等 子串位置

非平凡子串

2、操作

串比较 求串长 求子串 串联

串替换

3、串的模式匹配

next nextval

第五章 数组和广义表

1、数组类型

一维 二维 多维

2、顺序结构

行优先 列优先

特殊矩阵:对称、三角、稀疏(三元组、转置)

3、广义表

表头head 表尾tail 深度 广度

第六章 树

1、树的性质

2、二叉树的性质

五个性质、完全二叉树、满二叉树

3、顺序结构

4、链式结构

1)二叉链表

2)三叉链表

5、遍历:先序、中序、后序

6、线索化二叉树

7、赫夫曼树 赫夫曼编码

第七章 图

1、概念

有向图 无向图 连通图 强连通图

…… …… 余下全文

篇六 :数据结构课程总结

课 程 学 习 总 结

数据结构课程总结

数据结构课程总结

共 页 第 页

数据结构课程总结

…… …… 余下全文

篇七 :数据结构总结

转载自South_wind的专栏

常见的数据结构运用总结

考虑到Obsidian三个成员的擅长领域,这段时间都在做杂题,算是学习各种算法吧,趁现在休息的时间,而且大家马上要备战今年的比赛了,写写自己专攻方面的一些心得吧

扯开线段树、平衡树这些中高级的东西,先说说基础的数据结构

算是代码量最小的数据结构?出栈进栈都只有一句话而已

常见用途:

消去一个序列中的相同元素(做法大家应该都知道了吧,见过很多次了)

维护一个单调的序列(所谓的单调栈,dp的决策单调?)

表达式求值(经典的栈运用,如果使用的很熟悉的话,可以处理一元、二元运算,不过最近没见过类似的题目了)

用于辅助其他算法(计算几何中的求凸包)

队列

队列应该还是很常见的数据结构了,如果专攻图论的话,spfa应该是写烂了的

这里说到的队列,是狭义的普通的队列和循环队列,不包括后面讲的一些变形

注意循环队列的写法,尽量不要使用取模运算,不然的话,遇到不厚道的出题者,可以把取模的循环队列卡到死

常见用途:

主要用于辅助其他算法,比如说spfa,bfs等(建议习惯用stl的孩子手写queue,毕竟就几行代码而已,偷懒会付出代价的。。。)

双端队列

如果写dp写的多的话,这个东西应该还是算是比较基础的东西了,双端队列多用于维护一个满足单调性的队列

还是建议手写,stl的deque使用块状链表写的,那东西的复杂度是O(Nsqrt(N))的,不要被迷惑了。

常见用途:

dp的单调性优化,包括单调队列优化和斜率优化,都要用到这个结构

计算几何中的算法优化,比如半平面交

树的分治问题中利用单调队列减少转移复杂度

链表 Dancing Links

写图论的不要告诉我不会写这货,链表可以写单双向,循环非循环的,高级点儿的可以考虑十字链表,麻花链表

…… …… 余下全文

篇八 :非常实用的数据结构知识点总结

数据结构知识点概括

第一章 概 论

数据就是指能够被计算机识别、存储和加工处理的信息的载体。

数据元素是数据的基本单位,可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。

数据结构的定义:

·逻辑结构:从逻辑结构上描述数据,独立于计算机。·线性结构:一对一关系。

·线性结构:多对多关系。

·存储结构:是逻辑结构用计算机语言的实现。·顺序存储结构:如数组。

·链式存储结构:如链表。

·索引存储结构:·稠密索引:每个结点都有索引项。

·稀疏索引:每组结点都有索引项。

·散列存储结构:如散列表。

·数据运算。

·对数据的操作。定义在逻辑结构上,每种逻辑结构都有一个运算集合。

·常用的有:检索、插入、删除、更新、排序。

数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。

·结构类型:由用户借助于描述机制定义,是导出类型。

抽象数据类型ADT:·是抽象数据的组织和与之的操作。相当于在概念层上描述问题。

·优点是将数据和操作封装在一起实现了信息隐藏。

程序设计的实质是对实际问题选择一种好的数据结构,设计一个好的算法。算法取决于数据结构。

算法是一个良定义的计算过程,以一个或多个值输入,并以一个或多个值输出。

评价算法的好坏的因素:·算法是正确的;

·执行算法的时间;

·执行算法的存储空间(主要是辅助存储空间);

·算法易于理解、编码、调试。

时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数。

渐近时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。

评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度。

算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。

时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n^2)、立方阶O(n^3)、……k次方阶O(n^k)、指数阶O(2^n)。

…… …… 余下全文