数据结构的主要内容

我们都知道数据结构是学习计算机的重要部分,理解起来也很困难,那么我将总结几篇数据结构主要的内容给大家复习,个别困难的内容会单独出专题解释,让大家更好的理解。

那么我们就先从线性结构开始

线性表

线性表是线性结构(每个元素最多只有一个出度和一个入度,表现为一条线状)的代表,线性表按存储方式分为顺序表和链表,存储形式例图:

上图中,顺序表是需要一段连续的内存空间来存放顺序表中的所有元素,这些元素在物理地址上是相邻的。

链表中的所有元素只是逻辑上相邻,在实际物理存储时处于不同的空闲块中,元素之间通过指针域连接,如上图所示,又可分为单链表、循环链表、双向链表,具体逻辑上的关系都如上图所示

单链表的删除和插入

左图为在单链表中插入结点 右图为在单链表中删除结点

在上图中p所指向的节点后插入 S 所指向的节点,操作为:

s-next=p->next;

p->next=s.

同理,在单链表中删除 p 所指向节点的后继节点 q 时,操作为:

q=p->next;

p->next=p->next->next;

free(p).

双向链表的插入和删除

左图为在双链表中插入结点 右图为在双链表中删除结点

如上图所示,插入步骤为:

(1) s -> front = p -> front;

(2)p->front->next=s;,或者表示为s->font->next=s;

(3)s->next=p;

(4)p -> front= s;

删除节点步骤为:

(1) p -> front -> next = p -> next;(2) p -> next -> front = p -> front; free(p):

那么顺序存储和链式存储有什么大的区别呢?

  1. 首先是存储密度,顺序存储=1,更优,链式存储因为含有指针所以密度<1。

  1. 接下来是容量分配,顺序存储是事先确定的,链式存储是动态改变的,更优。

  1. 然后是查找运算两者一样都是O(n/2)。

  1. 再然后是读运算顺序存储为O(1),链式存储是O([n+1]/2),最好情况是1,最坏情况是n。

  1. 当然还有插入运算和删除运算,链式存储表现更优。

当需要对元素进行不改变结构操作时(读取、查找,顺序表效率更高,因为其物理地址是连续的,如同数组一般,只需按索引号就可快速定位,而链表需要从头节点开始,一个个的查找下去。

接下来我们讨论栈与队列

对于栈与队列我们知道队列是先进先出的,然而栈是先进后出的,只有栈顶能进出。

这么说大家不直观,大家可以对着下面的图进行理解。

其次还有个循环队列

在循环队列中,头指针指向第一个元素,尾指针指向最后一个元素的下一个位置,因此,当队列空head=tail,当队列满时,head=tail,这样就无法区分了,因此,一般将队列少存一个元素,这样,时,队列满时的条件就变为 tail+1=head,而考虑是循环队列,必须要除以最大元素数来取余数,即(tail+1)%size=head,如上图右边所示两个公式。循环队列的长度公式为(Qtail-Qhead)%size。

优先队列:元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。使用堆来存储.

因为其不是按照元素进队列的顺序来决定的。

栈与队列讲完了还有串呢!

我们知道串只是个简称,它可以是字符串,空串,空格串,子串等;

其中:

  1. 字符串是一种特殊的线性表,其数据元素都为字符。

  1. 空串:长度为0的字符串,没有任何字符。

  1. 空格串:由一个或多个空格组成的串。

  1. 子串:串中任意长度的连续字符构成的序列称为子串。

子串可以进行定位操作:

子串定位操作用于查找子串在主串中第一次出现的位置算法。

模式匹配算法

基本的模式匹配算法:也称为布鲁特一福斯算法,其基本思想是从主串的第 1个字符起与模式串的第1个字符比较,若相等,则继续逐个字符进行后续的比较。否则从主串中的第2个字符起与模式串的第 1个字符重新比较,直至模式串中每个字符依次和主串中的一个连续的字符序列相等时为止,此时称为匹配成功,否则称为匹配失败。

KMP 算法:对基本模式匹配算法的改进,其改进之处在于:每当匹配过程中出现相比较的字符不相等时,不需要回溯主串的字符位置指针,而是利用已经得到的“部分匹配”结果将模式串向右“滑动”尽可能远的距离,再继续进行比较。

好了,那么到目前为止我们线性结构的大概内容就总结完了,下一篇文章我会向大家介绍数组,矩阵的内容。大家可以关注一下,以便更方便找到文章。敬请期待之后的内容。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据结构是计算机科学与技术专业考研的重要科目之一,主要内容包括以下几个方面: 1. 基本概念:理解数据结构的基本概念,包括数据、数据元素、数据项、数据类型等。了解数据结构的逻辑结构和存储结构。 2. 线性表:学习线性表的基本概念和操作,包括顺序表、链表、栈和队列。了解它们的特点、实现方式以及应用场景。 3. 树与二叉树:学习树和二叉树的基本概念和操作,包括二叉树的遍历、树的存储结构和应用。了解二叉树的各种特殊形态,如平衡二叉树、线索二叉树等。 4. 图:学习图的基本概念和操作,包括图的存储结构、图的遍历和最短路径算法。了解图的应用领域,如社交网络分析、路线规划等。 5. 查找与排序:学习查找和排序算法,包括顺序查找、二分查找、哈希查找、插入排序、快速排序、归并排序等。了解它们的原理、时间复杂度和应用场景。 6. 散列技术:学习散列技术的基本概念和实现方式,包括散列函数、冲突解决方法等。了解散列技术在查找和存储中的应用。 7. 动态规划:学习动态规划算法的基本思想和应用,了解动态规划的递推关系和最优子结构。 8. 算法复杂度分析:学习算法复杂度的分析方法,包括时间复杂度和空间复杂度。了解如何评估算法的效率和性能。 9. 数据结构的应用:了解数据结构在实际问题中的应用,如图的最短路径、树的遍历和查找等。学习如何根据问题的特点选择合适的数据结构算法。 10. 练习与实践:通过做题、编程实践等方式进行练习,加深对数据结构的理解和应用能力。 最重要的是理解数据结构的基本原理和常用算法,掌握它们的实现方式和应用场景。建议多阅读教材和参考书籍,参加考研辅导班或自习室,制定合理的学习计划和复习计划,不断巩固和提高自己的数据结构知识。祝您考研顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值