
数据结构
文章平均质量分 80
sjyu_金色年华
这个作者很懒,什么都没留下…
展开
-
二叉树的存储结构及其遍历
最近开始学习数据结构发现,挺有意思的,于是把自己一些收获记录下来:二叉树的存储结构及其遍历 1、顺序存储结构用一组连续的存储空间依次自上而下、自左向右存储二叉树上的结点。//二叉树的顺序存储结构下的前序、中序、后序遍历。#include #define N 12void preorder(int a[],int i)//前序遍历{ if(i<N && a[原创 2013-06-04 20:22:02 · 920 阅读 · 0 评论 -
一周一篇之three
问题描述:有个高度为10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要到达最上面问一共有多少种走法?问题分析:解法一:穷举法(该方法往往不是最有效,但往往是最直接的解决问题的方法)解法二:动态规划法目标要想找到到达从0阶到10阶,那么最后的一步要么是从第8阶到第10阶,要么是从第9阶到第10阶,于是将问题转化为两部分之和:(1) 从0阶到第8阶的方法原创 2017-06-26 18:25:43 · 412 阅读 · 0 评论 -
如何求数组中的最大数和第二大数
/***求数组中第二大数:(1)先排序,再找第二大数,复杂度O(n^2)(2)设置两个变量分别存储最大数和第二大数,遍历数组更新两变量, 复杂度O(n)(3)考虑到效率问题,使用二分法并结合(2),复杂度O(log n)*/#include //函数声明void search1(int * , int , int * , int *);void search2(int * ,原创 2014-01-17 16:48:40 · 1402 阅读 · 0 评论 -
如何求一组数的逆序数
/***求一组数的逆序数*方案一(1)对数组中的每个数计算逆序数,之后再加和,得出整个数组的逆序数,复杂度O(n^2)*方案二(2)借助归并排序的思想求解*/#include #include int compute1(int *begin, int *end){ int *p, *q; int sum1, sum = 0; for(p = begin;原创 2014-01-18 09:59:24 · 2163 阅读 · 0 评论 -
C/C++查找之一(顺序查找、折半查找(二分查找))
进行查找算法,首先得明确数据的存储结构:顺序存储(数组)或链式存储(链表)对于顺序存储,可以有:顺序查找和折半查找(对于后者的前提是此顺序表是有序的);对于链式存储,只能进行顺序查找。1、顺序查找//顺序表的查找#include void search(int *data, int n, int t){ int i, num=0; for(i = 0原创 2013-08-20 14:32:15 · 4412 阅读 · 0 评论 -
字符串处理函数
面试中面试官会经常让你现场写的程序主要集中在字符串处理函数的实现上:1、字符串的复制2、字符串的连接3、字符串的比较4、字符串的查找(查找一个字符串在另一字符串中的位置)5、字符串的转换(atoi函数、atof函数)前三个函数的实现都比较容易,但必须注意的一点是:一定要注意字符串结束标识符是否需要认为的添加到目的字符串中。字符串的查找,其实就是模式匹配,数据结构中降到K原创 2013-12-09 10:41:51 · 620 阅读 · 0 评论 -
哈夫曼树的构造
哈夫曼树的特点:n个结点全为叶子结点,并且总共有2*n-1个结点,权值路径之和最小。#include #include #define max 100struct huffmantree{ int weight; struct huffmantree *lchild; struct huffmantree *rchild; struc原创 2013-08-28 00:15:37 · 1138 阅读 · 0 评论 -
C/C++ 排序之一(冒泡排序、选择排序、交换排序)
#include void bubble_sort(int *begin, int *end){ int *i, *j, *k; for(i = end; i >= begin; i --) for(j = begin; j + 1 <= end; j ++) if(*j > *(j + 1))原创 2013-08-19 19:33:58 · 1160 阅读 · 0 评论 -
链表基本操作(建立、修改,插入、删除、打印)
#include #include struct list{ int data; struct list *next;};//头插法建立链表struct list *headcreate(){ struct list *head, *p; int N,i; head=NULL; printf("输入要建立的链表结点个数N=");原创 2013-08-17 16:19:46 · 780 阅读 · 0 评论 -
图的深度优先搜索(DFS)、广度优先搜索(BFS)
深度优先搜索(DFS)、广度优先搜索(BFS)图的邻接矩阵形式#include #include #include #define MAX 100typedef struct{ int edges[MAX][MAX]; //邻接矩阵 int n; //顶点数 int e;原创 2013-08-24 16:07:45 · 980 阅读 · 0 评论 -
二叉树前序序列、中序序列、后序序列互求
两种情况:1、已知前序序列和中序序列,求后序序列2、已知后序序列和中序序列,求前序序列//已知前序序列和中序序列,求后序序列#include void preorder_inorder_to_postorder(char *preorder, char *inorder, int length){ if(length > 0) {原创 2013-08-23 21:47:07 · 1929 阅读 · 0 评论 -
二叉排序树的操作(建立、插入、删除和查找)
二叉排序树的建立、插入、删除和查找(删除待补充)#include #include typedef struct node{ int key; struct node *lchild,*rchild;}BSTNode;BSTNode *InsertBST(BSTNode *T, int key){ BSTNode *f, *p = T;原创 2013-08-22 15:55:41 · 5926 阅读 · 1 评论 -
C/C++ 排序之四(计数排序)
计数排序counting sort#includevoid counting_sort( int a[], int n ){ int count = 0 ; int k = 0 ; while( k < n - 1) { for( int i = k + 1 ; i < n ; i++ ) {原创 2013-08-20 21:03:30 · 806 阅读 · 0 评论 -
C/C++排序之五(堆排序)
堆排序heap_sort#include void adjust_heap(int *begin, int *end, int index){ int temp = *(begin + index); int child = (index << 1) + 1; while(child <= end - begin) {原创 2013-08-21 21:50:33 · 664 阅读 · 0 评论 -
C/C++ 排序之三(快速排序(递归))
快速排序(递归)#include int *parse(int *begin, int *end){ int temp = *begin;//存储第一个数 //寻找第一个数要分割的位置 while(begin < end) { while(begin < end && temp <= *end) end --;原创 2013-08-20 19:38:46 · 827 阅读 · 0 评论 -
C/C++排序之二(直接插入排序、 折半插入排序、归并排序(递归))
直接插入排序、 折半插入排序4、直接插入排序insertion_sort#include void insertion_sort(int *begin, int *end){ int *i, *j, temp; for(i = begin + 1; i <= end; i ++) { temp = *i; for原创 2013-08-19 21:17:11 · 1447 阅读 · 0 评论 -
如何判断一个正整数是否是2的乘方
实现一个方法,判断一个正整数是否是2的乘方(比如16是2的4次方,返回True;否则返回False)方法一:从1开始循环乘以2,直到结果第一次大于或者等于目标值,如果相等,则放回True,如果大于,则返回False方法二:使用该数循环除以2,如果最终商是1并且余数是0,则返回True;循环中一旦出现余数不为0,则返回False方法三:借助位运算如果该数是2的乘方,则该数的二进制表示原创 2017-07-25 15:40:25 · 2834 阅读 · 0 评论