- 博客(16)
- 资源 (7)
- 收藏
- 关注
转载 稳定排序和不稳定排序
稳定排序和不稳定排序转自: 转自:http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html 这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是
2016-05-31 17:59:47 245
原创 二叉搜索树的查找、插入、删除操作
对于查找和插入操作相对来说比较简单,删除操作则需要考虑的情况较多。比如有以下些情况,可能有些可以合并,但是我没想到更好的方法,因此代码里有一堆if else,虽然我不喜欢写这样的代码,但也没找到更好的方法。1. 考虑是否是空树、或者需要删除的结点不在树中。2. 考虑整棵树只有一个结点,删除后需要修改入参,将整棵树置空。3. 考虑删除的结点是叶子结点。4. 待删除的结点只
2016-05-30 20:37:52 743
原创 大根堆的插入、删除、修改优先级实现
大根堆其实就是一个一维数组, 不过数组中数据的排列是基于完全二叉树模型的。根节点的数据大于等于左孩子和右孩子节点的数据,然后每个子树都和前面一样。它的主要应用是在优先级队列中, 因为大根堆或小根堆总是能很方便的找出最大的值或最小值,虽然有序的线性表一样可以实现该功能,但是有序线性表的致命缺陷在与入队时为了保持线性表仍是有序的,可能需要移动大量元素, 而大根堆和小根堆则相对有着更好的性能。
2016-05-26 14:22:23 6895 1
原创 二叉树的创建、销毁、各种递归、循环遍历方法(可运行测试)
因为二叉树的定义就是递归的, 所以二叉树、创建、销毁和各种遍历操作都使用递归的方法,会比较好理解。递归其实主要运用到了系统工作栈, 因此可以使用递归实现的,借助用户栈一般也可以实现, 本文中三种遍历方法都使用递归和循环两种方法实现。也可以使用队列来进行层序遍历。由此可见,队列和栈是两种很基础的工具,应该熟练掌握其使用方法。本文中的各种函数都可以输入不同二叉树来测试,唯一麻烦的一点的是输入树时需
2016-05-25 14:47:30 2398
原创 广义表的读取和输出,树的拷贝及比较的实现
1. 树采用链表的形式保存,每一个节点设计成一个数据域和n个指针域, n为树的度,为了方便固定为树的最大度,但是有点浪费空间。2. 实现的函数使用到栈来处理,遍历树时采用递归的方法。//tree.h#include #define DEGREE 3 typedef struct Node{ char ch; struct Node * link[
2016-05-23 18:29:13 1343
原创 带头双向循环链表的插入和删除
typedef struct Element{ int elem; /*other field*/}Element;typedef struct Node * NodePointer;struct Node { Element data; NodePointer llink; NodePointer rlink;};
2016-05-21 16:07:22 1127
原创 带头循环单链表的基本操作
记录一下写过的代码://list.h#include //封装一个带头循环单链表typedef struct Element{ int data; //other field} Element;typedef struct Node{ Element elem; struct Node * link;}Node;
2016-05-20 17:15:30 437
原创 迷宫问题
想了很久, 终于做出来了, 不过数据结构的设计基本都是参照数据结构基础书上来的,如如何表示不同方向?怎么根据不同方向计算下一个位置的坐标等,数据结构设计的好做起来就相对会更方便。大致流程:1. 设计表示数据的结构。如迷宫可以用一个二维数组表示, 坐标也可以用二维数组表示, 移动的方向也可以用一个结构体表示,不同方向存在一个一维数组中, 这样设计的好处是方便计算下一个位置的坐标,以及遍历各个
2016-05-19 12:32:01 346
原创 用单链表实现双向队列
纯为了练习码代码, 熟悉一下链表的使用#include #include #define DQSIZE 10#define LEFT 0 //左边#define RIGHT 1 //右边typedef struct Element{ int key; /*other field*/} Element;typ
2016-05-18 17:35:28 446
原创 循环队列
简单循环队列实现及测试#include #include #define QSIZE 10typedef struct Element{ int key; /*other field*/} Element;typedef struct Queue{ Element elem[QSIZE]; int front;
2016-05-18 12:07:56 257
原创 动态栈
一个简单例子, 记录一下学习过程。为了简单,就源码全放一个文件了#include #include #include #define CAP 10typedef struct Element { int key; /*other*/} Element;typedef struct Stack { Element * pelem
2016-05-18 10:38:41 233
原创 hanoi汉诺塔问题的递归实现
#include void hanoi(int n, char a, char b, char c);//n 个盘子, 从A 移动到C, 借助Bchar ch[3] = {'A', 'B', 'C'};int main(){ int n; printf("Enter a interger: "); scanf("%d", &n);
2016-05-16 09:25:46 442
原创 powerset 幂集函数(组合问题)的递归实现
问题:如果一个集合为{A, B, C}那么他的幂集为{},A B C A B A C A B C B C , 如何用递归实现幂集函数 powerset?这个问题其实思路和 n 个布尔变量,求所有真值组合的问题思路类似,都可归类为组合问题。假设一个集合中有n 个元素{A, B, C ....}, 每个元素都有选中和不选中2中状态,我们可
2016-05-13 17:17:13 4057
转载 ackerman函数的循环实现
在网上看到了一些人在找这个Ackerman函数 ,不知道这个函数的实际含义,首先看到了他的递归形式:注释部分是分析后的结果.int rackerman(int m,int n){ if(m==0) return n+1; //更新n值, else if(n==0) return rackerman(m-1,1); //分析后要入栈一次, 同时n更新为 1
2016-05-12 20:08:38 915
转载 假设有n个布尔变量x1, ..., xn,输出其所有可能的真值集合
例如,如果n=2, 有四种可能:, ,和。编写C语言函数实现之。分析:对于任意一个正整数n,所有可能的情况为2^n种,即n个2相乘。对于每一个元素,有两种可能:true或者false,我们可以将其中一种结果设定为一个长度为n的序列,在每一位上,它的值只能是true或false。可以用下面给出的简单算法来产生其所有可能的序列,即长度为n的序列由下列序列组成:(True,(n-1)序列所有结果),
2016-05-12 16:46:31 977 1
原创 选择排序法及时间测试
#include #include #include #include #define MAX 101void slct_sort(int list[], int n);void show_array(int list[], int n);int main(void){ int n; int list[MAX]; int i;
2016-05-12 14:42:00 536
汇编语言第三版
2018-05-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人