数据结构和算法
Sandeldeng
这个作者很懒,什么都没留下…
展开
-
算法:快速排序以及第k小元素的线性选择算法
简要介绍下快速排序的思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度为O(nlogn)。一.《data structure and algorithm analysis in c》中的实现,测试过,觉得该说明的已经注释#include转载 2016-11-01 19:36:31 · 579 阅读 · 0 评论 -
算法:图解最小生成树之普里姆(Prim)算法
1)算法的基本思想: 普里姆算法的基本思想:普里姆算法是一种构造最小生成树的算法,它是按逐个将顶点连通的方式来构造最小生成树的。从连通网络N = { V,E }中的某一顶点u0出发,选择与它关联的具有最小权值的边(u0, v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u,v),把该边加入到生成树的边集TE中,把它的顶点加入到集转载 2016-11-02 16:09:53 · 5651 阅读 · 0 评论 -
数据结构:字符串的基本操作
字符串(string)是由0个或多个字符组成的有限序列。一般使用顺序存储结构,末尾以’\0’表示结束,但不计入字符串的长度。 示例程序:(改编自《大话数据结构》#include<iostream>using namespace std;#define MAXSIZE 20typedef char String[MAXSIZE + 1]; //以'\0'结尾/* 生成一个串*/bool转载 2016-11-01 21:26:10 · 4951 阅读 · 1 评论 -
数据结构:队列的链式存储结构
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。为了操作上的方便,我们将队头指针指向链队列的头节点,而队尾指针指向终端节点。空队列时,front和rear都指向头节点。 示例程序:(改变自《大话数据结构》)#include<iostream>using namespace std;typedef int ElemType;typedef struc转载 2016-11-01 21:21:49 · 471 阅读 · 0 评论 -
数据结构:队列的顺序存储结构(循环队列)
队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。是一种先进先出的线性表(FIFO)。允许插入的一端称为队尾,允许删除的一端称为队头。我们在《栈的顺序存储结构》中发现,栈操作的top指针在Push时增大而在Pop时减小,栈空间是可以重复利用的,而队列的front、rear指针都在一直增大,虽然前面的元素已经出队了,但它所占的存储空间却不能重复利用。但大多数程序并不是这样使转载 2016-11-01 21:14:39 · 3222 阅读 · 0 评论 -
数据结构:栈的链式存储结构
当单链表限定只能在头部进行插入和删除操作的时候,即为链栈,一般我们会将单链表的头指针和栈的栈顶指针top合二为一,通常对链栈来说,是不需要头节点的,因为我们维护了栈顶指针。对于链栈来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间,对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是top = = NULL的时候。 示例代码:#include <iostream>using转载 2016-11-01 20:58:26 · 504 阅读 · 0 评论 -
数据结构:两栈共享存储空间
数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈为栈的末端,即下标为数组长度n-1处。这样,如果两个栈增加元素,就是两端点向中间延伸。当top1 + 1 == top2 的时候为栈满。 示例代码:(改编自《大话数据结构》)#include <iostream>using namespace std;#define MAXSIZE 20typedef in转载 2016-11-01 20:38:45 · 633 阅读 · 0 评论 -
数据结构:栈的顺序存储结构
栈(stack)是限定在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。 示例程序:(改编自《大话数据结构》)#include <iostream>using namespace std;#define MAXSIZE 20typedef int转载 2016-11-01 20:33:16 · 442 阅读 · 0 评论 -
数据结构:静态链表
首先我们让数组的元素都是由两个数据域组成,data和cur。也就是说,数组的每一个下标都对应一个data和一个cur。 数据域data用来存放数据元素,也就是通常我们要处理的数据;而游标cur相当于单链表中的next指针, 存放该元素的后继在数组中的下标。我们把这种用数组描述的链表叫做静态链表。 数组的第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标;而数组的最后一个元素的转载 2016-11-01 20:24:10 · 889 阅读 · 0 评论 -
数据结构:线性表之链式存储结构
为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据ai,除了存储其自身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。这两部分信息组成数据元素ai的存储映像,称为结点(Node)。N个结点链结成一个链表,即为线性表(a1,a2,…,an)的链式存储结构,因为此链表的每个节点中只包含一个指针域,所以叫做单链表。我们把链表中的第一个结点的存储位置叫做头指针,,为转载 2016-11-01 20:06:05 · 396 阅读 · 0 评论 -
数据结构:线性表之顺序存储结构
线性表的数据对象集合为 {a1,a2,….an},每个元素的类型均为Datatype。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。 线性表的顺序存储结构的优缺点: 优点:无须为表示表中元素之间的逻辑关系而增加额外的存储空间;可以快速地存取表中任一位置的元素O(1) 缺点:插入和删除操转载 2016-11-01 19:54:21 · 397 阅读 · 0 评论 -
算法:图解最小生成树之克鲁斯卡尔(Kruskal)算法
算法基本思想:设无向连通网为G=(V, E),令G的最小生成树为T=(U, TE),其初态为U=V,TE={ },然后,按照边的权值由小到大的顺序,考察G的边集E中的各条边。若被考察的边的两个顶点属于T的两个不同的连通分量,则将此边作为最小生成树的边加入到T中,同时把两个连通分量连接为一个连通分量;若被考察边的两个顶点属于同一个连通分量,则舍去此边,以免造成回路,如此下去,当T中的连通分量个数为1时转载 2016-11-02 16:35:35 · 2458 阅读 · 0 评论