DS
zhangbin0027
http://muinlu.cn/
展开
-
线性表的基本操作
使用C语言实现线性表线性表是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列,序列中的每个数据元素,可以是一个数字,可以是一个字符,也可以是复杂的结构体或对象。例如:1,2,3,4,5是一个线性表,A,B,C,D...Z是一个线性表,一列列车的车厢1,车厢2...车厢n是一个线性表。线性表的机内表示法(又称存储结构)有2种,一种是顺序存储结构,另一种是链式存转载 2017-04-15 16:39:25 · 2256 阅读 · 0 评论 -
栈
栈作为一种受限的线性表,同样可以划分为顺序结构存储的栈(这里简称顺序栈)和链式结构存储的栈(这里简称链栈)。一.顺序栈1.1定义栈的顺序存储称为顺序栈,是利用一组地址连续的存储单元存放从栈底到栈顶的元素,同时附设一个指针(top)指示当前栈顶的位置。如图所示:栈的顺序存储类型则可以描述为:typedef struct{ ElemType data原创 2017-09-21 15:04:03 · 527 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度总结
算法的时间复杂度和空间复杂度-总结 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的转载 2017-09-17 17:08:49 · 412 阅读 · 0 评论 -
二叉树
一.定义二叉树是另一种树形结构,其特点是每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且,二叉树有左右之分,其次序不能任意颠倒。 与树类似,二叉树同样采用递归的形式定义。 二叉树是n(n≥0)个结点的有限集合:或者为空二叉树,即n=0;或者由一颗根几点和两个互不相交的被称为根的左子树和右子树组成,左子树和右子树又分别是一颗二叉树。二叉树是有序树,若将原创 2017-08-24 16:09:11 · 624 阅读 · 0 评论 -
查找最近公共祖先结点
问题描述假设指针p和指针q分别指向二叉树中任意两个节点的指针,试编写算法找到p和q的最近公共祖先节点r算法思想因为计算的是公共祖先节点,因此可以考虑使用非递归后序遍历的思想。在非递归后序遍历的算法实现中,栈里面存放了即将入栈的元素的所有祖先节点。 为了方便表示说明,这里使用下图所描述的二叉树来说明。 假设指针p指向节点E,指针q指向节点G。按照正原创 2017-08-25 11:13:42 · 2791 阅读 · 1 评论 -
串
一.顺序串1.1定义串的顺序实现是指分配一块连续的存储单元用于串中的元素,并附设表示串长度的标志。 串的顺序结构存储可以描述为:typedef char ElemType;typedef struct{ ElemType data[MaxSize]; int length;}String;12345123451.2基本操作1.2.1创建串原创 2017-08-13 07:58:00 · 247 阅读 · 0 评论 -
链表
由于顺序表的插入,删除操作需要移动大量的元素,影响了运算效率,由此线性表的链式存储便应运而生。链式存储线性表时,逻辑上连续的元素物理结构上不需要连续,它们彼此可以通过“链”建立起数据元素之间的逻辑关系,因此对于线性表的插入,删除操作并不需要移动元素,只需修改指针即可。一.单链表的定义线性表的链式存储又称为单链表,它是通过一组任意的存储单元来存储线性表中的数据元素。为了建立起数据元素原创 2017-08-03 10:15:01 · 316 阅读 · 0 评论 -
队列
一. 顺序队列1.1定义队列的顺序实现是指分配一块连续的存储单元用于存放队列中的元素,并附设两个指针front和rear分别指示头元素和队尾元素。设队头指针指向队头元素的位置,队尾指针指向队尾元素的下一个位置。队列的顺序存储类型则可以描述为:#define MaxSize 50typedef struct{ ElemType data[MaxSize];原创 2017-08-11 08:42:54 · 408 阅读 · 0 评论 -
题目1517:链表中倒数第k个结点
题目1517:链表中倒数第k个结点时间限制:1 秒内存限制:128 兆特殊判题:否提交:2705解决:1206题目描述:输入一个链表,输出该链表中倒数第k个结点。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和k(原创 2017-07-31 17:54:19 · 327 阅读 · 1 评论 -
经典排序算法
首先回顾下各种排序的主要思路:一. 冒泡排序冒泡排序主要思路是:通过交换使相邻的两个数变成小数在前大数在后,这样每次遍历后,最大的数就“沉”到最后面了。重复N次即可以使数组有序。冒泡排序改进1:在某次遍历中如果没有数据交换,说明整个数组已经有序。因此通过设置标志位来记录此次遍历有无数据交换就可以判断是否要继续循环。冒泡排序原创 2017-10-25 17:53:25 · 205 阅读 · 0 评论