数据结构与基本算法
数据结构与基本算法
劉胡來
这个作者很懒,什么都没留下…
展开
-
Object-c基本排序(快排,直接选择,直接插入)
直接插入排序算法思想:插入排序首先考虑数组的前两个元素,即data[0]与data[1],如果次序颠倒了,就交换。然后考虑data[2],将其插入到前面已经排序好的位置上,依次到最后一个元素为止。直接插入排序代码如下:-(void)insertSort{ printf("直接插入排序之前数组结果为:\n"); [self.array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){ .原创 2020-05-14 18:17:54 · 272 阅读 · 0 评论 -
Object-c 二叉树的遍历(前序、中序、后序以及非递归遍历)
二叉树的结构二叉树是树的特殊形式,它包含结点值(可空),左孩子结点(可空),右孩子结点(可空)。空树即三者均为空,当任一结点只有左孩子或右孩子时,这颗树的结构就与链表类似了。定义一个二叉树的结点代码清单如下:#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface TreeNode : NSObject@property(nonatomic,assign) NSInteger value;@pro.原创 2020-05-12 21:01:00 · 11895 阅读 · 0 评论 -
Object-C 栈的应用实现两个大数相加
对于两个非常大的数,如1233333333333333333333333333+9090909090909090909090090909909090909090909090是无法直接相加的。因为已经超过了整型变量的限制可以使用下面代码获得基本类型在运行平台的存储范围:NSLog(@"72----------byte:%ld max :%ld min:%ld",sizeof(NSInteger),NSIntegerMax,NSIntegerMin);为了解决这个问题,可以将这种非常大的数据看成.原创 2020-05-11 16:46:48 · 355 阅读 · 0 评论 -
Object-c 符号匹配的实现
基本思想:对于读入的字符串,按顺序依次读取一个字符,如果该字符为左分隔符,则将其存入栈中。如果发现一个右分隔符,则与栈中弹出的元素相比较。如果二者相互匹配,则继续处理将标志match修改为true。反之中断处理并提示出错同时将标志macth修改为fasle。到达字符串末尾时检测栈是否为空与标志的状态得到匹配的最终结果BOOL result = stack.isEmpty() && 核心代码如下:-(BOOL)match:(NSString *)str{ BOOL.原创 2020-05-11 14:49:00 · 227 阅读 · 0 评论 -
Object-c 实现迷宫
关于本例子中用到的栈结构请参看:https://www.jianshu.com/p/e535df1a86d8迷宫分析:迷宫通常是用一个二维数组来表示,通路以0表示,不通以1表示,出口位置以e表示,起点为s表示(如下图所示)。1111111110011000e1100s11111111程序中使用1个栈与一个与迷宫数组规格一样的数组,一个用来有存储下一步待走的索引,以上图为例当前s在二维数组中的索引..原创 2020-05-10 19:54:59 · 177 阅读 · 0 评论 -
Object-c 实现一个栈
栈释义栈是一种线性数据结构,存储以及查找数据时只能访问栈的一端。类似于餐厅的盘子,新盘子放到这一叠盘子最上面,取的时候也是从最上面开始。最后放的盘子的也是最先被取走的那个。因此栈称为后进先出(Last in First Out )。下列演示了一系列的栈的操作:栈中至少有一个元素的时候才能取出,否则应当给予空栈的提示。只有空间足够的时候才能再添加一个元素,否则应当给予栈满的提示。因些根据这些状态对于栈而言通常操作包括:栈空判断栈满判断弹出栈顶元素入栈操作本例使用数组实现.原创 2020-05-10 18:19:04 · 198 阅读 · 0 评论 -
object-c 队列的两种实现方式(数组+链表)
队列是一个简单的等待序列,入队(新添加)的元素放在尾部,出队(删除的元素)从第一个开始。队列是先进先出结构(First In First out)构造一个队列通常需要包含以下几个接口初始化,这个过程用来设定队列的大小。入队出队判断队空判断队满实现方式一:数组实现例:有一个序列 1,2,3,4,5依次入队。在队列的表现形式如下:初始时,假设队列空间大小为5。1入队时:|1|0|0|0|0|2入队时:|1|2|0|0|0|3入队时:|1|2|3|0|0|4入队时:|.原创 2020-05-09 17:15:23 · 819 阅读 · 0 评论 -
Object-c单链表的操作
如果一个节点指向另一个节点的指针作为数据成员,那么多个这样的结点可以连接起来用一个变量能够访问整个节点序列。这样的节点序列就是最常用的链表实现方法。链表是一种由节点组成的数据结构,每一个节点都包含某些信息及指向链表中的另一个结点的指针。如果序列中的节点只包含后继节点的链接,该链表则称为单向链表。链表包含两个数据成员:info 与 next。info用于存储数据,next用于将节点链接起来...原创 2020-05-07 15:29:38 · 269 阅读 · 0 评论 -
快速排序 python从java版本翻译过来:
快速排序 python从java版本翻译过来原创 2017-01-02 16:28:20 · 375 阅读 · 0 评论 -
使用栈来演示括号匹配的算法
方法:void StrMacthByStack(string s){ stack left; while (!s.empty()) { string character=s.substr(0,1); //取字符串首字母 s=s.substr(1); //原创 2016-10-07 14:32:21 · 1061 阅读 · 0 评论 -
c++实现堆排序--从java版本翻译过来
调整堆:void AdjustHeap(int a[],int i,int size){ int leftChild = 2 * i; int rightChild = 2 * i +1; int adjustIndex = i; //记录调整的位置 if(i < size/2) { if(leftChild = a[adjustIndex]) { adjust原创 2016-10-06 18:38:41 · 199 阅读 · 0 评论 -
直接插入排序
package insertsort;/** * 直接插入排序 * @author Administrator * *设数组为a[0…n-1]。 *1初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1 *2.将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。 *3.i++并重复第二步直到i==n-1。排序完成。 */public cla原创 2016-09-29 19:58:19 · 197 阅读 · 0 评论 -
直接插入排序
package directinsertsort;/** * 直接插入排序 * @author Administrator * */public class DirectInsertSort { public void Sort(int[] array) { for(int i =0; i<array.length-1;i++) { int k = i; /原创 2016-09-29 19:23:47 · 216 阅读 · 0 评论 -
BFS-图的广度优先遍历
bfs类:package com.bfs;import java.util.LinkedList;public class BFS { private char[] vertices; //存储顶点信息 private int[][] arcs; //存储边 private boolean[] visited; //顶点是否访问过 private int vexnum原创 2016-09-27 21:33:02 · 441 阅读 · 0 评论 -
DFS采用栈实现非递归
DFS核心类:package com.dfs;import java.util.Stack;/** * 图的DFS 非递归遍历算法 * @author Administrator * */public class DFS { private char[] vertices; //存储顶点信息 private int[][] arcs; //存储边 private原创 2016-09-27 20:34:09 · 4524 阅读 · 0 评论