
数据结构
hackerain
这个作者很懒,什么都没留下…
展开
-
有向图的深度优先遍历,以及对边的分类的判断
在AdjacencyList.h中:#ifndef AdjacencyList_H#define AdjacencyList_H#include "stdio.h"#include "stdlib.h"#define WHITE 0#define原创 2011-07-03 21:34:37 · 5688 阅读 · 0 评论 -
二路归并排序,C++代码实现
<br />#include <iostream>using namespace std;typedef struct { int r[100+1]; int length;}SqList;//二路归并函数void Merge(SqList &L,int low,int m,int high){//将两个有序区归并为一个有序区 int i,j,k; i=low;//low为第一个有序区的第一个元素,i指向第一个元素 j=m+1;//m为第一个有序区的最后一个元原创 2011-01-07 19:06:00 · 5604 阅读 · 0 评论 -
二叉树用顺序表实现 C++代码实现
<br /><br />/*二叉树用顺序表实现*/<br /><br />#include <iostream><br />using namespace std;<br /><br />/*完全二叉树顺序表的定义*/<br />#define MAX_BITREE_SIZE 100<br />typedef int SqBiTree[MAX_BITREE_SIZE];<br /><br /><br />/*创建一个二叉树顺序表*/<br />void CreateBiTree(SqBiTree &原创 2010-11-17 22:07:00 · 3833 阅读 · 2 评论 -
二叉树的链式存储结构 C++代码实现
/*二叉树的链式存储结构*/#include using namespace std;/*二叉链表的定义*/typedef struct BiTNode{ chardata; structBiTNode *lchild,*rchild;}BiTNode;typedef BiTNode * BiTree;//***************************************************//******************************原创 2010-11-18 11:09:00 · 8297 阅读 · 1 评论 -
线索链表的实现 C++代码实现
<br /><br />/************************线索链表的实现*************************/<br />#include <iostream><br />using namespace std;<br /><br />/*线索链表的类型定义*/<br />typedef enum{Child,Thread} Flag;<br />typedef struct ThrNode<br />{<br /> chardata;<br />原创 2010-11-21 00:43:00 · 2252 阅读 · 0 评论 -
字符串的一些问题———关键是KMP算法
/*动态顺序串*/#include using namespace std;/*动态顺序串的定义*/typedef struct DString{ char *ch; int length;}DString;/*初始化动态串*/void initString(DString &S){ S.ch=new char[100]; S.length原创 2011-06-23 16:20:00 · 1091 阅读 · 0 评论 -
图的存储及遍历 深度遍历和广度遍历 C++代码实现
/*图的存储及遍历*/#includeusing namespace std;//-----------------------------------//邻接矩阵的存储及深度和广度遍历//----------------------------------- /*原创 2010-11-27 13:26:00 · 5591 阅读 · 1 评论 -
弗洛伊德算法求最短路径
#include#includeusing namespace std;/*邻接矩阵的类型定义*/#define MAX 10000000#define MAX_VERTEX_NUM 20typedef struct{ string vexs[MAX_VERTEX原创 2010-12-05 12:55:00 · 6377 阅读 · 1 评论 -
用单链表实现一元多项式相加 C++代码
#include <iostream>using namespace std; /*结点的定义*/typedef struct LNode{ float coef; int exp; struct LNode *next;}LNode;typedef LNode *Polynomial; /*多项式的初始化*/voi...原创 2010-10-07 18:10:00 · 20566 阅读 · 5 评论 -
拓扑排序 C++代码实现
#include <iostream> using namespace std; #define MAX 10000000 #define MAX_VERTEX_NUM 20 /*顺序栈的定义*/ #define Stack_Size 100 typedef struct sqStack { int *elem; int top; int stackSize;//栈数组长度 }sqSt...原创 2010-12-01 17:31:00 · 12202 阅读 · 7 评论 -
哈夫曼树及哈夫曼编码 C++代码实现
/*哈夫曼编码*/#include <iostream>using namespace std; //********************************//构造哈夫曼树//******************************** /*哈夫曼树顺序表的定义*/typedef struct{ intweight; ...原创 2010-11-15 21:36:00 · 37674 阅读 · 3 评论 -
顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现
#include using namespace std; /*顺序栈的定义*/#define Stack_Size 100typedef struct sqStack{ char *elem; int top; int st原创 2010-10-11 20:56:00 · 18953 阅读 · 7 评论 -
迪杰斯特拉算法求最短路径 C++代码实现
#include#includeusing namespace std;/*邻接矩阵的类型定义*/#define MAX 10000000#define MAX_VERTEX_NUM 20typedef struct{ string vexs[MAX_VERTEX原创 2010-12-05 12:39:00 · 19937 阅读 · 5 评论 -
循环队列的定义、入队、出队等操作 C++代码实现
#include using namespace std; /*循环队列的类型定义*/const int Queue_Size=100; typedef struct circlQueue{ char *elem; int rear;原创 2010-10-11 21:47:00 · 15644 阅读 · 0 评论 -
选择排序——简单选择排序和堆排序,C++代码实现
<br />#include <iostream>using namespace std;typedef struct{ int r[100+1]; int length;}SqList;//简单选择排序void SimpleSlectSort(SqList &L){ int min,i,j; for(i=1;i<L.length;i++) { min=i; for(j=i+1;j<=L.length;j++) if(L.r[j]<L.r[原创 2011-01-07 16:57:00 · 3042 阅读 · 0 评论 -
用线性表实现的通讯录管理 C++代码
/****************************************//*主控菜单处理测试程序main2.c************//***************************************/#include #include using namespace std;#define LIST_INIT_SIZE 100#define LISTINCREMENT 10int OK=1;int OVERFLOW=0;int ERROR=0;typedef struct原创 2010-11-13 16:38:00 · 5952 阅读 · 0 评论 -
用单链表解决约瑟夫问题 C语言实现
<br /><br /><br />编号为1,2,3,…,n的n个人按顺序针方向围坐一张圆桌旁,每个人手中持有<br />一个密码(正整数)。首先输入一个正整数作为报数上限值m,然后,从第一个人开始按顺序针方向自1开始顺序报数,报到m的人离开桌子,并将他手中的密码作为新的m值,从顺序针方向的下一个就坐在桌旁的人开始重新从1报数,如此下去,直至所有人全部离开桌旁为止。<br />算法思想:<br />用单循环链表来解决这一问题,实现的方法首先要定义链表结点,单循环链表的结点结构与一般单链表的结点结构完全相同,原创 2010-11-09 23:32:00 · 9499 阅读 · 1 评论 -
顺序表的定义、初始化、及插入、删除、查询操作,将算法转化成具体的代码
#include using namespace std;#define LIST_INIT_SIZE 100#define LISTINCREMENT 10int OK=1;int OVERFLOW=0;int ERROR=0;/*线性表的定义*/typedef struct{ char *elem; int length;//当前长度 int listsize;//线性表的长度}SqList;/*线性表的初始化*/int原创 2010-10-01 17:38:00 · 16231 阅读 · 2 评论 -
双链表的定义、初始化、插入、删除,C++代码实现的算法
#include using namespace std;/*双向链表类型定义*/typedef struct duNode{ char data; struct duNode *prior; struct duNode *next;}duNode;typedef duNode *duLinklist;//指针类型,故访问它的成员用“->”。/*初始化双向链表*/void initLinklist_Du(duLinklist &L)//此处叫做引用调用,即实参和形参共用一原创 2010-10-05 02:10:00 · 3681 阅读 · 0 评论 -
用克鲁斯尔算法求最小生成树
<br />/*用克鲁斯尔算法求最小生成树*/#include <iostream>using namespace std;/*邻接矩阵的类型定义*/#define MAX 10000000#define MAX_VERTEX_NUM 20typedef struct{ char vexs[MAX_VERTEX_NUM];//用一维数组存储顶点信息 int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//用二维数组充当矩阵,来存储顶点边的信原创 2010-11-28 17:27:00 · 1879 阅读 · 0 评论 -
用普里姆算法求最小生成树
<br />/*用普里姆算法求最小生成树*/#include <iostream>using namespace std;/*邻接矩阵的类型定义*/#define MAX 10000000#define MAX_VERTEX_NUM 20typedef struct{ char vexs[MAX_VERTEX_NUM];//用一维数组存储顶点信息 int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//用二维数组充当矩阵,来存储顶点边的信息原创 2010-11-28 17:34:00 · 7528 阅读 · 1 评论 -
freopen函数
<br /> <br />通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中。但由于调试往往不能一次成功,每次运行时,都要重新输入一遍测试数据,对于有大量输入数据的题目,输入数据需要花费大量时间。使用freopen函数可以解决测试数据输入问题,避免重复输入,不失为一种简单而有效的解决方法。 <br /><br />函数名:freopen <br />声明:FILE *freopen( const char *path, const转载 2010-11-28 11:54:00 · 5362 阅读 · 3 评论 -
链栈的定义、初始化、出栈、入栈等操作
<br />#include <iostream><br />using namespace std;<br /><br /><br />/*链栈的定义*/<br />typedef struct sNode<br />{<br /> char data;<br /> struct sNode * next;<br />}sNode;<br /><br />typedef sNode *linkStack;<br /><br /><br />/*初始化链栈*/<br />v原创 2010-10-09 20:37:00 · 14795 阅读 · 2 评论 -
链队列的实现,C++代码实现
<br />/*链队列的实现*/<br />#include <iostream><br />using namespace std;<br /><br />/*链队列类型定义*/<br />typedef struct QNode<br />{<br /> struct QNode * next;<br /> char data;<br />}QNode,*queuePtr;//结点的定义<br /><br />typedef struct linkQueue<br />{<b原创 2010-10-12 20:30:00 · 3418 阅读 · 0 评论 -
关键路径的实现 C++代码实现
<br />#include <iostream>using namespace std;#define MAX 10000000#define MAX_VERTEX_NUM 20int ve[MAX_VERTEX_NUM];/*顺序栈的定义*/#define Stack_Size 100typedef struct sqStack{ int *elem; int top; int stackSize;//栈数组长度}sqS原创 2010-12-04 02:28:00 · 8433 阅读 · 3 评论 -
稀疏矩阵的压缩存储及转置,快速转置法,C++代码实现
<br />/*稀疏矩阵的压缩存储及转置*/<br /><br />#include <iostream><br />using namespace std;<br /><br />/*三元组顺序表的类型定义*/<br />#define itemSize 100<br /><br />typedef struct<br />{<br /> int row,col;<br /> int item;<br />}thNode;<br /><br />typedef struct原创 2010-10-20 23:57:00 · 4500 阅读 · 0 评论 -
静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
<br />#include<iostream>using namespace std;typedef struct{ int r[100]; int length;}SSTable;//顺序查找int Search_Seq(SSTable &ST,int k){ int i; ST.r[0]=k;//将0号单元作为哨兵,从而避免了每次查找都要判断i是否越界的问题 i=ST.length; while(ST.r[i]!=k) i--; retur原创 2010-12-23 02:01:00 · 6543 阅读 · 0 评论 -
动态查找之二叉排序树,C++代码实现
<br />#include <iostream>using namespace std;typedef struct BSTNode{ int key; struct BSTNode *lchild,*rchild;}BSTNode,*BSTree;//二叉排序树的插入——递归实现void InsertBST(BSTree &DT,BSTNode *p){ if(DT==NULL) DT=p; else if((DT->key) > (p->key))原创 2010-12-23 02:11:00 · 3169 阅读 · 0 评论 -
哈希表——开哈希表和闭哈希表
<br />#include <iostream>using namespace std;#define HashTable_Size 100//用除留余数法求关键字的哈希地址int Hash(int k,int m){ return k%m;}//**********************************************************//开放地址法——闭哈希表//**************************************原创 2010-12-29 20:33:00 · 6606 阅读 · 4 评论 -
插入排序——直接插入排序和希尔排序,C++代码实现
#include using namespace std;#define MAXSIZE 20typedef struct{ int r[MAXSIZE+1]; int length;}SqList;//顺序表存储的记录//输入记录void Input(SqList &L){ cin>>L.length; for(int i=1;i>L.r[i];}//输出记录void OutLook(SqList &L){ for(int i=1;i原创 2010-12-30 22:46:00 · 2589 阅读 · 0 评论 -
交换排序——冒泡排序和快速排序,C++代码实现
<br />#include <iostream>using namespace std;#define MAXSIZE 20typedef struct{ int r[MAXSIZE+1]; int length;}SqList;//输入记录void Input(SqList &L){ cin>>L.length; for(int i=1;i<=L.length;i++) cin>>L.r[i];}//输出记录void OutLook(Sq原创 2011-01-01 00:32:00 · 1757 阅读 · 1 评论 -
malloc 函数的用法
<br />函数声明(函数原型):<br /><br />void *malloc(int size);<br /><br /><br /><br />说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。<br />从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。比如:<br /><原创 2010-10-01 15:48:00 · 1873 阅读 · 1 评论