数据结构
小海歌哥
这个作者很懒,什么都没留下…
展开
-
单链表操作,创建,遍历,插入,删除,排序等操作
#include #include #include #include /*typedef enum c_bool{ false = 0, true = 1,}bool;*/ //由于c当中没有布尔类型,只能够通过枚举来定义了or通过头文件也可以 typedef struct Node{ int data; struct Node * pNext;}NOD原创 2015-03-01 21:02:24 · 560 阅读 · 0 评论 -
几种基本的插入排序
1.插入排序插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。时间复杂度:O(n^2);算法描述:转载 2016-10-08 15:19:42 · 688 阅读 · 0 评论 -
解决哈希表的冲突-开放地址法和链地址法
在实际应用中,无论如何构造哈希函数,冲突是无法完全避免的。1 开放地址法 这个方法的基本思想是:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。这个过程可用下式描述: H i ( key ) = ( H ( key )+ d i ) mod m ( i = 1,2,…… , k ( k ≤ m – 1)) 其中: H ( key ) 为关键转载 2016-10-26 10:33:16 · 2239 阅读 · 0 评论 -
归并排序
#include #include "string.h"#include "iostream"using namespace std;//从前往后取,取小的放到中间数组里面去 /*void merge(int* unsorted, int first, int mid, int last, int* sorted) { int i = first, j = mid;原创 2016-06-14 14:00:04 · 269 阅读 · 0 评论 -
树、森林和二叉树的转换
树转换为二叉树(1)加线。在所有兄弟结点之间加一条连线。(2)去线。树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线。(3)层次调整。以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子) 森林转换为转载 2016-05-18 10:29:45 · 354 阅读 · 0 评论 -
经典排序算法 - 归并排序Merge sort
经典排序算法 - 归并排序Merge sort原理,把原始数组分成若干子数组,对每一个子数组进行排序,继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组举例无序数组[6 2 4 1 5 9]先看一下每个步骤下的状态,完了再看合并细节第一步 [6 2 4 1 5 9]原始状态第二步 [2 6] [1 4] [5 9]两两合转载 2015-11-01 15:32:20 · 540 阅读 · 0 评论 -
快速排序(二)
#include int a[100]; //全局变量,两个函数中都要用到void quickSort(int, int);int main(){ int i, j, temp, left, right, n; printf("请输入需要排序的个数:"); scanf("%d",&n); for(i = 0; i < n; i++){ scanf("%d", &a[i])原创 2015-04-21 21:18:01 · 371 阅读 · 0 评论 -
冒泡排序
#include typedef struct student{ char name[20]; char score;}s;int main(){ int i, c, j; printf("请输入需要排序的学生个数:"); scanf("%d",&c); s st[100],t; for(i = 0; i < c; i++){ scanf("%s %d",&st[i]原创 2015-04-21 18:28:35 · 382 阅读 · 0 评论 -
快速排序(一)
#include int * quickSort(int *, int, int);int index(int *, int, int);int main(void){ int i; int low = 0; int high = 7; int a[8] = {1,3,5,2,6,7,9,0}; quickSort(a,low,high); printf("快速升序后的值为:原创 2015-03-13 11:01:04 · 357 阅读 · 0 评论 -
是否为回文判断,栈的思想
int main(){ int top = 0; int next, i; char a[100], s[100]; printf("请输入一串字母或数字:\n"); gets(a); int len = strlen(a); int mid = len/2; if(len % 2 == 0){ next = mid; } else next = mid+1; //进原创 2015-04-22 15:47:15 · 856 阅读 · 0 评论 -
链式二叉树
#include #include struct BTNODE{ int data; struct BTNODE *pLeftChild; struct BTNODE *pRightChild;};struct BTNODE * creatBTnode(void);void prTraverseBT(struct BTNODE *);void miTraverseBT(str原创 2015-03-12 14:31:12 · 455 阅读 · 0 评论 -
汉诺塔---递归算法
#include void hanuota(int,char,char,char);//第一个char是起始盘子,中间的char是借助的盘子,最后一个char是要到达的位置,理解了这个下边递归调用就很好理解了 int main(void){ char ch1 = 'A'; char ch2 = 'B'; char ch3 = 'C'; int n; printf("请输入要汉诺塔n的原创 2015-03-09 15:20:27 · 668 阅读 · 0 评论 -
队列的创建,入队,出队,遍历
#include #include typedef struct queue{ int * pBase; int front; int rear;}QUEUE;void init(QUEUE *);bool enQueue(QUEUE *,int);bool IsFullQueue(QUEUE *);bool traverseQueue(QUEUE *);bool IsE原创 2015-03-05 15:02:55 · 1937 阅读 · 0 评论 -
栈的操作,创建,遍历,入栈,出栈
#include #include #include typedef struct node{ int data; struct node *pNext;}NODE, *PNODE;typedef struct stack{ PNODE pTop; PNODE pBottom; }STACK, *PSTACK;void init(PSTACK s);void pus原创 2015-03-02 21:28:19 · 1501 阅读 · 0 评论 -
【转】任务分配问题---匈牙利算法
原文自:https://www.cnblogs.com/chenyg32/p/3293247.html一、问题描述问题描述:N个人分配N项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配给一个人是需要支付报酬,如何分配任务,保证支付的报酬总数最小。问题数学描述: 二、实例分析---穷举法在讲将匈牙利算法解决任务问题之前,先分析几个具体实例。以3个工作人员和3项任务为实例,下...转载 2018-05-13 16:25:01 · 811 阅读 · 0 评论