数据结构简单总结

一、思维导图

二、重要概念

一.数据结构

1.逻辑结构

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

2.存储结构

常用的存储结构有顺序存储、链式存储、索引存储和哈希存储等。

3.算法分析

1)目标:正确性、可使用性、可读性、健壮性、时间效率高与储存量低

2)方法:事后估计法、事前分析估算法

3)两个角度:时间复杂度、空间复杂度。二者不可能都为最低,需维持一个合适的平衡。

二.线性表

1.定义

具有相同特性的数据元素的一个有限序列。

其中每个元素都是一对一的相互关系。

2.普通线性表

1)顺序表

特点:逻辑上相邻且物理地址也相邻;实现随机存储(快速访问)。

2)链表

特点:线性表中的数据元素存放在一组地址任意的存储节点,节点之间使用“”进行连接。

分为单链表、双链表、循环链表。

3.栈

一种特殊的线性表——只能在一端进行插入、删除操作的线性表。

根据存储结构可以分为两种,顺序栈和链栈。

基本运算

InitStack(&S):初始化栈

DestroyStack(&S):销毁栈

StackEmpty(&S):判断栈是否为空

Push(&S,e):进栈

Pop(&S,&e):出栈

GetTop(S,&e):取栈顶元素

PS:进栈和出栈可是穿插进行

4.队列

队列是一种只能在一端进行插入,在另一端进行删除操作的线性表。

也可根据存储结构分为顺序队列和链队列。

基本运算

InitQueue(&q):初始化队列

DestroyQueue(&q):销毁队列

QueueEmpty(&q):判断队列是否为空

enQueue(&q,e):入队列

deQueue(&q,&e):出队列

顺序队列
  • 队空条件:front=rear
  • 队满条件:(rear+1)%MaxSize=front
  • 入队操作:rear=(rear+1)%MaxSize;将新元素放在rear处;
  • 出队操作:front=(front+1)%MaxSize;取出front处元素;

5.串(地位重要)

基本概念:是由零个或多个字符组成的有限序列;串是数据元素为单个字符的特殊线性表

串一般分为主串和子串。

串的模式匹配

1)BF算法

1.将主串和子串的字符一个个进行比较,当字符不匹配时回溯到i=i-j+1;

2.最好时间复杂度O(m)。

3.最坏时间复杂度O(n*m)。

2)KMP算法

1.利用已经部分匹配的结果来消除主串的回溯。

2.平均时间复杂度为O(n+m)。

三、疑难问题

1.编程中遇到的答案错误,但不知到发生在哪。

我通过将每个步骤的值输出然后进行观察,检查数据到哪一步发生与预料中不同的结果,然后对该步骤进行修改,再检验,最后得出想要的代码。

原文地址:https://www.cnblogs.com/0695x/p/12588717.html

时间: 2024-10-13 02:25:01

数据结构简单总结的相关文章

数据结构 - 简单选择排序(simple selection sort) 详解 及 代码(C++)

数据结构 - 简单选择排序(simple selection sort) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28601965 选择排序(selection sort) : 每一趟在n-i+1个记录中选取关键字最小的记录作为有序序列中第i个记录. 简单选择排序(simple selection sort) : 通过n-i次关键字之间的比较, 从n-i+1个记录中选出关键字最小的记录, 并和第i个记录交换. 选择排序需

数据结构————简单排序

/* 对顺序表L作简单选择排序 */ void SelectSort(SqList *L) { int i,j,min; for(i=1;i<L->length;i++) { min = i; /* 将当前下标定义为最小值下标 */ for (j = i+1;j<=L->length;j++) /* 循环之后的数据 */ { if (L->r[min]>L->r[j]) /* 如果有小于当前最小值的关键字 */ min = j; /* 将此关键字的下标赋值给min

数据结构-简单排序

在我们的业务中,有很多情况都需要根据某种需要针对要返回的数据进行排序,但是排序是一种非常耗时的操作,特别是当数据量大的时候,所有有时候我们也会说,数据的排序是很重要的,但是也是非常耗时间的.在这里简单介绍一下简单排序,这些排序算法执行速度较慢,但算法逻辑简单,在某些时候,比其他的复杂排序算法更加有效,同时也能帮助我们理解其他的复杂排序算法. 一.冒泡排序 冒泡算法的排序规则:重复比较相邻的两个元素,如果第一个比第二个大,就交换两个元素的位置,重复这个动作,就可以将最大值移动到后面.一趟(从第一个

大话数据结构——简单选择排序

在学了冒泡排序后,会发觉这种算法就是不断比较交换.虽简单直接,显然给人一种繁琐的感觉.那有没有更好一点的算法呢?这当然有啦,没有就糟糕透了 :-P 这篇文章介绍一种较冒泡要好的排序算法:简单选择排序 看到“选择”这两字估计也猜到一二了.没错,这种算法的思想就是:待找到了最适合的那位数的位置我才选择与它进行交换 这样做,我们大大省下了很多不必要的交换.因为在代码编写中,交换函数是经常使用,所以一般将其封装成一个函数进行调用.如果存在非常多不必要的交换操作,这就产生了非常多不必要的函数调用.要知道,

[golang] 数据结构-简单选择排序

原理简单选择排序应该是最直观最容易理解的排序方法了.直接从头开始一个一个去比,找出最小的放到最左边.再依次完成其他位的排序. 时间复杂度比较次数固定为O(n^2),数据交换次数是0~n-1次因为会交换不同位置相同数值的数据,所以选择排序并不稳定 代码实现 package main import ( "fmt" ) func main() { var length = 10 var mm = make(map[int]int, length) var o []int // 先准备一个顺序

数据结构简单实现

1.栈(能动态调整数组大小的实现) import java.util.Iterator ; import java.util.Scanner ; public class ResizingArrayStack<Item> implements Iterable<Item>{ private Item[] a = (Item[]) new Object[1] ; private int N = 0 ; public boolean isEmpty(){ return N == 0 ;

Redis数据结构之简单动态字符串SDS

Redis的底层数据结构非常多,其中包括SDS.ZipList.SkipList.LinkedList.HashTable.Intset等.如果你对Redis的理解还只停留在get.set的水平的话,是远远不足以应对面试提问的.本文简单介绍了Redis底层最重要的数据结构 - 简单动态字符串(SDS) Redis使用C语言开发,但并没有使用C语言传统的字符串表示(以空字符结尾的字节数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串的(simple dynamic string,SDS

数据结构整理 第一章

1.1数据结构: 计算机科学是一门研究数据表示和数据处理的科学,在利用计算机进行数据处理时,实际需要处理的数据元素一般有很多.要提高数据处理效率,节省存储空间,如何组织数据就成了关键问题.而数据结构用来反映一个数据的内部构成,即数据由哪些成分构成,以什么方式和结构构成. 1.1.1基本概念: 1.数据 数据(Date)是外部世界信息的载体.它能够被计算机识别.存储和加工处理,是计算机程序的加工的原料.计算机程序处理各种各样的数据,可以是数值数据,如整数.实数或复数,主要用于工程计算.科学计算和商

Android Bundle传递简单数据、对象数据

Android开发过程中进程遇到组件之间.进程之间等数据的传递,数据传递有很多种,其中使用Bundle传递非常方便. Bundle可以传递多种数据,是一种类似map的key-value数据结构 简单的调用如下所示 Bundle bundle=new Bundle(); bundle.put***(key,value) 但是有时候需要我们传递一个对象,做法就是先把该对象使用serializable序列化 public class Book implements Serializable{ } 然后