数据结构
daa20
这个作者很懒,什么都没留下…
展开
-
尾插法的两种方式的对比
#include <iostream>#include <stdlib.h>using namespace std;#define DataType inttypedef struct Node{ DataType data; struct Node *link;}LinkNode,*LinkList;/* run this program using the consol原创 2016-10-03 15:25:28 · 2471 阅读 · 1 评论 -
图--邻接矩阵法和邻接链表法的比较
邻接矩阵法由于没有相连的边也占有空间,因此存在浪费空间的问题,而临街链表法合理利用存储空间;邻接链表法比较耗时,牺牲很大的时间来查找,因此比较耗时,而邻接矩阵法相比邻接链表法来说,时间复杂度低;总结,邻接矩阵法:用时间换空间;邻接链表法:用空间换时间。原创 2016-04-14 15:03:31 · 2206 阅读 · 1 评论 -
图--邻接链表法
//LinkList.h#ifndef _LINKLIST_H_#define _LINKLIST_H_typedef void LinkList;typedef struct _tag_LinkListNode LinkListNode;struct _tag_LinkListNode{ LinkListNode* next;};LinkList* LinkList_原创 2016-04-14 14:55:38 · 834 阅读 · 0 评论 -
图--邻接矩阵法
//MGraph.h#ifndef _MGRAPH_H_#define _MGRAPH_H_typedef void MGraph;typedef void MVertex;typedef void (MGraph_Printf)(MVertex*);MGraph* MGraph_Create(MVertex** v,int n);void MGraph_Destroy(MG原创 2016-04-13 09:42:08 · 524 阅读 · 0 评论 -
线索化二叉树--单链表实现
//SeqList.h#ifndef _SEQLIST_H_#define _SEQLIST_H_typedef void SeqList;typedef void SeqListNode;SeqList* SeqList_Create(int capacity);void SeqList_Destroy(SeqList* list);void SeqList_Clear(原创 2016-04-08 16:03:42 · 336 阅读 · 0 评论 -
线索化二叉树--节点空指针实现过程
方法1:通过节点空指针来实现;//BTree.h#ifndef _BTREE_H_#define _BTREE_H_#define BT_LEFT 0#define BT_RIGHT 1typedef unsigned long long BTPos; //64bit typedef void BTree;typedef struct _tag_BTreeNode原创 2016-04-08 16:01:18 · 792 阅读 · 0 评论 -
二叉树--前序遍历、中序遍历、后序遍历、层次遍历
//BTree.h#ifndef _BTREE_H_#define _BTREE_H_#define BT_LEFT 0#define BT_RIGHT 1typedef unsigned long long BTPos; //64bit typedef void BTree;typedef struct _tag_BTreeNode BTreeNode; /转载 2016-04-07 16:23:44 · 319 阅读 · 0 评论 -
通用树--GTree(双亲孩子法)
//-- LinkList.h #ifndef _LINKLIST_H_#define _LINKLIST_H_typedef void LinkList;typedef struct _tag_LinkListNode LinkListNode;struct _tag_LinkListNode{ LinkListNode* next;};LinkList* LinkList转载 2016-03-28 18:43:26 · 2003 阅读 · 0 评论 -
二叉树--兄弟孩子表示法
//BTree.h#ifndef _BTREE_H_#define _BTREE_H_#define BT_LEFT 0#define BT_RIGHT 1typedef void BTree;typedef unsigned long long BTPos;typedef struct _tag_BTreeNode BTreeNode;struct _tag_BTreeN转载 2016-04-06 10:12:00 · 5364 阅读 · 0 评论 -
图的深度遍历和广度遍历--邻接链表法
//LinkList.h#ifndef _LINKLIST_H_#define _LINKLIST_H_typedef void LinkList;typedef struct _tag_LinkListNode LinkListNode;struct _tag_LinkListNode{ LinkListNode* next;};LinkList* LinkList_原创 2016-04-15 09:52:54 · 1256 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历--邻接矩阵法
//LinkQueue.h#ifndef _LINKQUEUE_H_#define _LINKQUEUE_H_typedef void LinkQueue;LinkQueue* LinkQueue_Create();void LinkQueue_Destroy(LinkQueue* queue);void LinkQueue_Clear(LinkQueue* queue);原创 2016-04-15 10:46:27 · 2397 阅读 · 0 评论 -
动态规划算法之: 最长公共子串
最长公共子串与最长公共子序列区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。 其实这是一个序贯决策问题,可以用动态规划来求解。我们采用一个二维矩阵来记录中间的结果。这个二维矩阵怎么构造呢?直接举个例子吧:”bab”和”caba”(当然我们现在一眼就可以看出来最长公共子串是”ba”或”ab”) b a bc 0 0 0a 0转载 2016-09-20 15:00:03 · 594 阅读 · 0 评论 -
单链表之双向链表
//DLinkList.h#ifndef _DLINKLIST_H_#define _DLINKLIST_H_typedef void DLinkList;typedef struct _tag_DLinkListNode DLinkListNode;struct _tag_DLinkListNode{ DLinkListNode* next; DLinkListNode*转载 2016-07-09 11:49:30 · 375 阅读 · 0 评论 -
单链表の循环链表
//CircleList.h#ifndef _CIRCLELIST_H_#define _CIRCLELIST_H_typedef void CircleList;typedef struct _tag_CircleListNode CircleListNode;struct _tag_CircleListNode{ CircleListNode* next;};CircleLi转载 2016-07-09 11:43:16 · 307 阅读 · 0 评论 -
线性表的顺序存储
1//SeqList.h#ifndef _SEQLIST_H_#define _SEQLIST_H_//Êý¾Ý·â×° typedef void SeqList;typedef void SeqListNode;SeqList* SeqList_Create(int capacity);void SeqList_Destroy(SeqList* list);void原创 2015-11-26 08:44:05 · 294 阅读 · 0 评论 -
静态二分查找
二分查找//StaticBinarySearch.c#include #include #include #define SIZE 20void print_array(int a[],int len){ int i = 0; for(i=0;i<len;i++) { printf("%d,",a[i]); } printf("\n");}void ar原创 2016-04-20 10:32:01 · 286 阅读 · 0 评论 -
查找--静态查找与动态查找
静态查找:1.查询某个特定的数据元素是否在查找表中;2.检索某个特定的数据元素的各种属性。动态查找:1.在查找表中插入一个元素;2.从查找表中删去某个数据元素。(需要借助于顺序表)//SeqList.h#ifndef _SEQLIST_H_#define _SEQLIST_H_typedef void SeqList;typedef void原创 2016-04-19 17:06:49 · 3051 阅读 · 0 评论 -
图的最短路径-Dijkstra和Floyd
//Dijkstra.c#include #include /*--------------------------------------------------*time:2016-04-17*description: find the shortest path from the Vertex of sv to the Vertex of 4*-----------------原创 2016-04-19 14:33:14 · 291 阅读 · 0 评论 -
图的--最小-连通-网
#include #include /*------------------*time:2016-04-16*------------------*/#define VNUM 5#define MV 65536int P[VNUM]; //P[i]:the begin of Vertex,i: the end of Vertex int Cost[VNUM];原创 2016-04-16 22:02:24 · 394 阅读 · 0 评论 -
6种排序大集合--由小到大,由大到小!
//选择排序 #include #include #include //--------------------------------------------------------------------//从大到小排序 冒泡排序 void sort_bubble_down(int* a,int len){ int temp = 0; int i = 0; int j =原创 2016-03-21 21:42:14 · 5775 阅读 · 0 评论 -
冒泡排序、选择排序和插入排序--由小到大,,由大到小
//选择排序 #include #include //从大到小排序 void sort_down(int* a,int len){ int temp = 0; int i = 0; int j = 0; for(i=0;i<len;i++) { for(j=i+1;j<len;j++) { if(a[i]<a[j]) { temp = a[i];原创 2016-03-15 21:56:15 · 2564 阅读 · 0 评论 -
排序中,两个变量的比较
//多变量比较 #include #include struct Ele{ char ID[20]; int key1; int key2;}; int compare_1(Ele* le,Ele* re){ if(le->key1 > re->key2) { return 1; } else if(le->key1 == re->key2) { i原创 2016-03-15 20:44:34 · 379 阅读 · 0 评论 -
找出数组中出现次数超过数组长度一半的数
/*找出数组中出现次数超过数组长度一半的数 */#include /* run this program using the console pauser or add your own getch, system("pause") or input loop */using namespace std;int main(int argc, char *argv[]) {转载 2016-01-16 09:27:24 · 466 阅读 · 0 评论 -
自行编写内存复制函数MyMemcpy()函数
/* 自行编写内存复制函数MyMemcpy()函数 */#include using namespace std;//-------------------------------------void* MyMemcpy(void* dest,const void* src,size_t count){// if(dest == NULL) return NULL;//转载 2016-01-15 18:58:06 · 1042 阅读 · 3 评论 -
自行编写数字转换成字符串Myatoi()函数
/* 自行编写数字转换成字符串Myatoi()函数 */#include using namespace std;//-------------------------------------int Myatoi(char* str){ int ret = 0; int i = 0; if(str==NULL) return 0; int flag = 1;原创 2016-01-15 18:20:11 · 827 阅读 · 0 评论 -
自行编写数字转换成字符串Myitoa()函数
/* 自行编写数字转换成字符串Myitoa()函数 */#include using namespace std;//-------------------------------------char* Myitoa(int num){ int flag = 0; if(num < 0) { flag = -1; num = -num; } //char*原创 2016-01-15 18:02:18 · 2011 阅读 · 0 评论 -
自行编写Strcpy()函数
/* 自行编写Strcpy()函数 */#include #include using namespace std;//-------------------------------------char* Strcpy(char* dest,const char* src){ if(dest == NULL) return NULL; if(src == NULL) re原创 2016-01-15 16:32:43 · 431 阅读 · 0 评论 -
普通排序--插入排序
#include #include /*当插入第i(i >= 1)个数据元素时,前面的V[0],V[1],...,V[i-1]已经排好序,这时,用V[i]的关键字与V[i-1],V[i-2]...的关键字进行比较,找到插入位置,即将V[i]插入,原来位置上的对象向后移动。 */ /* run this program using the console pauser or a原创 2015-11-26 08:39:15 · 455 阅读 · 0 评论 -
线性表的链式存储
1//LinkList.h#ifndef _LINKLIST_H_#define _LINKLIST_H_typedef void LinkList;typedef struct _tag_LinkListNode LinkListNode;struct _tag_LinkListNode{ LinkListNode* next;};LinkList* LinkL原创 2015-11-26 08:46:52 · 310 阅读 · 0 评论 -
普通排序--冒泡排序
1#include #include /*设待排数据元素序列中的元素个数为n。最多做n-1趟,i=1,2,3...n-1.在第i趟中,从后向前,j=n-1,n-2...i,两两比较V[j-1]和V[j]的关键字,如果发生逆序,则交换V[j-1]和V[j] .*/ /* run this program using the console pauser or add your原创 2015-11-26 09:21:26 · 488 阅读 · 0 评论 -
找出数组{1,2,3,4,...N-1}中出现的唯一重复数
异或法:/*找出数组{1,2,3,4,...N-1}中出现的唯一重复数 */#include /* run this program using the console pauser or add your own getch, system("pause") or input loop */using namespace std;int xor_findDup(int* a转载 2016-01-17 10:15:57 · 605 阅读 · 0 评论 -
CPU大小端的判断
#include #include //X86 and MCU is little endian./* run this program using the console pauser or add your own getch, system("pause") or input loop */int checkType(){ unsigned int value = 0x1122;转载 2016-01-15 09:16:21 · 312 阅读 · 0 评论 -
静态链表
//StaticList.h#ifndef _STATICLIST_H_#define _STATICLIST_H_typedef void StaticList;typedef void StaticListNode;StaticList* StaticList_Create(int capacity);void StaticList_Destroy(StaticList* l转载 2016-03-02 20:08:46 · 314 阅读 · 0 评论 -
不使用第三个变量,进行两个变量的值交换
/*不使用第三个变量,进行两个变量的值交换 */#include using namespace std;//-------------------------------------void swap1(int& a,int& b){ a = a+b; b = a-b; a = a-b;}void answer1(){ int a = 10; int b = 20转载 2016-01-15 15:31:30 · 386 阅读 · 0 评论 -
求1+2+3+...+n,要求不能使用乘,除,for ,while,if ,else ,switch,case
/*求1+2+3+...+n,要求不能使用乘,除,for ,while,if ,else ,switch,case */#include /* run this program using the console pauser or add your own getch, system("pause") or input loop */using namespace std;/*--原创 2016-01-15 15:12:21 · 432 阅读 · 0 评论 -
不使用流程控制语句,打印1~1000
#include /* run this program using the console pauser or add your own getch, system("pause") or input loop */using namespace std;//---------------------------#define X Y,Y,Y,Y,Y,Y,Y,Y,Y,Y#defin原创 2016-01-15 11:49:59 · 450 阅读 · 0 评论 -
a是数组名,(int*)(&a + 1)是什么意思呢
&a是 int (*) [5] 的类型,,&a+1 就加了 5*4个字节(5*4); sizeof(int (*)[5]) = 20; //sizeof(int[5]) = 20;pt 是 int * 的类型,,pt-1 就是 后退4个字节,因为sizeof(int * ) = 4#include #include /* run this program usi原创 2016-01-15 11:20:12 · 3815 阅读 · 0 评论 -
函数指针的使用
#include using namespace std;typedef void (*Func)(int,int);void sum(int a,int b){ cout << "a+b = " << a + b << endl;}void multi(int a,int b){ cout << "a*b = " << a*b << endl;}int main(in原创 2016-01-15 10:35:03 · 352 阅读 · 0 评论 -
常量指针 和 指针常量 的使用
#include //常量指针和指针常量的使用 int main(char argc,char* argv[]){ int a = 10; int b = 20; int c = 30; const int* pt1 = &a; //常量指针 pt1 = &b; printf("%d\n",*pt1); int* const pt2 = &c; //指针原创 2016-01-15 09:51:35 · 314 阅读 · 0 评论 -
可变参数求和
#include #include //可变参数求和 /* run this program using the console pauser or add your own getch, system("pause") or input loop */int sum(int count,...){ int* pt = &count +1; int i = 0; int ret =原创 2016-01-15 09:25:18 · 1162 阅读 · 0 评论