数据结构
this.
这个作者很懒,什么都没留下…
展开
-
队列的实现
队列(Queue)是一种先进先出的结构,它只允许在表的一端插入元素,而在另一端删除元素。队列在操作系统的并发中尤为重要,比如阻塞队列,优先队列等。队列也可以通过线性和链表两种方式实现。这里主要讲如何通过链表来实现队列和基本的队列操作。看看原理图吧: 需要注意的是,既然用链表实现队列,那么链表中必定有头结点,那么队头元素应是头结点指向的下一结点。以下是队列的实现方法:#include <st原创 2016-04-02 10:23:56 · 803 阅读 · 0 评论 -
汇编实现排序——希尔排序
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 以下是汇编实现的代码:S0 SEGMENT STACK DW 20 DUP(?)TOP LABEL WORDS0 ENDSS1 SEGMENTTIP DB "Input ten number and sep原创 2016-06-21 23:22:49 · 3973 阅读 · 0 评论 -
汇编实现排序——冒泡排序
冒泡排序算法的运作如下:(从后往前) 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3.针对所有的元素重复以上的步骤,除了最后一个。 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 以下为实现代码:S0 SEGMENT STACK DW原创 2016-06-21 23:20:32 · 41106 阅读 · 5 评论 -
汇编实现排序——直接插入排序
上一篇实现了简单插入排序的算法,这一篇主要实现直接插入排序算法:S0 SEGMENT STACK DW 20 DUP(?)TOP LABEL WORDS0 ENDSS1 SEGMENTTIP DB "Input ten number and separate the numbers with space:", 0DH, 0AH, 24HARY DW 20 DUP(0)原创 2016-06-21 23:17:42 · 5671 阅读 · 0 评论 -
汇编实现排序——简单选择排序
上阵子重温数据结构,差不多更新到排序。这学期学了汇编语言,其中有几个实验便是实现内部排序算法。以下是实现简单选择排序的程序设计:S0 SEGMENT STACK DW 20 DUP(?)TOP LABEL WORDS0 ENDSS1 SEGMENTTIP DB "Input ten number and separate the numbers with space:",原创 2016-06-21 23:14:28 · 10147 阅读 · 0 评论 -
二叉树递归与非递归遍历
二叉树是一种常见的数据结构。二叉树有以下特点: 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。 二叉树的第i层至多有2^{i-1}个结点; 深度为k的二叉树至多有2^k-1个结点; 对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。谈到二叉树,就不得不提到二叉树的遍历操作。其中,有三种原创 2016-04-03 23:58:50 · 760 阅读 · 0 评论 -
轻松理解KMP算法
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上转载 2016-04-03 20:01:31 · 703 阅读 · 0 评论 -
线性表的存储结构(顺序存储结构)
线性表是最基本、最简单、也是最常用的一种数据结构。线性表有顺序存储结构与链式存储结构两种表示方式,本章主要介绍线性表的顺序存储结构的表示方式。线性表的顺序表示是指用一组地址连续的存储单元依次存储线性表的数据元素。其原理大致如下图所示:![这里写图片描述](http://img.blog.csdn.net/20160319234116142)在此线性表中,可以定义创建线性表,插入、删除元素等操作原创 2016-03-19 23:40:14 · 9810 阅读 · 0 评论 -
线性表的存储结构(链式存储结构)
距上一次写线性表的顺序存储结构已经有一段时间了(详戳http://blog.csdn.net/u010429311/article/details/50933932),这次主要接着来实现线性表的链式存储结构,即我们通常所说的链表。 链表可以用一组任意的存储单元存储线性表的数据元素,而存储数据的这组存储单元可以是连续的,也可以是不连续的。具体看一下图解: 在链表中,我们也可以实现链表的创建、插原创 2016-04-01 16:00:44 · 1549 阅读 · 0 评论 -
双向链表的实现
之前的博客讲到了线性表的链式存储结构,实现了链表的各种操作。但是,单链表有单向性的缺点,为了克服这一缺点,可以尝试实现双向链表。下图是双向链表的结构: 我们也可以实现双向链表的一些基本操作: 以下是实现基本操作的代码:#include <stdio.h>#include <malloc.h>#define OK 1#define ERROR 0#define ElemType原创 2016-04-01 17:19:27 · 765 阅读 · 0 评论 -
栈的基本操作
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。栈是一种很重要的数据结构。我们可以实现栈的基本操作,比如创建栈,出栈,入栈等。先看一下原理图吧: 以下是栈的实现方式:#include <stdio.h>#include <malloc.h>#define OK 1#define ERROR 0#原创 2016-04-01 18:11:06 · 725 阅读 · 0 评论 -
循环队列中判断队满与队空
在引用循环队列前,我们需要了解队列是如何线性实现的。 简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾指针+1,删除元素是头指针-1。但是,我们会发现一个问题,如上面的第四个图,0,1,2三个空间并没有使用。因此,为了占用该空间,我们使用了循环队列来实现。 循环队列原理图: 我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是队空还是队满。为了原创 2016-04-02 11:16:38 · 62793 阅读 · 21 评论