
数据结构
李逝水
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Train Problem I
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14715 Accepted Submission(s): 5421 Problem Description As the new te原创 2013-05-04 21:26:18 · 574 阅读 · 0 评论 -
sscanf函数的用法收藏
sscanf函数的用法收藏 头文件 #include 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转载 2013-05-28 20:30:51 · 751 阅读 · 0 评论 -
已知二叉树的先序和中序求后序遍历
已知二叉树的先序和中序求后序遍历 二叉树的遍历算法在其他树操作的基础 已知先序和中序求二叉树的后序遍历算法核心是 1、从先序遍历中读入根节点 2、从中序遍历中找到与根节点相等的元素,以此节点将中序序列分成两个部分,左边的为二叉树的 左子树,右边为二叉树的右子树; 3、递归调用上述步骤得到根节点的左、右子树 #include #include #define原创 2013-05-28 15:37:13 · 804 阅读 · 0 评论 -
平衡树
#include using namespace std ; typedef struct node //树的节点信息 { int data ; int bf ; struct node *lchild , *rchild ; }node , *tree ; /*右旋*/ void R_Rotate(tree &p) { tree lc ; lc = p-原创 2013-05-28 15:40:46 · 593 阅读 · 0 评论 -
直接插入排序
/*直接插入排序*/ /* 直接插入排序的思路:假设有系列的数据,然后从中取出一位数,和已经排好序的序列中的数据比较,找到合适的插入位置 插入数据,重复上面的操作,做到将数据插入完毕结束。 */ void InsertSort(Sqlist &L) { for( int i = 2; i <= L.lenght ; i ++) //取第i个数据,和i-1的元素比较,如果比它小,继续和i-2原创 2013-06-03 21:11:12 · 407 阅读 · 0 评论 -
折半插入排序
/*折半插入排序 折半插入排序,只是减少了查找关键词的位置的查找过程减少了比较次数,但后移这一部分没有改变 和直接插入排序一样 */ void BInsertSort(SqList &L) { for(int i = 2 ; i<=L.lenght ; i ++) { L.r[0] = L.r[i] ; int low , high ;原创 2013-06-03 21:10:27 · 480 阅读 · 0 评论 -
快速排序+递归实现
/* 交换顺序表L中字表r[low..high]的记录,轴记录到位, 并返回它的位置,此时在它之前(后)的记录均不大于它。 */ int Partition(Sqlist &L, int low , int high) { L.r[0] = L.r[low] ; int pivotkey = L.r[low].key ; while(low<high){ //从low向上找原创 2013-06-03 21:35:44 · 571 阅读 · 0 评论 -
归并排序
void Merge(Type sr[] ,Type tr[] , int i , int m , int n ) { /*将有序的sr[i..m]和sr[m+1.n]归并到tr[i..n]*/ for(int j = m + 1 , k = i ; i <= m && j<=n ; k++) { if(sr[i].key > sr[j].key)原创 2013-06-03 22:43:11 · 482 阅读 · 0 评论 -
简单选择排序
/*简单选择排序*/ int SelectMin(Sqlist L, int i ) { //从L.r[i...L.lenght]中选出最小的数,并返回下标 int k = i ; int min = L.r[i]; for( int j = i + 1 ; j< L.lenght ; j ++) if(min > L.r[j]) {原创 2013-06-03 21:44:11 · 447 阅读 · 0 评论 -
堆排序 (建立大顶堆)
/*堆栈排序:建立大顶堆*/ void HeadAdjust(HeapType &H , int s , int m ) { /*已知H.r[s..m]中记录的关键词除了H.r[s].key之外均满足堆的定义,本函数调整H.r[s] 的关键词,使H.r[s..m]成为一个大顶堆(对其中的记录关键词而言)*/ int rc = H.r[s]; for( int j原创 2013-06-03 22:08:55 · 2385 阅读 · 1 评论 -
/*深度优先建立深林,孩子兄弟法*/
/*深度优先建立深林,孩子兄弟法*/ void DFSForest(Graph G , Tree &T) { T = NULL ; memset(vi , 0 , sizeof(vi)); for( v = 0 ; v < G.vexnum ; v ++) if(!vi[v]){ p = (Tree)malloc(sizeof(node)); *p = {原创 2013-10-01 10:09:40 · 736 阅读 · 0 评论 -
链式链表的相关操作+删除+添加+逆序+遍历
http://blog.youkuaiyun.com/niuer09/article/details/5961004 (关于逆序的详细介绍)#include using namespace std ; typedef struct node { char data ; struct node * next ; }node , *List ; /*创建链表*/ void Create原创 2013-05-22 21:59:49 · 660 阅读 · 0 评论 -
Twin Prime Conjecture + 数论
Twin Prime Conjecture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1872 Accepted Submission(s): 576 Problem Description If we def原创 2013-05-28 20:07:26 · 799 阅读 · 0 评论 -
二叉查找树
#include using namespace std ; typedef struct { int key ; }ElemType ; typedef struct node { ElemType data ; struct node *lchild, *rchild ; }node , *tree ; /*在根指针T所指的二叉排序树中递归地查找某关键词等于原创 2013-05-27 21:49:18 · 440 阅读 · 0 评论 -
顺序表的相关操作+删除+添加+遍历+逆序
#include using namespace std ; #define MAXSIZE 100 //初始分配的大小 #define ADDSIZE 10 //内存不够每次增加的内存 typedef struct List { char *Elem ; int Length ; int ListSize ; }List ; /*创建链表*/ void Creat原创 2013-05-22 21:58:47 · 880 阅读 · 0 评论 -
二叉树的相关操作+先序(中序,后序)遍历 + 非递归中序遍历
#include #include #include using namespace std ; typedef struct node //树节点的结构体 { char data ; struct node *lchild , *rchild ; }node , *tree ; /* 创建一棵树 */ bool CreateTree(tree &T) {原创 2013-05-22 22:01:20 · 799 阅读 · 1 评论 -
队列相关操作
#include using namespace std ; typedef struct node { char data ; struct node *next ; }node , *QueueLink; typedef struct { QueueLink front ; QueueLink rear ; }Queue ; /*初始化*/ void原创 2013-05-25 19:27:55 · 488 阅读 · 0 评论 -
串的相关操作
/*串的堆分配*/ #include using namespace std ; typedef struct Hstring { char *ch ; int lenght ; }Hstring ; /*初始化串*/ void Init(Hstring &s) { s.ch = (char * ) malloc(sizeof(char)) ; if(!s.ch原创 2013-05-25 20:05:23 · 437 阅读 · 0 评论 -
KMP算法
/* KMP算法:假设a[]是主串,b[]是模式串 */ #include using namespace std ; int next[1002] ; void get_next(char a[]) { int i = 0 , j = -1 ,lena = strlen(a); next[0] = -1; while( i < lena) { if( j ==原创 2013-05-25 20:34:26 · 451 阅读 · 0 评论 -
haffmanTree(哈夫曼树)的相关操作 + 两种遍历哈弗曼算法+ 无递归遍历+ 叶子节点遍历
#include using namespace std ; typedef struct node//节点的信息 { int weight ; int parent , lchild , rchild ; }node , *HuffmanTree; typedef char * * HuffmanCode ; /*按升序排*/ int cmp(const void原创 2013-05-26 15:30:29 · 3755 阅读 · 1 评论 -
求一个集合的所有子集
#include using namespace std ; void outprint(char *b) { cout<<b<<endl; } /*从a中获取第j位置的字符,用x返回*/ void getElem(char *a , int j , char &x) { x = a[j] ; } /*将x插入集合b的k位置上*/ void Insert(cha原创 2013-05-26 21:26:58 · 585 阅读 · 0 评论 -
树的线索化
#include #include using namespace std ; typedef enum pointerTag{Link , Thread }pointerTag; //枚举两个数0,1 typedef struct node //树的节点信息 { char data ; struct node *lchild , *rchild ; pointer原创 2013-05-25 22:07:59 · 606 阅读 · 0 评论 -
循环队列 + 插入 + 删除 + 遍历等操作
#include using namespace std ; #define MAXSIZE 100 typedef struct Queue { char *base ; int front ; int rear ; }Queue ; /*初始化循环队列*/ void Create(Queue &q) { q.base = (char *)malloc(MA原创 2013-05-25 19:24:29 · 8647 阅读 · 0 评论 -
栈的相关操作
#include using namespace std ; #define STACKSIZE 100 #define ADDSIZE 10 typedef struct Stack { char *base ; char *top ; int StackSize ; }Stack ; /*初始化栈*/ void CreateStack(Stack &s) {原创 2013-05-25 19:29:18 · 476 阅读 · 0 评论 -
使用邻接表求拓扑序列
/*实现拓扑序列*/ #include #include using namespace std; #define MAX 100 typedef struct node //节点的结构体 { int data ; struct node *next ; }node; node *e[MAX] ; int edge[MAX] ; /*利用加边法建立邻接表*/ vo原创 2013-05-27 19:51:37 · 1971 阅读 · 0 评论 -
/*希尔排序算法*/
/*希尔排序算法*/ void ShellInsert( Sqlist &L , int dk ) //实现插入操作 { /*L为链表,dk为递增序列*/ for( i = dk + 1 ; i <= L.length() ; i ++ ) if(LT(L.r[i].key , L.r[i-dk]).key){ L.r[0] = L.r[i] ; for( j =原创 2013-10-01 19:20:43 · 597 阅读 · 0 评论