数据结构
Shijia Yin
这个作者很懒,什么都没留下…
展开
-
双向循环链表的操作
一、双向循环链表的实现,如果理解了前面的双向链表和循环链表,那么理解双向循环链表是一件很简单的事情,这里的实现是在我之前的双向链表的基础上,将尾结点的next指向头结点,将头结点的pioneer指向尾结点,就可以实现双向循环链表了。typedef struct DNode{ int data; struct DNode *front; struct DNode *nex...原创 2019-05-26 14:20:36 · 221 阅读 · 0 评论 -
优先队列的基本思想与简单实现
在我的一篇文章队列中,我简单地介绍了什么是队列,以及队列有哪些操作,一个数据结构能够被称为队列,它必须具备两个功能限制:数据只能在队尾插入,数据只能在队首删除。这两个功能限制注定了它只能顺序地处理队列里面的任务,但是有时候一个队列里的任务是有轻重缓急之分的,这样顺序处理显然是不合理的,我们要有选择地优先处理某个些任务,优先队列就是这样一种可以有选择地处理队列中的任务的队列。每一个数据结构都有一堆...原创 2019-06-08 10:08:18 · 942 阅读 · 0 评论 -
散列表的基本思想
假设我们现在要存储五个人的身高。如下表姓名身高张三170李四178王五173小明175小红167我们为这五个成绩创建了一个数组typdef struct height_name{ char name[]; int height;}height_structure;height_structure array[5];我们想...原创 2019-06-07 11:27:32 · 1343 阅读 · 0 评论 -
二叉查找树
二叉查找树在查找中有着重要的应用,一个二叉树变成一个二叉查找树后所具有的性质是:对于树中的所有结点,它的左子树中的所有关键字的值小于该结点的关键字值,它的右子树中所有关键字的值大于该结点关键字的值。这就是二叉查找树。自己脑补一下什么是二叉查找树,什么是普通二叉树。由于树的递归定义,通常是递归地编写这些操作的例程。下面是二叉查找树的操作例程,注:由于这里的所有操作函数都使用了递归,所以我把这些代码...原创 2019-06-01 21:10:13 · 100 阅读 · 0 评论 -
队列
队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。--------------------------------------------------------------------------------------...原创 2019-05-18 23:09:36 · 514 阅读 · 0 评论 -
单链表操作
一、创建一个链表我们要准备三个指针:head,previous,pioneer,第一个头指针,链表被创建以后,它起着对链表的唯一标识作用,previous指针和pioneer指针用来在创建链表的过程中使用,具体使用方法,看下面代码node *create_list(int n){/********************initialize*********************/ ...原创 2019-05-24 08:39:33 · 211 阅读 · 0 评论 -
单向循环链表操作
循环链表的好处:1、任何节点都可以做为头节点。 可以从任何节点开始进行链表的遍历。只要当第一个节点被重复访问时,则意味着遍历结束。2、用于实现队列数据结构是很有帮组的。 如果使用循环链表,则不需要为了队列而维护两个指针(front以及rear)。只需要维护尾节点一个指针即可,因为尾节点的后向节点就是front了。3、循环链表常用于各应用程序中。 例如,当一台PC运行多个应用程序时,操作系统通...原创 2019-05-24 09:32:18 · 392 阅读 · 0 评论 -
双向链表的操作
一、双向链表的创建双向链表的结点结构体有两个指针,一个指向前向结点,一个指向后继节点,创建步骤和单向链表差不多typedef struct DNode{ int data; struct DNode *front; struct DNode *next;}DNode *create_DNode_list(int n){ int a, i; DN...原创 2019-05-24 09:40:31 · 124 阅读 · 0 评论 -
栈的实现与操作
栈的实现也有两种方式:数组方式、和链表方式,我们前面知道表也是两种方式,但是由于表经常要在表的中间删除或插入数据,所以用数组实现不是一种很好的选择,我们通常采用结点实现。但是在栈中,这种情况发生了变化,栈是一种LIFO性质的线性表,它不允许在中间插入数据。而且事先知道数据数量的应用场景也经常出现(如果不知道,那就用链表),所以我们下面将讲解栈的链表和数组实现。栈的链表实现一、创建栈这和创建一...原创 2019-05-30 14:08:59 · 221 阅读 · 0 评论 -
AVL平衡二叉查找树
概述本文主要分成两部分:AVL平衡二叉树介绍源代码递归逻辑分析一、AVL(Adelson-Velskii-Landis)平衡二叉查找树介绍为了简便起见,后面我们把AVL平衡二叉查找树简称为AVL树。什么是AVL树,一句话:一棵AVL树是每个节点的左子树和右子树的高度最多相差1的二叉查找树。在下图中,左边是AVL树,右边不是,因为根结点的左子树的高度为2,但右子树的高度为0,两者相...原创 2019-06-02 17:55:00 · 213 阅读 · 0 评论