
数据结构与算法
文章平均质量分 90
yunfan188
把时髦的技术挂在嘴边,还不如把过时的技术记在心里。
展开
-
线性结构 -- 队列
一 队列的基本概念1.1 队列的定义和特点和栈相反,队列(Queue)是一种先进先出(First In First Out,FIFO)的线性表。它也是一种操作受限的线性表,它只允许在表的一端进行插入,而在另一端删除元素。 在队列中,允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)。 假设队列为 q = (),那么 a1 就是队头元素,an 则是队尾元素。队列的元素是按照 的顺序进入的,退出队列也只能按照这个次序依次退出,也...原创 2021-09-17 22:07:30 · 5429 阅读 · 0 评论 -
线性结构 -- 栈
前言 栈和队列是两种重要的线性结构。从数据结构角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表,因此,可称为限定性的数据结构。但从数据类型角度看,它们是和线性表不相同的两类重要的抽象数据类型。一 栈的定义和特点1.1 栈的定义 栈(Stack) 是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地,表头端称为栈底(bottom)。不含元素的空表称为空栈。1....原创 2021-09-15 17:37:51 · 5493 阅读 · 0 评论 -
线性表的链式表示-双向链表
一 双向链表的基本概念 单链表的结点中,只有一个指针域,用来指示后继结点。由此,从某个结点出发只能顺时针向后寻找其他结点。若要寻找结点的前驱结点,则必须从表头指针出发。换言之,在单链表中,查找直接后继结点的执行时间为 O(1),而查找直接前驱的执行时间为 O(n)。为克服单链表这种单向性的缺点,可利用 双向链表 (Double Linked List)。1.1 双向链表的结点(DuLNode)结点 = 前驱指针域 + 数据域 + 后继指针域前驱指针域:用来指向结点的直接前驱...原创 2021-09-12 00:25:55 · 1148 阅读 · 0 评论 -
树结构-二叉树
0 前言 树形结构是一类重要的非线性数据结构。其中以树和二叉树最为常见,直观来看,树是以分支关系定义的层次结构。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织结构都可以用树来形象表示。树在计算机领域中也得到广泛应用,如在编译程序时,可用树来表示源程序的语法结构。又如在数据库系统中,树形结构也是信息的重要组织形式之一。本文主要讨论二叉树的存储结构及其各种操作。1 二叉树基本概念1.1 二叉树的定义二叉树(Binary Tree) 是一张常见的树型结构。定义:有且...原创 2021-09-07 20:27:03 · 2702 阅读 · 0 评论 -
经典排序算法总结(C实现)
一 排序算法介绍1.0 排序的概述在计算机计算和处理加工数据时,经常会直接或间接地涉及到数据的排序问题。可以简单地将排序操作理解为:将一个按值无序的数据序列转换成为一个按值有序的数据序列的过程。例如,将一个无序的数组 A[5] = {7, 5, 8, 2, 1} 排列成有序的数组 A[5] = {1, 2, 5, 7, 8} 或是 A[5] = {8, 7, 5, 2, 1}。对于文件而言,排序可以理解为:根据文件记录的关键字值的递增或递减关系将文件记录的次序重新排列的过程。排序后的文件记录一定原创 2021-07-02 13:12:54 · 887 阅读 · 1 评论 -
线性表的链式表示-单链表、循环链表
一 基本概念与顺序表相同,链表也是一种线性表,它的数据的逻辑组织是一维的。而与顺序表不同的是,链表的物理存储结构是用一组地址任意的存储单元存储数据的。也就是说,它不像顺序表那样占据一段连续的内存空间,而是将存储单元分散在内存的任意地址上。在链表结构中,每一个数据元素都存放在链表的一个结点(Node)中,而每个结点之间是由指针将其连接在一起,这样就形成了一条如同“链子”的结构。1.1 链表结点(node)结点 = 数据域 + 指针域数据域用来存放数据元素本身的信息,指针域用来存放后继结点的原创 2021-07-01 17:37:07 · 3451 阅读 · 0 评论 -
面试题-数组与字符串(C实现)
题目1:实现一个算法,确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构,又该如何处理?分析:假设上面的字符串是由ASCII字符集构成的。ASCII字符集一共只有256个字符,我们可以构建一个256大小的数组即可。选择构建一个布尔数组,索引值 i 对应的标记指示该字符串是否含有ASCII字符集中第 i 个字符。若这个字符第2次出现,则立即返回false。示例代码如下:#include <stdio.h>#include <string.h>#includ原创 2021-06-30 15:31:42 · 363 阅读 · 0 评论 -
哈希表(hash)
什么是哈希表哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。记录的存储位置=f(key)这里的对应关系f称为散列函数,也称为哈希函数(hash function),采用散列技术将记录存储在一块连续的存储空...原创 2019-09-04 21:22:27 · 593 阅读 · 0 评论