数据结构
文章平均质量分 56
●杨毅
技术交流Q群:570968411
展开
-
字典树
#include using namespace std;struct node { node *next[26]; int num;}; node *root;//字典树的根节点 void initnode(node *root){ node *p; p = root; int i; for(i =原创 2012-05-31 22:02:23 · 310 阅读 · 0 评论 -
(待解)单链表表头初始化问题
在表表头单链表中建立表头结点要初始化结构体:typedef struct Node{ int elem; struct Node* Next;}Node;void InitLink(Node *L){ L = new Node; L->elem = 0;}主函数main中Node* L;InitLink(L);这样为什么出原创 2012-10-06 00:14:11 · 1083 阅读 · 0 评论 -
c++ 图(邻接表)
/*连通邻接表: 由顶点表和边表组成,顶点表中存着数据和指向边表的指针 边表是一个链,存着顶点表的相关联的数据在顶点表的位置与权值下面就是建表 遍历(深度优先DFS与广度优先BFS)*/#include #define MAXSIZE 30using namespace std;typedef struct Sidetable原创 2012-10-30 22:56:55 · 7936 阅读 · 0 评论 -
单链表中一趟遍历找出值最大节点
/*这个题就没什么算法了,直接利用两个指针,指向两个节点,p1 p2,p1指向两者较大的,最后p1所指向的就是表中值最大的节点*/#include using namespace std;//*****************结构体********************typedef struct Node { int elem; struct Nod原创 2012-10-06 00:06:42 · 12676 阅读 · 0 评论 -
(递归)汉诺塔
#include using namespace std;/* 假定盘子的数目为n,为把最大的盘子放到y上,需要先把上面的n-1个移动到 z上,然后把z上的都移动到y上*/int iCount = 0;void Hanoi(int n,char x,char y,char z){ if(n) { Hanoi(n-1,x,z,y); //x上n-1个移动到z上 c原创 2013-10-29 22:20:24 · 561 阅读 · 0 评论 -
字符全排列产生器
#include using namespace std;/* 算法: a ( b c d e 的全排列) b ( a c d e 的全排列) c ( a b d e 的全排列) d ( a b c e 的全排列) e ( a b c d 的全排列)*/int iCount = 0;void Perm(char cArr[],int k,int n){原创 2013-10-29 22:40:43 · 957 阅读 · 0 评论 -
(递归)霍纳规则
#include using namespace std;/* 问题: 霍纳规则是一种是用最少数目的乘法计算多项式的方法 A(x) = ( ..( a.n*x + a.n-1)*x + ... + a.1)*x + a.0*/int Huona(int iArr[],int i,int x,int n){ if(i == n-1) return iArr[i]; els原创 2013-10-29 23:12:36 · 1664 阅读 · 0 评论 -
表达式求值(多位)
#include #define MAXSIZE 100using namespace std;//****************char Positive = '+';char Negative = '+';//****************typedef struct DOPND{ //栈 int Arr[MAXSIZE]; //先改为数字栈 //栈顶指针原创 2013-10-30 20:32:38 · 919 阅读 · 0 评论 -
KMP Next 再次详解
#include using namespace std;void Next(char str[],int next[]){ int i = 0; int j = -1; next[0] = -1; int len = strlen(str); while(i < len-1)//这里要注意i<len-1 的原因 { /* 设置next值分两种情况: 1原创 2013-11-01 15:28:49 · 611 阅读 · 0 评论 -
原样输出最长回文子串
#include #include #include #define MAXSIZE 5000/*void Paliandrome(char*);int main(){ char lpStr[] = "aaaMadam,I'm Adamzsd"; printf("源字符串: %s\n",lpStr); Paliandrome(lpStr); return 0;}void原创 2013-11-03 22:07:15 · 561 阅读 · 0 评论 -
哈希排序
转自:http://wenku.baidu.com/view/c8ca9533b90d6c85ec3ac6db.html文档下载:http://download.csdn.net/detail/tianxiajianling/4288941第一部分:Top K 算法详解问题描述百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长转载 2014-03-18 16:28:24 · 519 阅读 · 0 评论 -
堆排序
/*n个元素的序列{k1,k2,k3,...kn}称之为堆,当且仅当满足一下条件时: 1.ki >= k2i 且 ki >= k2i+1 (大根堆) 2.ki 堆排序算法:1.按堆的定义将待排序序列L[1...n]调整为大根堆(这个过程称之为初建堆),交换L[1]和L[n],此时L[n]为关键字最大的纪录2.将L[1...n-1]重新调整原创 2012-11-14 16:41:25 · 397 阅读 · 0 评论 -
第一个出现且只出现一次的字符(递归 不能使用库函数以及for while)
#include using namespace std;char temp='#';void FirstChar(char* pStr,int fir,int pos){ int len=strlen(pStr); if(pos >= len) return; cout<<fir<<" "<<pos<<" "<<pStr[fir]<<" "<<pStr[pos]<<endl;原创 2014-05-15 17:13:32 · 522 阅读 · 3 评论 -
快速排序 quicksort 细节问题
#include using namespace std;template int QuickPart(ElementType* iArray,int first,int last){ /* 1.将标准记录存储于temp中 temp = iArray[i] 2.令j=last,将iArray[j]的值与temp比较,直到找到第一个temp>iArray[j]时停止,然后执行iA原创 2014-05-15 15:44:36 · 821 阅读 · 1 评论 -
KMP 算法 字符匹配
#include using namespace std;void Next(char* s,int* next,int len){ /* 获得next数组其实相当于自身与自身做匹配。 初始i=0,j=-1;next[0]=-1; 在while中,if(j==-1 || s[i] = s[j]) 当j=-1 1.第一次进入循环,j++,i++ 做s[0]与原创 2014-05-20 17:01:07 · 461 阅读 · 0 评论 -
简单的希尔排序 Shell Sort
#include using namespace std;void ShellSort(int* iArray,int length){ //初始化jump等于length int jump = length; //标记本趟检测是否进行了交换, // 若进行了 则还有下次从头开始的检测, // 否则停止,继续改变jump的值 做另一趟排序 bool isSwap;原创 2014-05-20 17:43:42 · 551 阅读 · 0 评论 -
c++二叉树(统计叶节点,判断两颗二叉树是否相等,交换二叉树的左孩子右孩子,输出叶子到根节点的路径)
/*以二叉链表作为二叉树的存储结构: 完成 1:统计二叉树的叶结点个数. 完成 2:判别两棵树是否相等 完成 3:交换二叉树每个节点的左孩子和右孩子 4:设计二叉树的双序遍历(双序遍历就是指对于二叉树的每个节点,先访问这个节点 ,再按双序遍历她的左子树,然后在访问这个节点,然后在按双序遍历它右子树 ) 5:计算二叉树的最大宽原创 2012-10-25 10:40:55 · 9442 阅读 · 0 评论 -
c++无向图(矩阵)
/*连通无向图;邻接绝阵表示图就是在二维数组中数组元素的真假表示两个节点是否相邻接*/#include using namespace std;#define MAXSIZE 20 //数据元素最大长度#define MAXDATA 999 //最大数据class Map原创 2012-10-28 20:58:12 · 2922 阅读 · 0 评论 -
c++哈夫曼树(简单创建,与遍历)
/*给定n个带权的节点,如何构造一棵n个带有给定权值的叶节点的二叉树,使其带全路径长度WPL最小,构造最优树算法如下.哈夫曼算法: 1. 将n个权值分别为w1,w2,w3,....wn-1,wn的节点按权值递增排序,将每个权值作为一棵二叉树 构成n棵二叉树森林F={T1,T2,T3,T4,...Tn},其中每个二叉树都只有一个权值,其左右字数为原创 2012-10-24 20:50:22 · 8946 阅读 · 1 评论 -
链栈(简单的入栈出栈)
#include using namespace std;typedef enum{OK,ERROR,TURE,FLASE}Status;typedef struct StackNode{ //栈节点数据 int data; //栈的指针 指向下一个节点 struct StackNode* next;}StackNode,*LinkStack;//链栈初始化原创 2012-06-05 18:13:28 · 1572 阅读 · 0 评论 -
顺序栈(进制转换),包括一系列的操作
#include using namespace std;#define MAXSIZE 100typedef enum{OK,ERROR,TURE,FLASE}Status;typedef struct { int *base; int *top; //栈容量 int stacksize;}SqStack;//顺序栈的初始化Status InitS原创 2012-06-05 17:20:21 · 471 阅读 · 0 评论 -
按姓名查找电话(完全与不完全)
#include #include #define MAX 20using namespace std;typedef struct Dict{ char NA[MAX]; char PN[MAX];}Dict;//存储信息的全局Dict Data[200];int N = 0;void INSERT(){ char na[MAX],no[M原创 2012-06-10 13:58:30 · 1338 阅读 · 1 评论 -
c++ 员工信息管理
三段c++员工信息管理,简单的1.#include #include #define N 200using namespace std;//增加void InCrease_Worker_Record();//选项信息表void Information_March();//打印原始表void Original_Record_Show();//间表v原创 2012-06-20 21:31:33 · 1357 阅读 · 0 评论 -
括号匹配(栈)
算法思想: //初始化一个空栈,扫描表达式,依次读入字符,知道表达式扫描完或出现错误匹配1.如果是'{'或'(',则将其压栈 2.如果是')'则根据当前栈顶元素进行分情况考虑,若是'('则此次匹配成功 ,否则非法,直接匹配不成功3. 如果是'}'同2上面的处理方法。//*****************括号匹配*********************#include原创 2012-09-26 17:18:56 · 731 阅读 · 0 评论 -
链表多项式求和
虽然很简单,但是还是花了我2个多小时才完成,哎........................./*对于两个一元多项式所有指数相同的项,对应系数相加 若其和不为零,则作为和多项式的一项插入到和多项式链表中去 如指数不相同,则将指数数值较小的插入到和多项式链表中去 注意:多项式链表中的节点不需生成,而应该从两个多项式链表中摘取*/#include using names原创 2012-10-05 23:27:40 · 1074 阅读 · 0 评论 -
函数参数的传递问题(指针的指针)(转)
程序1:void myMalloc(char *s) //我想在函数中分配内存,再返回{ s=(char *) malloc(100);}void main(){ char *p=NULL; myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么? if(p) free(p);}程序2:void myMalloc(ch转载 2012-10-09 12:09:01 · 496 阅读 · 0 评论 -
c++二叉树的建立与遍历
刚学数据机构没多久,学校又是讲c的,自己就用c++写的 只哟建立与遍历,其他功能还没完善,坐等完善//*********************二叉树************************#include using namespace std;//**********声明Node为BinaryTree的友元类class BinaryTree;//******原创 2012-10-13 16:17:53 · 1114 阅读 · 0 评论 -
非递归队列方法建立二叉树
非递归队列方法建立层次二叉树思想:要认清rear和front的关系 1:函数刚开始rear== 0是要在while中第一次起作用,rear == front 表示栈空. 2:看函数体,当rear在自增后卫奇数时,此时q[front]的右孩子已经处理完,跟紧其后的是front++, 表明下一个处理的节点为当前处理节点的兄弟节点或者堂兄弟节点,反正就原创 2012-10-13 22:03:15 · 1413 阅读 · 0 评论 -
非递归按层次遍历二叉树
//非递归按层次遍历二叉树算法思想:按层次遍历需要一个队列,开始将二叉树的头结点入队, 然后每次从队列中删除一个节点并输出节点信息,接下来把它的非空 左右孩子入队,下一个输出的位它的右面堂兄弟或兄弟节点信息,在把它的 左右孩子入队,这两个孩子在上面两个孩子的后面(紧跟其后) 这样当队列为空时算法结束注意:要声明全局变量数组与front 和原创 2012-10-13 22:36:25 · 1178 阅读 · 0 评论 -
(以实现)c++非递归层次二叉树
层次建立和遍历的算法在其他文章中,主要思想那里也有#include #define MAXSIZE 100using namespace std;//*************节点类**************class Bitree;class Node{private: int Data; Node* Lchild; Node* Rchild;p原创 2012-10-14 14:19:25 · 418 阅读 · 0 评论 -
c++ 顺序栈+链栈
#include #include using namespace std;#define MAXSIZE 20class Order_Stack{private: string Name[MAXSIZE+1]; int Top; int End;public: Order_Stack() { memset(Name,0,sizeof(Name)/sizeof(str原创 2013-07-02 21:06:39 · 584 阅读 · 0 评论 -
c++ 双向链表
#include #include using namespace std;class Node{private: string name; Node* pre; //前指针 Node* las; //后指针public: //构造函数,初始化都要为空 Node() { name = ""; pre = NULL; las = NULL; } //s原创 2013-07-01 20:17:39 · 1347 阅读 · 0 评论 -
十进制转换为任意进制(栈 c++版)
//十进制转换为任意进制#include using namespace std;#define MAXSIZE 20class Transform{private: int* Buffer; int Top; int End;public: Transform() { Buffer = new int[MAXSIZE+1]; Top = End = 0; }原创 2013-07-02 23:12:38 · 2083 阅读 · 0 评论 -
kmp算法
主要思想:当主串第i个字符与模式串第j个字符匹配 不等是不需要回朔i指针,而是利用已经得到的 部分匹配结果next数组,将模式串向右滑动核心:当主串中第i个字符与模式串第j个字符匹配失败时, 主串中第i个字符(i不回朔)应与模式串中哪个字符匹配?? 这就要构建一个next数组,来存放当匹配失败应该在匹配的位置编号怎么定原创 2012-06-04 21:16:40 · 374 阅读 · 0 评论 -
poj1363 Rails(栈的应用)
题意: 给出火车出站序列,问顺序是否合理,就是判断出栈合理不算法:模拟栈 1.开辟一个数组存储出栈序列a[..]; 2.开辟一个栈 stacks,按顺序存储当前比a[i]小的车厢 3.如果a[i=0 -> n] == j = 0 ->..说明车厢直接出栈 4.如果3不成立,说明下一车厢有可能大于,有可能小于当前车厢编号原创 2012-10-05 13:15:04 · 1302 阅读 · 0 评论 -
Matrix:The matrix in spiral order
/**Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.For example, given the following matrix:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]You s原创 2015-08-19 14:17:43 · 411 阅读 · 0 评论