
数据结构和算法基础
文章平均质量分 72
技术宅--火狼
这个作者很懒,什么都没留下…
展开
-
冒泡排序的改进
/* Name: BubbleSort Copyright: Author: huowolf Date: 05/07/15 16:18 Description: 改进的冒泡排序的实现 */#include using namespace std;#define len 7int arr[]={48,62,35,77,55,14,35,98};void BubbleSo原创 2015-07-05 21:53:39 · 3423 阅读 · 0 评论 -
筛选法求素数(数组和BitSet分别存储)
/* * 筛选法求素数 先将1挖掉(因为1不是素数)。 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。 用3去除它后面的各数,把3的倍数挖掉。 分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。如果需要找1~n范围内素数表,只需进行到除数为n^2(根号n),取其整数即可。 */package com.huowol原创 2015-04-24 17:58:02 · 1585 阅读 · 0 评论 -
单链表(不带头结点)
#include #include typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;}LNode,*LinkList; void InitList(LinkList &l);void Create_head(LinkList &l);void Create_rear(Lin原创 2015-04-12 14:44:52 · 4732 阅读 · 1 评论 -
一元多项式的加法和乘法
#include #include using namespace std;typedef struct{ int coef; //系数项 int exp; //指数项 }ElemType; typedef struct Node{ ElemType data; struct Node *next;}LNode,*LinkList;void InitList(Lin原创 2015-04-12 23:08:24 · 2949 阅读 · 0 评论 -
约瑟夫问题
问题描述:编号为1,2… n 的n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1 开始顺序报数,报到m 时停止报数,报m 的人出列,将他的密码作为新的m 值,从他的顺时针方向上的下一个开始重新从1 报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。基本功能要求: 1)利用单循环链表作为存储结构模原创 2015-04-22 23:05:06 · 5476 阅读 · 0 评论 -
链栈
#include using namespace std;typedef int StackElemType;typedef struct Node{ StackElemType data; struct Node *next;}StackNode,*LinkStack; void InitStack(LinkStack &top);int StackEmpty原创 2015-04-22 18:00:54 · 1158 阅读 · 0 评论 -
循环队列(C语言版)
#include using namespace std;#define MAXSIZE 50typedef int QueueElementType; typedef struct { QueueElementType elem[MAXSIZE]; int front; //指向当前队头元素 int rear; //指向队尾元素的下一个位置}原创 2015-04-21 20:53:55 · 2840 阅读 · 0 评论 -
循环链表
//带头节点#include using namespace std;typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;}LNode,*LinkList; void InitList(LinkList &L);void CreateCyList(LinkList原创 2015-04-22 19:39:38 · 2596 阅读 · 0 评论 -
打印杨辉三角(STL版队列)
#include #include using namespace std;void YangHuiTriangle(int n);int main(){ cout<<"请输入杨辉三角的层数:"; int x; cin>>x; YangHuiTriangle(x); return 0;}void YangHuiTriangle(int n){ queue q原创 2015-04-22 15:02:04 · 3559 阅读 · 0 评论 -
最小生成树算法(1)-----------prim
#include #include using namespace std; #define MaxVertexNum 100 //最大顶点数#define INFINTY 65535 //最大值 typedef char VertexType; typedef int AdjType; typedef struct { Ver原创 2015-06-17 20:33:25 · 4512 阅读 · 0 评论 -
最小生成树算法(2)------------Kruskal
#include #include using namespace std;#define MAX 1000struct edge{ int u; //顶点 int v; //顶点 int w; //权重 }e[MAX]; //边集 int f[MAX]; //代表n个顶点所对应的并查集 //sort的比较函数 bool cmp(edge a,edge b)原创 2015-06-17 20:39:03 · 2254 阅读 · 0 评论 -
拓扑排序(基于邻接表实现)
#include #include using namespace std;#define MAX 100typedef char VertexType; typedef struct ArcNode { int adjvex; //邻接点域,存储该弧指向顶点的下标 (终点) struct ArcNode *next; //指向下一条弧的指针 in原创 2015-06-18 20:56:18 · 6068 阅读 · 0 评论 -
顺序表的有关增强练习
/* Name: SeqList_Rel Copyright: Author: huowolf Date: 06/07/15 21:49 Description: 顺序表的有关增强练习 */#include using namespace std;#define MAXSIZE 100typedef int ElemType;struct SeqList{ Ele原创 2015-07-12 17:54:36 · 4526 阅读 · 0 评论 -
带头节点的单链表
//带头结点的单链表 #include #include using namespace std;typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;}LNode,*LinkList; void InitList(LinkList *L);void Create_head(L原创 2015-07-12 18:31:23 · 3067 阅读 · 0 评论 -
直接插入排序与希尔排序
代码是何其的相似啊!!/* Name: InsertSort Copyright: Author: huowolf Date: 05/07/15 16:18 Description: 直接插入排序的实现 */#include using namespace std;int arr[]={-1,48,62,35,77,55,14,35,98};void InsertS原创 2015-07-05 16:42:06 · 3656 阅读 · 0 评论 -
Hash表
/* Name: Hash Copyright: Author: huowolf Date: 27/06/15 20:57 Description: HashTable的简单实现 */#include using namespace std;#define MAXSIZE 17 //该值最好采用某个4n+3形式的素数#define NULLKEY -1#def原创 2015-06-28 14:11:49 · 2839 阅读 · 0 评论 -
各种图的创建以及广度,深度优先遍历(临接矩阵存储)
#include #include #include #include #define INFINTY INT_MAX //最大值 #define MaxVertexNum 100 //最大顶点数using namespace std;typedef enum{DG,UDG,DN,UDN} GraphKind; //图的种类(有向图,无向图,又向网,无向网)原创 2015-06-04 13:50:41 · 6217 阅读 · 0 评论 -
图的创建,深搜,广搜(基于临接表实现)
#include #include #include #include using namespace std;#define MaxVertexNum 100 //最大顶点数typedef enum{DG,UDG,DN,UDN} GraphKind; //图的种类typedef int InfoType; typedef char VertexType; typed原创 2015-06-04 22:36:28 · 4561 阅读 · 0 评论 -
单源最短路径----Dijkstra算法
#include #include #define INFINITY 32768#define VERTEX_MAX 50using namespace std;typedef char VertexType; //顶点类型typedef int AdjType; //边的关系类型typedef struct { VertexType原创 2015-06-23 20:52:25 · 3351 阅读 · 0 评论 -
关键路径
#include #include #include using namespace std;#define MAX 100typedef char VertexType; typedef struct ArcNode { int adjvex; //邻接点域,存储该弧指向顶点的下标 (终点) struct ArcNode *next; //指向下一条原创 2015-06-19 20:10:03 · 2364 阅读 · 0 评论 -
字符重排
输入一个字典(用******结尾),然后再输入若干单词。每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典次序从小到大的顺序在一行中输出(如果不存在,输出:}).输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成.注意,字典中的单词不一定案子点序列排列.样例输入:tarp given score refund only trap wor原创 2015-01-21 01:17:43 · 1838 阅读 · 0 评论 -
高精度模板
#include #include #include #include #include #include using namespace std;const int MAXN = 1000;//数字位数,最多可存储1000位的整数。 struct bign{ int len, s[MAXN];//len表示当前数字的长度(多少位),s用来存储这个数,倒着存。原创 2015-01-19 20:46:23 · 3080 阅读 · 0 评论 -
链表(Java版)
//链接点类package com.huowolf.test2;public class Link { private long data; private Link next; public Link(long data) { this.data = data; } public long getData() { return data; }原创 2015-01-31 23:43:59 · 891 阅读 · 0 评论 -
链表操作
#include #include /* 链表节点的定义:*/struct node{ int data;//节点内容 node *next;//下一个节点};//创建单链表(带有头结点) struct node *create(){ int i=0;//链表中数据转载 2015-01-31 21:22:26 · 2578 阅读 · 0 评论 -
顺序栈(C语言版)
//SeqStack.h/*stack:Last In First Out*///1.定义顺序栈的结构 typedef struct stack{ DATA data[SIZE+1]; int top; //栈顶 }SeqStack;//2.初始化栈SeqStack *SeqStackInit() { SeqStack *p; if(p=(SeqStack *原创 2014-12-05 17:43:02 · 1069 阅读 · 0 评论 -
选择排序(Java版)
package com.love.test;import java.util.Scanner;/** * @author huowolf * 选择排序实现 *思想:每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完。 */public class SelectSort { public static void selectSort(int[]原创 2014-10-07 13:52:42 · 1064 阅读 · 0 评论 -
快速排序(Java版)
package com.love.test;import java.util.Scanner; /** * @author huowolf *快速排序实现 *快排是十分优秀的排序算法。 *核心:分治法(1.选基元2.分区3.递归子列) */public class QuickSort { public static void quickSort(int[] arr,int原创 2014-10-07 15:38:04 · 1150 阅读 · 1 评论 -
冒泡排序(Java版)
package com.love.test;import java.util.Scanner;/** * @author lenovo *冒泡排序实现 *核心:两两相邻交换 */public class BubbleSort { public static void bubbleSort(int[] arr) { for(int i=0;i<arr.length;i++原创 2014-10-06 23:20:13 · 688 阅读 · 0 评论 -
直接插入排序(Java版)
package com.love.test;import java.util.Scanner;/** * @author lenovo *直接插入排序实现 */public class InsertionSort { public static void insertSort(int []arr) { for(int i=0;i<arr.length;i++) {//循原创 2014-10-06 22:43:09 · 872 阅读 · 0 评论 -
关于螺旋矩阵
螺旋矩阵转载 2014-04-24 17:56:41 · 957 阅读 · 0 评论 -
队列之银行排号模拟
//CycQueue.h/*Queue:First In First Out (FIFO)避免假溢出:使用循环队列。*/#define QUEUEMAX 20//1.定义队列结构typedef struct { DATA data[QUEUEMAX]; //队列数组 int head; //队头 int tail; //队尾}CycQueue;/原创 2014-12-09 14:16:02 · 2240 阅读 · 0 评论 -
表达式计算(C++版)
//虽然遇到了很多困难,但还是坚持了下来,用到了STL中的栈。#include #include #include using namespace std;template void StackClear(stack &s) //清空栈{ while(!s.empty()) s.pop();}/*判断读取到的字符是否是运算符*/int IsOperato原创 2014-12-07 20:10:50 · 8447 阅读 · 1 评论 -
最长回文子串
学习自《算法竞赛入门经典》/* * 输入一个字符串,求出其中最长的回文子串。*子串的含义是:在原串中连续出现的字符串片段。 在判断时,应该忽略所有标点符号和空格 *且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。*输入字符长度不超过5000, 且占据单独的一行。*应该输出最长回文串,如果有多个,输出起始位置最靠左的。 *样例输入:Confuciuss say:原创 2015-01-15 20:19:33 · 1441 阅读 · 0 评论 -
手机键盘
题目描述:按照手机键盘输入字母的方式,计算所花费的时间如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。现在给出一串字原创 2015-01-19 22:50:55 · 949 阅读 · 0 评论 -
高精度除法
/*核心思想:除法化减法,考察从被除数里最多能减去几个除数,商就为几。就是考察除数的1次倍,10次倍,100次倍.....分别有几个。*/#include #include #define MAX_LEN 200char szLine1[MAX_LEN + 10];char szLine2[MAX_LEN + 10];int an1[MAX_LEN + 10]; //被除数,原创 2015-01-19 20:40:05 · 1077 阅读 · 0 评论 -
归并排序(C语言)
#include//将两个序列sourceArr[start,mid],sourceArr[mid+1,end]排序归并到tempArr中 void Merge(int sourceArr[],int tempArr[],int start,int mid,int end){ int i = start,j=mid+1,k = start; while(i!=mid+1 &原创 2015-02-06 00:59:07 · 3629 阅读 · 0 评论 -
高精度加法与乘法
//加法#include #include #define MAXN 200int an1[MAXN+10];int an2[MAXN+10];char szLine1[MAXN+10];char szLine2[MAXN+10];int main(){ scanf("%s",szLine1); scanf("%s",szLine2); int i,j; memset原创 2015-01-19 20:32:29 · 1068 阅读 · 0 评论 -
二叉树(java版)
//节点类package com.huowolf.test2;public class Node { private int keyData; //关键字 private int otherData; //其他数据 private Node leftNode; //左子节点 private Node rightNode; //右子节点 public原创 2015-02-06 01:17:04 · 925 阅读 · 0 评论 -
再次学习快速排序(C语言)
#include void QuickSort1(int *s,int left,int right){ int i,j,t,pivot; if(left>right) return; if(left<right) { pivot = s[left]; //基准数 i=left; j=right; while(i!=j) { while(i=原创 2015-02-06 00:48:12 · 3604 阅读 · 0 评论 -
封装自定义数组类(java版线性表)
package com.huowolf.test;public class MyOrderedArray { private long[] arr; //数组中有效元素的多少 private int elems; public MyOrderedArray() { arr = new long[50]; } public MyOrderedArr原创 2015-01-29 15:54:22 · 1375 阅读 · 0 评论