算法与数据结构
文章平均质量分 72
通过专栏的方式整理自己对数据结构和算发学习的一些心得、体会以及一些笔记
喜欢哲学的女孩
人生苦短,何必将就
展开
-
【基础编程】HDOJ2409 组合+错排
【1】题目分析从N个新郎中选出M个,这是组合,同时M个新郎全部找错了新娘,是错排错排的公式D(n) = (n-1)*(D(n-1)+D(n-2))【2】代码#include<stdio.h>#define MAX 21int main(){ int b,n,m,i,j; long long sum1; long long a[MAX]; a[...原创 2019-06-09 08:19:01 · 232 阅读 · 0 评论 -
【基础训练】HDOJ2041超级楼梯
这是一个水题,但是却花费了我一些功夫来研究,所以将其记录下来。刚开始看到题目的时候,我脑袋是晕的,当我试着将前几级楼梯的不同走法计算了一下,发现这不是斐波拉契数列嘛,把自己包装的这么严实。一想到斐波拉契数列就想到了递归,因此我就写了个递归,提交之后,结果超时。递归需要一层层的将结果计算出来,因此有可能同一结果要计算很多遍这样就会很浪费时间。因此,我就想用一个数组将计算结果保存起来,如果数组里面已经原创 2016-10-10 11:20:03 · 759 阅读 · 0 评论 -
【基础训练】HDOJ2028 Lowest Common Multiple Plus
求n个数的最小公倍数。方法一:先求最大公约数,然后利用公式求最小公倍数。求最大公约数使用辗转相除法。#include int ls(int a,int b){ int m; if(b == 0) m = a; else { m = ls(b,a%b); } return m;}int m原创 2016-09-29 16:25:30 · 836 阅读 · 0 评论 -
【基础训练】HDOJ2035人见人爱A^B
★要求A^B的最后三位数,一种常规的做法就是将此数的最终结果求出来然后%1000,但是题目中A与B的数可以取到10000,那么这个数就不是一般的变量类型能够存储下的;★仔细研究就会了解,要想求A^B的后三位,只需将B个A%1000,然后相乘得出的结果与A^B先求得最终结果在%1000得到的结果相同;★方法二的优点就是将大数转化成小数进行计算★程序实现:#include in原创 2014-10-30 11:38:48 · 1369 阅读 · 0 评论 -
【基础训练】HDOJ2033 && HDOJ2034
★本题目考察代码熟练度,没有用到数据结构和算法★代码实现#includeint main(){ int n; int AH,AM,AS,BH,BM,BS,SH,SM,SS; scanf("%d",&n); while(n --) { SH = SM = SS = 0; scanf(原创 2014-10-29 16:24:24 · 1413 阅读 · 0 评论 -
【基础训练】HDOJ2032杨辉三角
★杨辉三角的规律是很明显的:◇每一行的第一个数和最后一个数都为1;◇从第三行开始,除去第一个数和最后一个数,其余的数都是上一行中两个数的和;◇每个实例最后一行的数字个数都等于这个实例的层数;因此这个题目的关键就是用代码将上述规律描述清楚的过程,没有复杂的数据结构和算法。★代码实现:#include static int a[100][100]; int原创 2014-10-28 09:35:25 · 1197 阅读 · 0 评论 -
【基础训练】HDOJ2031进制转换
项目做久了,我发现自己对代码的实现能力越来越差劲了!经过前一段时间找工作的经历就可以明显感觉的到自己的代码熟练度不够!因此,今后要多加练习。要想做好一个优秀的程序员就要多敲代码,多思考。★结题思路利用了栈的思想,将整数N与R求得的余数压栈,然后将N/R与R求得的余数压栈,知道N/R小于R为止。可以利用数组来模拟栈的操作,可以将余数存入数组中然后倒序输出!★代码实现#incl原创 2014-10-27 13:15:30 · 1049 阅读 · 0 评论 -
关于伪代码的一些思考
编码是为了解决某种问题(不管是在OJ上A题,还是做项目),在解决问题之前应该先有的是对问题的充分分析(挖掘题目的隐含条件,分析项目的需求),只有对问题有了充分的了解,并且有了清晰的思路之后,编码就成了水到渠成的事。以前在OJ上做题的时候,都是看到题目就去写代码,从来不先去分析题目的各种条件,这种做法是错误的。★什么是伪代码是一种算法描述语言。它自身有很多的规定,其实这很好理解。就像当年秦始原创 2014-08-01 08:37:05 · 1503 阅读 · 0 评论 -
【数据结构】栈应用之进制转换
进制转换就是将十进制数zhuanhuan原创 2014-04-14 16:10:12 · 1785 阅读 · 0 评论 -
【数据结构】栈学习之数组实现(C语言)
问题1、结构体指针变量原创 2014-04-12 20:39:38 · 1661 阅读 · 0 评论 -
输入一个链表的头结点,从尾到头反过来输出每个结点的值。
对于这个问题,可以利用"栈"的后进先出的思想,将链表中的节点先入栈后再出栈,这样就可以将链表从头 到位翻转过来。从网上搜索一下,没有找到可以直接调用栈的的方法,因此要用C语言实现必须要先写完栈的基本操作(入栈、出栈、初始化),幸好以前写过一个栈的基本操作的源码,可以把它放到工程中。head.h文件#ifndef HEAD_H_#define HEAD_H_#include #inc原创 2014-03-08 14:18:30 · 1604 阅读 · 0 评论 -
二叉树的基本操作
#include #include #include typedef struct node{ int data; struct node *lchild; struct node *rchild; }*BiTree;//此处*BiTree的作用与 typedef struct node *BiTree等价 int CreateTree(B原创 2014-02-13 11:43:31 · 822 阅读 · 0 评论 -
冒泡排序(链表实现)
#include #include #include typedef struct node{ int data; struct node *next; }*BT; void BLine(BT &T,int a[10],BT &T1);//建立链表 void Arrange(BT &T,BT &T1);//对链表排序 int main(){原创 2014-02-13 11:30:16 · 1051 阅读 · 0 评论 -
链表反转
问题描述:将原链表(如:1-> 2 -> 3 -> 4 -> NULL)反转后生成一个链表:4->3 ->2 ->1 ->NULL。要将链表反转会碰到几个问题:(1)头节点问题。在原链表的开始出有头节点,头节点与其他节点一样,只是它的data中没有被赋值,里面是垃圾数字。那么。在遍历原链表的时候会绕过头节点直接遍历第一个节点。那么,假设我将原链表反转成功,用遍历原链表的函数去遍历反转链原创 2014-02-12 17:20:04 · 965 阅读 · 0 评论 -
数据结构之链队列
#include #include #include typedef struct QNode{ int data; struct QNode *next;}QNode,*QueuePtr;typedef struct{ QueuePtr front;//对头指针 QueuePtr rear;//队尾指针}LinkQueue;/*-------原创 2014-02-06 22:24:08 · 1423 阅读 · 0 评论 -
数据结构之栈学习(1)
(1)什么是栈 栈是一种实现“先进后出”的存储结构。 (2)栈的表示 栈有两种存储表示方法。顺序栈和链式栈(3)栈的基本操作 初始化栈,即构造一个空栈。原创 2014-01-19 15:16:00 · 1170 阅读 · 0 评论 -
数据结构之链表学习(2)
主要学习了链表的三个函数:插入节点,删除节点,排序。(1)插入节点函数 1、传递的参数 参数主要有三个,链表的头结点Head,要插入的位置pos,要插入的元素的值val。 2、此函数的执行循序 首先,定义一个结构体指针变量p,方便后面的操作。然后一段代码 while(p->pnext!= NULL && i {原创 2014-01-14 01:14:34 · 997 阅读 · 0 评论 -
数据结构之链表学习(1)
(1) 链表包括:数据域和指针域因此在用结构体定义链表的代码为typedef struct node{ int data;//数据域 struct node *pnext;//指针域}Node, *pNode;(2) 创建链表1. 介绍一个函数malloc,此函数的作用是在内存的动态存储区中分配一块连续的空间。其原型为:void *malloc(un原创 2014-01-12 02:20:21 · 948 阅读 · 0 评论 -
连续数组存储
#include #include struct Arr{ int *pBase; //数组的首地址 int len;//数组的长度 int cnt;//数组的当前有效个数 };void Init_arr(struct Arr *P, int length);//初始化bool append_arr(struct Arr *P,原创 2014-01-07 12:25:05 · 1094 阅读 · 0 评论 -
typedef的用法
Typedef的用法(1) 可以用它来声明新的类型名来代替已有的类型名。例如:typedef int ZHANG;此时 int i;与ZHANG i;等价(2) 同样(1)中的功能也可以用在结构体中,有结构体如下:struct student{int sid;char name[10];char sex; }; 可以定义变量 st原创 2014-01-07 11:08:17 · 841 阅读 · 0 评论 -
冒泡排序
#include #include void BubbleSort(int *p,int q){ int i,j,temp; for(i = 0;i < q;i++) { for(j = 0;j < q-1-i;j++) { if(p[j]>p[j+1]) {原创 2013-11-29 17:26:17 · 891 阅读 · 0 评论 -
找零钱(贪心算法)
#include#include#define MAX 9int change(int n);int a[MAX]={10000,5000,1000,500,200,100,50,20,10};int num[MAX]={0};int main(){ int i; float m; printf("输入要找的钱:"); scanf("%f",&m); c原创 2012-11-05 21:27:49 · 1112 阅读 · 0 评论