数据结构基础
clearlove推理能手
。。。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线性表之基于数组的实现
欢迎关注,大家共同学习!线性表是有n个元素组成的有限序列,有两种存储结构:顺序存储结构和链式存储结构,这一篇简单介绍顺序存储结构。顺序存储结构的特点:(1)、它的物理顺序和物理顺序一致;(2)、数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现的;由于数组具有以上特点,因此可以基于数组来实现顺序存储结构。先来看看它的定义,我们用结构体来实现;typedef stru原创 2017-10-28 23:34:00 · 449 阅读 · 0 评论 -
栈和队列的应用
栈 队列作为特殊的线性表,应用相当广泛。一般有递归、括号匹配、中缀表达式转后缀表达式、后缀表达式求值、以及树的层次遍历等几个应用方面。以下给出了几个例子供读者自行研读。1、递归以下给出斐波那切数列计算的例子供参考。/** \brief 栈在递归中的调用 * * \param * \param * \return * */#include <iostream>...原创 2018-11-17 18:19:43 · 462 阅读 · 0 评论 -
内部排序算法的总结一(包括冒泡、希尔排序、递归和非递归的快速排序、简单选择排序)
一、冒泡法://冒泡排序void Bubble_Sort(DataType a[],int n){ int i,j; DataType temp; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(a[i].key<a[j].key) ...原创 2018-08-01 22:11:07 · 913 阅读 · 0 评论 -
动态顺序栈和线程安全的堆栈类
1、动态顺序栈固定大小的栈的容量可能随着参数数目的增加或者递归层数的增加而溢出,故此可用动态栈代替,实现思路较为简单,每次元素入栈前判断一下栈容量是否足够,不够的话增加容量,通过栈底指针移动。以下是参考代码:#ifndef DY_STACK_H_INCLUDED#define DY_STACK_H_INCLUDED#include <malloc.h>#include ...原创 2018-07-23 22:28:00 · 508 阅读 · 0 评论 -
图的连通性问题(一)
一、无向图的连通分量和生成树对于无向图,在进行遍历时:若是连通图,仅需从图中任一顶点出发,就能访问图中所有顶点;若是非连通图,需从图中多个顶点出发,每次从一个新顶点出发访问的顶点集序列恰好是各个连通分量的顶点集。⑴ 若G=(V,E)是无向连通图, 顶点集和边集分别是V(G) ,E(G) 。若从G中任意点出发遍历时, E(G)被分成两个互不相交的集合:T(G) :遍历过程中所经过的边原创 2017-11-11 15:17:31 · 848 阅读 · 0 评论 -
最小生成树之Prim算法
如果连通图是一个带权图,则其生成树中的边也带权,生成树中所有边的权值之和称为生成树的代价。1、最小生成树:带权连通图中代价最小的的生成树。2、Prim算法:算法思想:⑴ 若从顶点v0出发构造,U={v0},TE={};⑵ 先找权值最小的边(u,v),其中u∈U且v∈V-U,并且子图不构成环,则U= U∪{v},TE=TE∪{(u,v)} ;⑶ 重复⑵ ,直到U=V为止。则原创 2017-12-03 16:37:23 · 496 阅读 · 0 评论 -
队列的概念和实现
这一篇简单介绍一下队列的一些基本概念和基本操作一、队列的基本概念:队列:属于运算受限的线性表,是一种先进先出的线性表。只允许在表的一端进行插入,在表的另一端进行删除。对首:允许进行删除操作的一端。对尾:允许进行插入操作的一端。二、队列的结构和实现:1、队列的顺序表示和实现,分为静态和动态,和栈类似。以下是静态顺序队列typedef struct queue{原创 2017-11-04 18:32:40 · 1206 阅读 · 0 评论 -
栈的概念和实现
栈是应用很广泛的数据结构,属于操作“受限”的线性表。一、栈的基本概念栈:是限制在表的一端进行插入和删除操作的线性表。又称为后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性表。栈顶:进行操作的一端,用栈顶指针来指示栈顶元素。栈底:固定端。二、栈的结构和操作1、栈的顺序存储表示:顺序存储又分为静态顺序栈和动态原创 2017-11-03 22:43:10 · 290 阅读 · 0 评论 -
图的遍历
图的遍历图的遍历有深度优先搜索算法和广度优先搜索算法1、深度优先搜索:(是一个递归算法)⑴ :从图中某个顶点vi出发,访问vi;然后找到vi的一个邻接顶点vi1 ;⑵:从vi1出发,深度优先搜索访问和vi1相邻接且未被访问的所有顶点;⑶:转⑴ ,直到和vi相邻接的所有顶点都被访问为止 ⑷ :继续选取图中未被访问顶点vj作为起始顶点,转(1),直到图中所有顶点都被访问为止原创 2017-11-09 17:00:25 · 572 阅读 · 0 评论 -
图之基于邻接链表的实现
上一篇介绍了图的基本概念和基于邻接矩阵的表示方法,这一篇介绍一下基于邻接链表的实现方法我们定义头结点作为图的顶点的存储结构,头结点包含数据域、顶点的度、邻接顶点单链表的结点指针;用单链表作为顶点的邻接顶点的存储形式,包含邻接顶点在头结点表中的下标位置权值、以及指向下一表结点的指针;看这个图理解结构#ifndef LINKGRAPH_H_INCLUDED#define LINK原创 2017-11-08 11:30:36 · 730 阅读 · 0 评论 -
图的概念和基于邻接矩阵的实现
这一篇简单介绍下一种更为复杂的数据结构------图,图是一种比线性表和树更为复杂的数据结构。图结构是研究数据与数据之间多对多的关系。一、图的基本概念1、一个图定义为一个偶对(V,E),记为G=(V,E);其中V是顶点的非空有限集合,记为V(G),E是无序集V&V的一个子集,记为E(G),其元素是图的弧。2、弧:表示两个顶点之间存在一个关系,用顶点偶对表示,通常根据顶点偶对将图分为有向原创 2017-11-08 00:41:13 · 493 阅读 · 0 评论 -
二叉树的链式存储和基本操作
上一篇介绍了二叉树的顺序存储结构,这一篇介绍链式存储结构,定义结点由三部分组成:数据域、左孩子结点指针、右孩子结点指针;下边是实现代码:typedef struct Btree{ ElemType data; struct Btree *Lchild; struct Btree *Rchild;}BTree;//initBTree* BTree_Init(Ele原创 2017-11-07 11:33:41 · 1352 阅读 · 0 评论 -
线性表之基于链表的实现
欢迎关注,大家共同学习!上一篇介绍了线性表的顺序存储结构和基于数组的实现,这篇介绍线性表的链式存储结构。链式存储:用一组任意的存储单元存储线性表中的元素;特点:(1)存储单元可以是连续的,也可以是零散的;(2)链表中结点的物理顺序和逻辑顺序不一定相同。由于存储单元不一定是连续的,为了正确的表示结点之间的逻辑关系,每个结点除了存储数据信息外,还需要存储结点的直接后继结点的地址原创 2017-10-29 15:37:06 · 368 阅读 · 0 评论 -
二叉树的顺序存储和基本操作
一、二叉树的定义:二叉树是n个结点的有限集合,当n=0时称为空树,否则:(1)有且只有一个特殊的被称为树的根结点;(2)若n>1时,其余的结点被分为两个互不相交的子集,称为左右子树,并且左右子树都是二叉树;可以看出二叉树的定义是递归的。二、二叉树的性质:(1)在非空二叉树上,第i层至多有2^(i-1)个结点;(2)深度为k的二叉树至多有2^k-1个结点;(3)对任何一个二叉树,原创 2017-11-06 15:47:47 · 12832 阅读 · 4 评论 -
二叉排序树和霍夫曼编码树
1、二叉排序树这里不再赘述概念,直接给出二叉排序树的查找、插入、构造、删除等操作的实现。读者可以对照概念自行熟悉。需要注意的是删除操作较为复杂,包括三种类型,请仔细辨别。#ifndef BSTREE_H_INCLUDED#define BSTREE_H_INCLUDED/** \brief 二叉排序树的基本操作 * * \param * \param * \return *...原创 2018-11-17 18:50:57 · 301 阅读 · 0 评论
分享