数据结构&算法
catkint
这个作者很懒,什么都没留下…
展开
-
数据结构 单链表插入删除操作(c语言实现)
#include "stdlib.h"#include "stdio.h"typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;void Create_List(LinkList &L){ int data; LinkList p,q; L=(LinkList)malloc(sizeof(L原创 2015-11-29 16:46:50 · 10632 阅读 · 4 评论 -
贪心算法实例 单源最短路径 Dijkstra算法(c++实现)
基本思想:设置顶点集合S并不断地做贪心选择来扩充这个集合。一旦S包含了所有V中的顶点,dist就记录了从源到所有其他顶点之间的最短路径长度。顶点V是源。c是一个二维数组,c[i][j]表示边(i,j)的权。当(i,j)不属于E时,c[i][j]是一个大数,dist表示当前从源到顶点i的最短特殊路径长度。下面是一个带权有向图代码:#include#include#原创 2016-04-23 09:15:14 · 11225 阅读 · 0 评论 -
回溯法实例―n皇后算法 (java实现)
问题描述:在n*n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n*n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或 同一列或同一斜线上。Math.abs(k-j)==Math.abs(x[j]-x[k])||(x[j]==x[k])//满足此条,说明不符合条件,即处在同一行或同一列或同一斜线im原创 2016-05-06 21:36:29 · 2150 阅读 · 0 评论 -
递归求最大最小值算法 分治策略(c语言实现)
思路:运用分治的思想,将要排序的整个数组从中间劈开,分别求其左右两边的最大最小值,然后将求出的最大最小值合起来进行比较。 当左右两边的数组小到一定程度时:(1)数组中只有一个元素,maxNum=minNum;· (2)数组中有两个元素,找出两个元素中的最大最小值; (3)数组中大于两个元素,从中间分开,继续递归;#include#include#includ原创 2016-03-28 21:02:29 · 9897 阅读 · 2 评论 -
01背包算法 动态规划(c++实现)
0-1背包问题:给定n种物品和一背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中的物品的总价值最大?在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包问题。01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi原创 2016-03-29 21:59:18 · 12187 阅读 · 0 评论 -
整数划分算法实现 分治策略
将正整数n表示成一系列正整数之和。正整数n的这种表示成为正整数n的划分。正整数n的不同的划分个数成为正整数n的划分数。 int q(int n,int m){ if((n<1)||(m<1))return 0; if((n==1)||(m==1))return 1; if(n<m)return q(n,n); if(n==m)return q(n,m-1)+1; ret原创 2016-03-07 14:33:52 · 1269 阅读 · 0 评论 -
全排列算法实现 分治策略
#include int n = 0; void perm(int list[], int k, int m) { int i; if(k > m) { for(i = 0; i <= m; i++) printf("%d "原创 2016-03-07 14:23:17 · 528 阅读 · 0 评论 -
归并排序算法 递归及循环实现
第一步合并相邻长度为1的子数组段,这是因为长度为1的子数组段是已经排好序的。用一次对数组arr的线性扫描就足以找出所有这些排好序的子数组段。然后将相邻的排好序的子数组段两两合并,构成更大的排好序的子数组段。#include#includeusing namespace std;//递归思想归并排序 //void MergeSort(int a[],int left,int righ原创 2016-03-15 22:04:59 · 2083 阅读 · 0 评论 -
数据结构 查找及排序算法、直接插入排序及顺序查找(c语言实现)
实验目的1、理解各种内部排序方法的基本思想2、熟悉各种内部排序方法的算法实现3、熟悉各种查找方法的算法实现实验内容问题描述:给定一数组,先采用某种方法对其进行排序,在选择某种查找方法在有序表中插入一个新元素,并保持表的有序性。要求:1、数组中的关键字为整型。2、 排序方法选取:直接插入排序;希尔排序;起泡排序;快速排序;简单选择排序;堆排序等。3、查找方法选取:原创 2015-12-18 23:14:16 · 3837 阅读 · 0 评论 -
数据结构 二叉树的递归算法、前序、中序、后序遍历(c语言实现)
实验目的1、掌握二叉树的表示与实现。2、掌握二叉树的定义、创建、遍历等基本操作的实现。3、熟悉求二叉树深度等递归算法的设计与实现。实验内容问题描述:已知二叉树t,分别采用顺序存储结构、二叉链表存储结构实现求二叉树的深度,并对二叉树分别进行中序遍历。要求:1、二叉树分别采用顺序或二叉链表存储。2、 树中的数据类型约定为整型3、 按先序序列创建二叉树t,用递归算法求原创 2015-12-18 23:08:55 · 21751 阅读 · 6 评论 -
数据结构 使用递归任意进制转换(c语言实现)
#include<stdio.h>void tran(int n,int d){ if(n==0){ return ; }else{ tran(n/d,d); if(d==16){ if(n%d>=10){ switch (n%d){ case 10:printf("A"); break; case 11:printf("B"); b...原创 2015-11-29 16:50:47 · 8573 阅读 · 0 评论 -
数据结构 栈的应用任意进制转换(c语言实现)
#include "stdlib.h"#include "stdio.h"typedef struct Stack{ int *base; int *top; int stacksize;}SqStack;void InitStack(SqStack &s){ s.base=(int *)malloc(100*sizeof(int)); if(!s.base) exit(0)原创 2015-11-29 16:48:18 · 3120 阅读 · 0 评论 -
OpenJudge 简单的整数划分问题(递归)
总时间限制: 100ms 内存限制: 65536kB描述将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。输入标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 输出对于每组测试数据,输出N的划分数。样例输入5原创 2017-02-07 19:25:48 · 1675 阅读 · 1 评论