
数据结构
文章平均质量分 55
J.Tabibito
这个作者很懒,什么都没留下…
展开
-
中缀表达式计算
思路:每次都优先寻找最小优先级的运算符位置,然后分割表达式,例如表达式1+(40/2+7-3*2):1.优先寻找最小优先级的运算符位置为第一个'+'号的位置,为1。2.以第一个'+'号位置分割字符串为1+,(40/2+7-3*2)。3.判断当前字符串是否可再分,如果是不可分割字符串,则计算出当前运算符的位置中的数字,返回这个数字。否则,继续返回第一步继续计算左串和右串。4.将不可再分的结果进行基本四则运算。代码如下:#define MAXPRI 0x0FFFFFFEintca原创 2021-05-04 19:14:24 · 481 阅读 · 0 评论 -
[LeetCode]: Swap Nodes in Pairs方法介绍
Given alinked list, swap every two adjacent nodes and return its head.You maynotmodify the values in the list's nodes, only nodes itself may be changed.Example:Given 1->2->3->4You s...原创 2020-01-14 16:01:13 · 157 阅读 · 0 评论 -
查找算法之插值查找
插值查找基于二分查找进行改进,将从中间开始的思想转变为确定key所在的区间查找。这种查找方式要求是数列要有序。插值查找平均时间复杂度为O(loglogn),最坏情况为O(n)。 插值查找mid=low+(high-low)*(key-arr[low])/(arr[high]-arr[low]);(key-arr[low])/(arr[high]-arr[low])求出了key占区间的...原创 2019-08-30 11:18:20 · 397 阅读 · 0 评论 -
对称平方数
问题描述:打印所有不超过n(n<256)的,其平方具有对称性质的数。如11*11=121。分析:对称性质就是对这个数交换低位和高位,得到新的数和原数相等。解题思路:直接将低位放在高位,高位放低位求解。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <...原创 2019-04-06 21:33:54 · 333 阅读 · 0 评论 -
8皇后问题
问题描述:在8*8的一个棋盘上,在不同行,列,对角线中填入一个位置,使得其不重复。分析:在第i行,j列的结点上,放入第k个皇后(k表示行),那么,使得不同行,列的条件为 i != k && j != a[k],使得其不同斜对角线的条件为 (i - j)!= k - a[k] && (i + j) != k + a[k]。解题思路:回溯法:1. 非递归的方式...原创 2019-04-09 21:15:33 · 181 阅读 · 0 评论 -
后缀表达式计算
问题描述:计算机很难处理中缀表达式的计算,即我们的思维想的表达式,所以应该把中缀表达式转换为后缀表达式对输入式进行计算。分析:先把中缀表达式转换为后缀表达式,则取字符串中的每个字符进行判断;对于一个运算符如果优先级低于操作符栈中的栈顶字符,则把栈中的其它字符全部输出到新的字符串中;否则把这个运算符加入到操作符栈中。解题思路:计算时,取新字符串中的数字放入操作数栈中,读到操作符时,从栈中取出...原创 2019-04-07 20:53:02 · 318 阅读 · 0 评论 -
排序算法之堆排序
堆排序的思想基于堆的形式,堆是一个完全二叉树。首先,1.将数组构造为大顶端表示的树结构;然后,2.将树的根和从最后的叶子节点开始的位置依次交换;3.将新的树执行第2步。最后得到一个排序好的数组。static voidconstruct_big_heap(int set[], int length, int idx) { int temp = set[idx]; for (int i =...原创 2019-03-30 22:48:13 · 114 阅读 · 0 评论 -
排序算法之插入排序
插入排序假设首元素已经排好序了,依次取下一个元素(key),和前一个元素进行比较;当前一个元素比这个key值大,则将前一个元素向后移动一位,直到key值放在它的位置上。重复这个行为,直到获得到一个已经排好序的数组结束。// 非递归void insert_process(int set[], int length) { int start = 0; int temp = set[sta...原创 2019-03-30 17:26:45 · 135 阅读 · 0 评论 -
排序算法之归并排序
归并排序的思想也是分治,每一次排序开始都将数组分成两段,比较相邻两个元素的大小再和其它子段合并;合并的过程也是一样,先比较两个已经排好序的子段的元素各大小放到一个新的数组中;最后的结果就是一个排好序的数组。// 递归voidmerge_region(int set[], int low, int middle, int height) { int index1 = low; int ...原创 2019-03-30 17:18:36 · 100 阅读 · 0 评论 -
排序算法之快速排序
快速排序的思想是分治,先选择一个基准值,再从前(front)向后(back)找一个比基准值大的数,从向后向前找一个比基准值小的数,交换位置。最后基准值的位置是front和back相等时的位置,再进行交换。这样,基准值左边的数都比它小,右边的数都比它大,再分别对左右两边的数进行快排。// 快速排序的基本思路static intdo_quick_sort(int set[], int lef...原创 2019-03-19 12:11:06 · 148 阅读 · 0 评论 -
排序算法之选择排序
选择排序是在循环开始,选择一个key,进行比较,找到一个最小值,把当前最小值的位置记录为key。最后,进行交换。voidcheck_sort(int set[], int length) { int key = 0; for (int i = 0; i < length - 1; i++) { key = i; /*for (int j = i + 1; j < l...原创 2019-03-19 11:55:27 · 141 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序通过每一次循环,都对数组中相邻的两个元素大小进行比较,按照规则实现数值的冒泡排列。voidbubble_sort(int set[], int length) { int temp = 0; for (int i = 0; i < length; i++) { for (int j = 0; j < length - 1 - i; j++) { if (s...原创 2019-03-18 09:02:56 · 95 阅读 · 0 评论 -
n叉树 数据结构
树:树有多种: 二叉树, 三叉树, 四叉树....n叉树.每一个树中的元素, 称为树的节点,起始元素称为根节点,显示了一个层次关系的集合. 每一个层次之间又形成了新的子树.树的重要概念1.> 度: 节点的子树个数叫做这个节点的度.2.> 叶子(终端节点): 度为0的节点称作是叶子, 通俗的说就是这个节点没有子树了, 那这个节点就是一片叶子.3.> 分支节点: 就是度不为0的节点...原创 2018-04-29 19:49:23 · 3308 阅读 · 0 评论 -
链表 数据结构
链表, 一种抽象数据类型(ADT)的存储方式.通过链式的动态存储, 用的时候创建节省空间.想要删除某一个不想要的数据也更简单. 当找到这个节点的时候, 通过找到前驱节点, 将前驱节点与后继节点相连再把当前节点释放掉就可以了.同样数据增改也很轻松.遍历, 不需要修改数据, 所以使用一级指针遍历就可以了voidTransList(struct ListNode* header) { struct ...原创 2018-04-18 20:51:33 · 250 阅读 · 0 评论 -
Hash表 数据结构
Hash 表key: valuekey 保存信息的唯一标识将char*类型的key转化为int型作为寻找信息的方式假设有10000个人, 分成100个表保存信息, 每个表保存100个人使用Hash算法对key做唯一标识计算// main.cpp#include <stdio.h>#include <stdlib.h>#include <string.h>...原创 2018-04-14 21:10:41 · 286 阅读 · 0 评论