- 博客(23)
- 资源 (6)
- 收藏
- 关注
多种队列的实现
1.算法描述a.数据结构与算法(Mark Allen Weiss)3.28双端队列的实现,在队列的两端都可以进行插入和删除工作,每种操作复杂度O(1).b.没有头结点和尾结点的队列实现c.循环数组的队列实现 2.算法实现a.由于有复杂度的限制,和两端插入删除,故而使用数组是不适合的,必须使用链表,我这里使用的是双向链表,在两端操作的复杂度就一样的,非常方便b.没有头尾结...
2012-06-29 10:09:57 139
原创 栈的各种实现
1.算法描述a.实现二个栈,在一个数组里面,除非没有任何空间剩余,否则不能有溢出声明b.实现一个没有头尾结点的栈(单链表)c.实现带有头结点的栈(单链表) 2.双栈对于双栈,我们还可以添加resize()方法,当空间满了重新自动分配空间(new),就是将原来的两个栈,拷贝到新建立的数组上面去a.dsexceptions.h #ifndef DSEXCEPTION...
2012-06-28 16:34:11 67
中缀表达式转换为后缀
1.算法描述 例如a+b*c这是常见的中缀表达式,但是为了方便计算,在计算机中常要转换为后缀表达式abc*+的形式,那如何转换呢? 用到的关键数据结构:栈转换的关键原则: 1.优先级判断:关键是比较运算符的优先级,谁的优先级高,谁就出现在前面上面的表达式中,有括号的时候括号优先级最高,*/次之,+-最后. 在上面的表达式中+的优先级不如*的高,因此,在后缀表达式...
2012-06-28 11:10:16 108
后缀表达式的值
1.算法描述计算后缀表达式的值 2.事例如:(2+3)*5--->后缀表达式:23+5*,或者523+*在计算机中不能直接处理算术表达式,我们就转换为后缀表达式利用栈来解决这个问题 3.思想利用数据结构栈a.后缀表达式依次入栈,如果遇到操作符,就将栈顶两个元素出栈,计算结果在入栈。b.循环进行,直到栈中只有一个元素,就是结果 4.算法异常处...
2012-06-27 16:33:29 380
原创 vector的基本实现(c++)
1.描述vector的基本操作实现(包括迭代器) 2.基本操作 3.代码 #ifndef DS_EXCEPTIONS_H#define DS_EXCEPTIONS_Hclass UnderflowException { };class IllegalArgumentException { };class ArrayIndexOutOfBoundsEx...
2012-06-27 09:57:02 110
单链表的简单实践
1.算法描述数据结构与算法分析C++版:3.11实现一个有序单链表,要求能返回链表大小,打印链表,检测x是否在链表(在则删除,否则添加) 2.实现List.h #ifndef LIST_H#define LIST_H#include <iostream>template<class T>struct Node{ Node&...
2012-06-27 09:29:31 107
原创 C++ 迭代器失效的问题
转载自:http://blog.csdn.net/zhongjiekangping/article/details/5624922众所周知当使用一个容器的insert或者erase函数通过迭代器插入或删除元素"可能"会导致迭代器失效,因此很多建议都是让我们获取insert或者erase返回的迭代器,以便用重新获取新的有效的迭代器进行正确的操作:view plaincopy to clip...
2012-06-25 17:15:01 87
Josephus问题
1.算法描述简单的游戏:有N个人坐成一圈,编号1-N、从编号为1的人开始传递热马铃薯。M次传递之后,持有马铃薯的人退出游戏,圈缩小,然后游戏从退出人下面的人开始,继续进行,最后留下的人获胜。如,M=0, N=5则参加游戏的人依次退出,5号获胜。M=1,N=5则退出顺序是2,4,1,5. 2.算法分析该算法使用一个没有头指针的循环链表完成,移动的过程计数,如果计数为M,则将其移除并从...
2012-06-21 15:30:39 132
原创 单链表的面向对象实现
1.利用非面向对象定义节点Node下面是头文件LinkList.h #ifndef LinkList_H#define LinkList_Htemplate<class T>struct Node{ Node<T>* next; T data;};template<class T>class LinkList{...
2012-06-20 15:59:06 356
原创 关于最长递增子序列的实际应用--动态规划
参考链接:a.http://www.programfan.com/blog/article.asp?id=13086b.http://blog.csdn.net/hhygcy/article/details/3950158 1.对(http://hao3100590.iteye.com/blog/1548135)中问题6:最长递增子序列的改进,减少时间复杂度算法的思想: ...
2012-06-07 11:35:46 371
原创 动态规划
该文章转载自:http://www.cppblog.com/Fox/archive/2008/05/07/Dynamic_programming.html非常感谢!以前在学习非数值算法的时候,曾经了解过动态规划算法(Dynamic programming),以下是对Wikipedia上动态规划的翻译,图也是Wikipedia上的,仓促行文,不到之处,请方家指正。这篇文章的术语实在...
2012-06-06 11:23:09 87
原创 线性查找二维数组
1.算法描述有序(行有序,列有序,且每行从左至右递增,列从上至下递增)二维数组查找,要求复杂度O(n) 2.使用到的相关知识:结构体定义和使用,二维数组传递(http://blog.csdn.net/yzhhmhm/article/details/2045816) 3.使用数组名传递这个的不便之处很明显,一旦确定就是不能设置列值//使用数组名实现(不...
2012-06-05 17:23:29 132
原创 结构体
转载自:http://www.pconline.com.cn/pcedu/empolder/gj/c/0503/567930.html 1.结构体定义 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,...
2012-06-05 16:59:22 67
整数的随机置换
算法描述:生成前N个整数的随机置换,如{4,3,1,5,2},{4,5,3,2,1}是合法的,而{5,4,1,1,2}不合法,因为3没出现。1.基本算法该算法效率比较低,O(n*n*logn),主要就是随机的生成一个数,然后再一直数组中去检测是否存在,如果不存在才插入。从而效率低下 //使用的是思想1(O(n*n*logn))int* getRandom(int* a, int...
2012-06-05 15:10:08 479
原创 c++中malloc与free
from:http://hi.baidu.com/hayrek/blog/item/4ed2749a5e8307b2c8eaf4c3.html c++中malloc与free一、malloc()和free()的基本概念以及基本用法: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这...
2012-06-04 15:32:28 761
原创 主元素算法
1.算法描述(算法分析2.26)大小为N的数组A,其主元素是一个出现超过N/2次的元素(从而这样的元素最多只有一个)。例如,数组3,3,4,2,4,4,2,4,4只有一个主元素4; 3,3,4,2,4,4,2,4没有主元素求出主元素,没有请指出 2.书中列出了一种算法,暂且叫递归法,这可以自己看书,其复杂度也只有O(n) 下面介绍两种其他的方法。在网上还有其他一些方...
2012-06-04 15:32:17 1840
原创 C++动态分配
1.动态分配实例模板:void alloc(int n){ //步骤1,分配(放于堆空间中) int *value = new int[n];//分配数组 int *a = new int(4);//分配指针 //步骤2,初始化(动态分配不会自动初始化) for(int i=0; i<n; i++) value[i]=0; //步骤3,释放 d...
2012-06-03 17:18:44 388
原创 求幂的递归和非递归
本文的非递归部分转载自:http://www.cnblogs.com/wallace/archive/2009/12/27/1633683.html先上算法1.递归算法 //幂运算的递归算法long pow(long x, int n){ if(n == 0) return 1; if(n == 1) return x; if(n % 2 == 0){ ret...
2012-06-03 17:14:30 148
原创 二分查找的递归和非递归
二分查找,这个适用于已经排序好了的数组,没有排序那就先排序,不过要根据实际的情况,要是排序代价很小,这样很好了/** *2.15,在有序数组中查找,利用二分查找的方法 * */ #include <iostream>using namespace std;/** *二分查找(也可以通过递归实现) * */int sort(int *...
2012-06-03 16:42:11 60
原创 关于序列的几个算法
1.求最小子序列的和就是对于连续的序列,找出连续序列中和最小的例如:int a[LEN] = {4,-1,5,-2,-1,2,6,-2,1,-3};最小的子序列就是:-2,1,-3对于下面的最大子序列就是:4,-1,5,-2,-1,2,6。 /** *最小子序列和 *n */int subMinSum(int a[], int length){ i...
2012-06-03 16:38:31 354
原创 指针与复制构造函数
struct Node{ char *name; int age; Node(char *n="", int a=0){ name = new char[strlen(n)+1]; strcpy(name, n); age = a; } } 下面声明:Node node1("Roger", 20), node2(node1); //...
2012-06-03 15:39:27 221
素数的求解逐步改进
我的注释都写在代码里面了,就不在赘述了!如果有任何疑问欢迎留言参考博客:1.位操作总结:http://blog.csdn.net/morewindows/article/details/73545712.找素数算法总结:http://blog.csdn.net/hexiios/article/details/4400068非常感谢上面两篇博客的仁兄,致谢!尤其是读了位操作的...
2012-06-02 22:22:41 89
原创 1000亿以内素数计数算法
转载自:是一篇很好的文章,效率相当高,可惜注释少了些,看起来有些恼火 1000亿以内素数计数算法 /******************************************************************copyright (C) 2007 Huang Yuanbingversion 1.1, 2007 PrimeNumberm...
2012-06-02 16:51:42 790
方块程序源代码及其演示方案
2008-09-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人