数据结构与算法
tzshlyt
不积跬步,无以至千里。
展开
-
【数据结构与算法】(一) c 语言实现数组的简单操作
//// main.c// TestArray//// Created by lan on 16/2/28.// Copyright © 2016年 lan. All rights reserved.//#include #include #include #include struct Arr { int *pBase; // 存储的是数组第一个元素的原创 2016-03-09 23:01:53 · 685 阅读 · 0 评论 -
队列
队列要求一个数组,删除第一个元素,将第二个元素放到末尾,直到删除全部元素,得到删除的顺序。思路定义变量 head记录队首和变量tail记录队尾下一个位置,head++;删除队首元素,q[tail]=x;tail++;队尾添加元素。代码#include <stdio.h>#define LEN 100int main(){ int head, tail; int a[LEN] =原创 2016-12-01 22:35:39 · 269 阅读 · 0 评论 -
栈--判断回文字符串
栈–判断回文字符串思路将字符串的前半部分依次压栈,再依次出栈后和字符串后半部分一一比较。代码#include <stdio.h>#include <string.h>#define LEN 8int main(){ char a[LEN] = "abcddcba"; char s[LEN]; int i, len, mid, next, top; len = L原创 2016-12-01 22:36:39 · 1100 阅读 · 0 评论 -
宝岛探险--着色法
宝岛探险–着色法要求0代表海洋,1~9代表陆地,飞机降落在(5, 7)处,开始探索,统计探索的面积(格子数)。思路从(5, 7)处开始广度优先搜索,被加入队列的点的总数就是小岛面积。bfs代码#include <stdio.h>#define N 10#define M 10int a[N][M] = { {1, 2, 1, 0, 0, 0, 0, 0, 2, 3}原创 2016-12-04 15:22:15 · 535 阅读 · 0 评论 -
水管工游戏--dfs的应用
水管工游戏要求如图只有两种管道,求如何摆放让管道从左上角到右下角连通?0代表树木,1~6代表管道的不同摆放方式,为了程序处理方便,将进水口在左边用1表示,上边用2表示,右边用3表示,下边用4表示。 思路使用深度优先搜索解决,先判断当前管道的类型,然后根据进水口的方向,决定下一个管道的位置和进水口的方向。使用栈保存路径。代码#include <stdio.h>#define N 5#define原创 2016-12-04 17:47:40 · 692 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
深度优先搜索和广度优先搜索要求分别使用深度优先搜索和广度优先搜索遍历下面中的图。思想深度优先遍历思想:首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未被访问过的顶点,当没有未访问过的顶点式,则回到上一个顶点,继续探索访问别的顶点,直到所有的顶点都被访问过。广度优先遍历思想:首先以一个未被访问过的顶点作为起始顶点,访问其所有相邻的顶点,然后对每个相邻的顶点,再访问它们相邻的未被访问过的顶点原创 2016-12-04 21:40:14 · 624 阅读 · 0 评论 -
最少转机--图的广度优先遍历
最少转机–图的广度优先遍历要求求城市1到城市5最少转机数? 思路同样使用图的邻接矩阵存储法存储地图。使用广度优先遍历求解,先将城市1加入队列,然后从队列取出,查找城市1可以到达的城市并依次加入队列,在从队列中取出一个城市继续查找,相当于每次推进了一步,找到城市5,程序结束。代码#include <stdio.h>#define N 6#define M 6int a[N][M] = {原创 2016-12-05 23:13:18 · 1148 阅读 · 0 评论 -
城市地图--深度优先遍历最短路径
城市地图–深度优先遍历最短路径要求求城市1到城市5最短路程? 思路同样使用图的邻接矩阵存储法存储地图,注意这次是有向图。使用深度优先遍历求解。代码#include <stdio.h>#define N 6#define M 6int a[N][M] = { { 0 }, { 0, 0, 2, -1, -1, 10},原创 2016-12-05 22:59:18 · 4908 阅读 · 0 评论 -
Floyd-Warshall算法--求任意两点最短距离
Floyd-Warshall算法要求求任意两点之间最短的路径? 思路使用之前学习的广度优先搜索或深度优先搜索对每两个点都进行一次搜索,共进行n^2次。 本次使用方法:引入中转点k,如果i到k的距离 + k到j的距离 < i到j的距离,更新i到j的最短距离,将每个点做为中转点更新距离后就可以得到任意两点最短距离。代码#include <stdio.h>#define N 5#define M原创 2016-12-06 23:56:45 · 2905 阅读 · 0 评论 -
【Lintcode】寻找峰值
描述你给出一个整数数组(size为n),其具有以下特点:相邻位置的数字是不同的 A[0] < A[1] 并且 A[n - 2] > A[n - 1] 假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。java codeclass Solution { /** * @param A: An integers array.原创 2017-07-05 16:22:21 · 459 阅读 · 0 评论 -
小猫钓鱼--栈和队列的使用
小猫钓鱼–栈和队列的使用思路q1和q2手中的牌分别是一个队列,桌面上的牌是一个栈,用book数组标记桌面上出现的牌。代码#include <stdio.h>struct queue{ int data[1000]; int head; int tail;};struct stack{ int data[10]; int top;};int main()原创 2016-12-01 22:38:02 · 1953 阅读 · 0 评论 -
炸弹人--枚举
炸弹人–枚举要求‘#’代表墙,‘G’代表敌人,‘.’代表空地,炸弹安放在空地上,炸弹威力不能穿过墙,哪里安放炸弹炸死的敌人最多?思路对每个点进行枚举,上下左右统计可消灭敌人的数量。代码#include <stdio.h>int main() { char a[13][13] = { "#############",原创 2016-12-01 22:40:28 · 784 阅读 · 0 评论 -
火柴棍等式--枚举
火柴棍等式要求用m(m <= 24)根火柴棍拼出A+B=C的等式,数字非零,则最高位不能是0,加号和等号各用了两根火柴棍,问可以拼出多少个不同等式?思路枚举法代码#include <stdio.h>#define M 18int fun(int x) { int a[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; int sum = 0; whil原创 2016-12-04 12:10:48 · 700 阅读 · 0 评论 -
深度优先搜索--DFS
深度优先搜索dfs思想解决当下如何做,下一步如何做和当下如何做一样。要求求1~n的全排列。代码#include <stdio.h>#define N 3int a[10];int book[10];void dfs(int step) { int i; if (step == N + 1) { for (i = 1; i <= N; ++i) {原创 2016-12-04 12:12:20 · 357 阅读 · 0 评论 -
广度优先搜索--BFS
广度优先搜索要求迷宫另外一种解法求迷宫中从坐标(0, 0)到(3,2)最少步数?0代表路,1代表障碍物,2标识走过的路径,3代表目标点。思路将每走一步的下一步可能的值依次加入队列,在从队列中取出走下一步,重复以上动作,直到找到目标。代码#include <stdio.h>#define N 5#define M 4int a[N][M] = { {0, 0, 1,原创 2016-12-04 12:13:38 · 349 阅读 · 0 评论 -
再解炸弹人--广度搜索和深度搜索
再解炸弹人要求之前炸弹人通过枚举统计每个点消灭敌人数,包括了小人不能直接到达的位置,现在要求小人从(3,3)位置开始,有敌人的地方小人不能通过,统计消灭敌人数。思路先使用广度优先搜索或者深度优先搜索找出小人可以通过的点,再统计这些点消灭敌人数bfs代码#include <stdio.h>#define N 13#define M 13char a[13][13] = {原创 2016-12-04 12:16:34 · 607 阅读 · 0 评论 -
Dijkstra算法--一个点到其余点最短路径
Dijkstra算法要求求一个点(源点)到其余各个顶点的最短路径。 思路先将源点到其余各个点的路径列出来dis[],找到最小值,这个最小值就是源点到这一点u的最短路径,并标记已经找出,再以这个点开始,依次遍历到其它点v,如果这个点u到其它点v的距离加上源点到这个点距离(也就是刚刚找出的最短距离)还小于源点直接到点v的距离dis[v],更新数组dis[v],再在dis[]找出最小值并标记,此时又求出原创 2016-12-09 23:23:46 · 5569 阅读 · 0 评论 -
快速排序
快速排序思路先找一个基准数,通常是第一个,将所有比基准数大的放在右边,比基准数小的放在左边,然后再排序左边部分和右边部分。如何找到这个位置呢,定义两个指针i,j,i指向第一个,j指向最后一个,j从后往前移动,直到找到小于基准数的位置停下,然后i向后移动直到找到大于基准数的位置,交换两个数,j和i继续按什么方法移动,直到i和j相遇,就是基准数的位置。代码#include <stdio.h>#defin原创 2016-11-30 10:27:07 · 414 阅读 · 0 评论 -
【数据结构与算法】(二) c 语言链表的简单操作
//// main.c// testLink//// Created by lan on 16/3/6.// Copyright © 2016年 lan. All rights reserved.//#include #include #include #include typedef struct Node { int date;原创 2016-03-09 23:06:53 · 498 阅读 · 0 评论 -
【数据结构与算法】(三) c 语言栈的简单实现
//// main.c// testStack//// Created by lan on 16/3/11.// Copyright © 2016年 lan. All rights reserved.//#include #include #include #include typedef struct Node { int data; struc原创 2016-03-12 16:08:44 · 564 阅读 · 0 评论 -
【数据结构与算法】(四) c 语言静态队列的简单实现
//// main.c// testQueue//// Created by lan on 16/3/12.// Copyright © 2016年 lan. All rights reserved.///* 静态队列:用数组实现 静态队列通常必须是循环队列 因为:无论是出队还是入队,头指针和尾指针都必须只加不减 如果不是循环队列,原创 2016-03-12 22:42:20 · 714 阅读 · 0 评论 -
【数据结构与算法】(五) c 语言递归与汉诺塔实现
递归思想:把规模为 n 的问题减小到 n-1 来解决技巧:不要考虑具体程序是怎么实现的,而是关注如何把 规模 为 n 的问题减少到 n-1递归求阶乘 和 递归求 1+2+...+n 的和//// main.c// testFactorial//// Created by lan on 16/3/12.// Copyright © 2016年 lan. All原创 2016-03-14 20:05:03 · 690 阅读 · 0 评论 -
【数据结构与算法】(六) c 语言实现简单的二叉树静态创建及先序、中序、后序遍历
//// main.c// testBinaryTree//// Created by lan on 16/3/15.// Copyright © 2016年 lan. All rights reserved.//#include #include #include typedef struct BTNode { char data; struct原创 2016-03-16 00:33:55 · 580 阅读 · 0 评论 -
【数据结构与算法】(七) c 语言实现一种快速排序算法
//// main.c// QuickSort//// Created by lan on 16/3/19.// Copyright © 2016年 lan. All rights reserved.//#include void QuickSort(int *, int, int);int FindPos(int *, int, int);int main(in原创 2016-03-19 16:25:24 · 425 阅读 · 0 评论 -
【Lintcode】删除链表中的元素
描述给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。java代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {原创 2016-07-13 17:54:32 · 362 阅读 · 0 评论 -
【Lintcode】斐波纳契数列
描述查找斐波纳契数列中第 N 个数。所谓的斐波纳契数列是指:前2个数是 0 和 1 。第 i 个数是第 i-1 个数和第i-2 个数的和。 斐波纳契数列的前10个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34 …样例给定 1,返回 0 给定 2,返回 1 给定 10,返回 34java code(非递归)class Solution {/** * @param原创 2016-07-13 18:02:56 · 521 阅读 · 0 评论 -
【LintCode】整数排序II
描述给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。java codepublic class Solution { /** * @param A an integer array * @return void */ public void sortIntegers2(int[] A) {原创 2016-08-17 21:19:11 · 1197 阅读 · 0 评论 -
【Lintcode】判断字符串是否没有重复字符
描述实现一个算法确定字符串中的字符是否均唯一出现样例 给出”abc”,返回 true 给出”aab”,返回 falsejava codepublic class Solution {/** * @param str: a string * @return: a boolean */public boolean isUnique(String str) { // write yo原创 2016-07-15 13:55:10 · 498 阅读 · 0 评论 -
【LintCode】中位数
描述给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。python codeclass Solution:"""@param nums: A list of integers.@return: An integer denotes the middle number of the array."""def media原创 2016-08-17 22:13:09 · 440 阅读 · 0 评论 -
【LintCode】第k大元素
描述在数组中找到第k大的元素python codeclass Solution:# @param k & A a integer and an array# @return ans a integerdef kthLargestElement(self, k, A): self.quick_sort(A, 0, len(A) - 1) return A[-k]def posit原创 2016-08-19 14:03:51 · 727 阅读 · 0 评论 -
【LintCode】数组划分
描述给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。python codeclass Solution:"""@param nums: The integer array you should partition原创 2016-08-19 17:09:32 · 818 阅读 · 0 评论 -
简化版桶排序
简化版桶排序思路:定义一个数组(桶),大小为待排序的最大数字加1,每个桶里初始化为0,遍历待排序的数组,取出每个数字,在对应桶上加一,如数字是3,就在桶[3]上加一,最后遍历全部桶,依次取出数字,即排好序。代码:#include <stdio.h>int main() { int a[11], i, j, t; int b[9] = {2, 4, 5, 6, 3, 4, 2, 9,原创 2016-11-30 10:18:13 · 379 阅读 · 0 评论 -
冒泡排序
冒泡排序思路每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。 (升序)每次取两位比较,越大越靠后,每一趟将最大数归位,执行n-1趟。代码#include <stdio.h>#define LEN 9int main(){ int i, j, temp; int a[LEN] = {2, 4, 5, 6, 3, 4, 2, 9, 10}; for (i = 0原创 2016-11-30 10:25:17 · 252 阅读 · 0 评论 -
图的基本算法--深度优先搜索(dfs) 和 广度优先搜索(bfs)
# 图# 0# / | \# 1 2 - 4# /# 3m = 999999 # 代表没有连接a = [[0, 1, 1, m, 1], # 邻接矩阵表示图 [1, 0, m, 1, m], [1, m, 0, m, 1], [m, 1, m, 0, m],原创 2017-10-12 11:53:32 · 602 阅读 · 0 评论