![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 57
小鸟游八十一花
某不知名大一萌新
展开
-
数据结构学习之图
在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。 图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。 代原创 2022-06-01 13:33:29 · 166 阅读 · 0 评论 -
数据结构学习之二叉树
N皇后问题有一个n*n的棋盘,在这个棋盘中放n个皇后,使得这n个皇后,任意两个皇后不在同一行,同一列,同一条对角线。国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧。该题要求N皇后的放置结果共有多少种。此经典算法有几种常规方法:迭代法和递归回溯法递归#include <stdio.h>#原创 2022-05-29 19:14:15 · 137 阅读 · 0 评论 -
数据结构之二叉树的应用
哈夫曼树哈夫曼树相关的几个名词路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径。图 1 中,从根结点到结点 a 之间的通路就是一条路径。路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。例如在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度为 i - 1 。图 1 中从根结点到结点 c 的路径长度为 3。结点的权:给每一个结点赋予一个新的数值,被称为这个结点的权。例如,图 1 中结点 a 的权为 7,结点 b 的权为 5。结点的带权路径长度:指的原创 2022-05-29 19:08:06 · 601 阅读 · 0 评论 -
数据结构学习之二叉树
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分[1]。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节点。二叉...原创 2022-05-24 19:33:37 · 189 阅读 · 0 评论 -
数据结构学习之矩阵乘法与矩阵的转置
矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑地集中到了一起,所以有时候可以简便地表示一些复杂的模型,如电力系统网络模型。注意事项1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。3、乘积C的第m行第n列的元素等于矩阵原创 2022-05-19 20:53:48 · 3683 阅读 · 0 评论 -
链队列,循环队列
作为常用数据结构之一,队列(Queue)是一种线性表,具有先入先出(FIFO)的特性,在队尾入队、队首出队,按照存储结构划分,队列分为顺序队列和链式队列。 顺序队列通常是使用数组存储队列元素,常用形式是循环队列,即将向量空间想象为一个首尾相接的圆环,使用索引对存储大小取余等手法完成循环,防止假溢出现象。 链式队列则为单链表方式存储,输入队时从堆中动态申请及释放内存,可避免预置空间造成资源浪费及空间不够造成的队满溢出,但是需要多余的指针域空间。出入队即为单链表节点的插入删除操作,需注意数据取出的方式及原创 2022-05-17 21:53:30 · 255 阅读 · 0 评论 -
数据结构学习栈的应用之汉诺塔问题和递归累加
(好长的标题)doge递归实例:汉诺塔汉诺塔的规则:把圆盘从下面开始按大小顺序重新摆放到另一根柱子上。在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘代码实现‘#include<stdio.h> void hanoi(int n,char a,char b,char c){ if (n > 2) { hanoi(n - 1, a, c, b); printf("moving from %c to %c\原创 2022-05-12 23:10:13 · 85 阅读 · 0 评论 -
栈的应用之表达式求值
表达式求值表达式求值是栈的一个重要的应用。例如计算器中的加减乘除表达式的计算,都会使用栈来进行求值。表达式的表示方法主要有中缀表示法和后缀表示法。(老师的代码,现在的我能力有限,没法过多研究c++,所以我找了其他博客来学习栈的这一应用)中缀表示法:操作符号处于两个操作数的中间例如3+4,中缀表达式是符合人们思维的算术表达式方法,中缀表达式通常包含圆括号和方括号。中缀表达式不容易被计算机所理解,因此不太方便使用其进行表达式求值。中缀表示的例子 1 + 3 * (4 + 5)后缀表达式:不原创 2022-05-10 22:01:57 · 4820 阅读 · 0 评论 -
数据结构学习之栈和括号匹配
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。如图,插入时只能在栈顶进行插入上图中的操作叫做进栈代码实现Status Push(SqStack &s,SDataType e){ SDataType *p;.原创 2022-05-10 21:43:04 · 401 阅读 · 0 评论 -
数据结构之链表实现多项式求和
#include<stdio.h>#include<stdlib.h> typedef struct Node{ float ratio; //系数 int index; //指数 struct Node *next; //下一个指针域}*PNode,*LinkList; LinkList Create_Link(){ LinkList head; PNode p,q; float ratio;//系数 in..原创 2022-05-06 20:56:44 · 1053 阅读 · 0 评论 -
4.数据结构学习之静态链表
1.静态链表的概述我们了解线性表两种存储结构各自的特点,那么,是否存在一种存储结构,可以融合顺序表和链表各自的优点,从而 既能快速访问元素,又能快速增加或删除数据元素。使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间"一对一"的逻辑关系通过一个整形变量(称为"游标",和指针功能类似)维持(和链表类似)。数据存放到数组中时,给各个数据元素配备一个整形变量,此变量用于指明各个元素的直接后继元素所在数组中的位置下标在某些高级语言中,没有指针类型,所以想使用链表,原创 2022-05-03 19:15:01 · 977 阅读 · 1 评论 -
3.数据结构学习之双向链表
(1)双向链表的定义双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。指针域:用于指向当前节点的直接前驱节点;数据域:用于存储数据元素。指针域:用于指向当前节点的直接后继节点;(2).双向链表的建立 同单链表相比,双链表仅是各节点多了一个用于指向直接前驱的指针域。因此,我们可以在单链表的基础轻松实现对双链表的创建。 需要注意的是,与单链表不同,双链表创建过程原创 2022-05-03 16:58:29 · 805 阅读 · 1 评论 -
数据结构C语言学习(1)
此博客为个人的学习记录,如有问题欢迎讨论线性表线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。线性表的特征1.集合中必存在唯一.原创 2022-04-25 22:55:03 · 642 阅读 · 0 评论