Data Structure
文章平均质量分 91
静革 justme0.com
这个作者很懒,什么都没留下…
展开
-
求二叉树的带权路径长度(深搜或广搜)
考研昨天结束了,专业课我考得不好,是408,算法题13分。今年是求二叉树的带权路径长度,我就写了算法思想,代码空白,因为时间来不及了,慌了,是心态的问题吧,做到最后有种天要塌下来的感觉,回来后很沮丧,因为我觉得自己是可以写出程序的,不服啊! 下面说说这道题目。树的带权路径长度(Weighted Path Length)定义:树中所有叶子的带权路径长度之和。比如下面这棵树,WPL就是3*原创 2014-01-06 17:28:56 · 7867 阅读 · 3 评论 -
求二叉树高度(更新:用C++14编写)
因为树是递归定义的,所以用递归算法很方便。#define _CRT_SECURE_NO_WARNINGS#include #include using namespace std;struct Node { char data; Node *lchild; Node *rchild;};void High(Node *T, int &h){ if (T == NULL原创 2012-06-27 00:29:22 · 15285 阅读 · 8 评论 -
用二级指针操作不带头结点的单链表
在不带头结点的单链表中删除特定元素,一种很麻烦的情况是首结点即要删的结点,所以往往标识一个链表的 head 就会改变,而在删除函数中要改变客户端的 head,就必须传入 head 的地址,否则客户端的 head 永远不会改变,也就是说,若形参为 Node * 类型,修改的只是 head 的副本,这是C语言中的基础问题。这篇博客是我读了皓哥的这篇文章《Linus:利用二级指针删除单向链表》有感而写的原创 2013-10-06 00:56:32 · 3295 阅读 · 8 评论 -
八皇后问题
1、介绍先上张图来说明用回溯法解八皇后问题的每一步: 2、程序对着严蔚敏的书写的,写好后运行竟然一次性成功了,没有任何bug,我鸡冻了。上代码:// N皇后问题#include using namespace std;#define N 8bool matrix[N + 1][N + 1] = {0};bool原创 2012-05-06 22:03:20 · 37905 阅读 · 15 评论 -
用 C++ 标准模板库(STL)的 vector 实现二叉搜索树(BST)
本文由 Justme0 翻译自 Code Project 转载请参见文章末尾处的要求。介绍众所周知,要建一棵树,我们需要关注它的内存分配与释放。为了避开这个问题,我打算用C++ STL(vector和deque)来建一棵小型的BST。很明显,这篇文章是出于这个想法的。 背景BST是应用最广泛的数据结构之一。C是首选语言,不过因为C++尤其是C++11的出现,我更有兴翻译 2013-09-05 17:31:07 · 7152 阅读 · 2 评论 -
完美二叉树(perfect)与正则二叉树(strict)的概念
“满二叉树(full)”的定义在国内和国外完全不同,国内指“完美二叉树(perfect)”,国外指“正则二叉树(strict)”,所以我建议国内外都取消“满二叉树(full)”这个叫法,这样就没有不必要的麻烦了。总结如下:参考资料:http://www.stackpop.org/html/366_cn_us_difference_ds.htmlhttp://st原创 2013-02-25 10:36:28 · 7367 阅读 · 0 评论 -
插入排序之表插入
表插入时间复杂度O(n^2)附加空间O(1)稳定排序#define _CRT_SECURE_NO_WARNINGS#include using namespace std;#define LEN 8 // 有LEN个元素要排struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo; int原创 2012-05-20 00:09:44 · 1430 阅读 · 0 评论 -
NYOJ 2 括号配对问题(栈)
http://acm.nyist.net/JudgeOnline/problem.php?pid=2 1、我的代码: #include #include using namespace std;#define MAXSIZE 10005int main(void){ int k; cin >> k; while(k--) { char str[MAXSIZE]原创 2012-04-04 00:52:01 · 3207 阅读 · 0 评论 -
NYOJ 35 表达式求值(栈)
这些函数中都有“重复”的,因为操作数(OPND)栈用double,操作符(OPTR)栈用char。C++中的模板可以解决这个问题吗? 这是对着书写的:#include using namespace std;#define STACK_INIT_SIZE 100#define STACKINCREMENT 100char Precede_Matrix[7][7] = { {原创 2012-03-31 22:13:19 · 2669 阅读 · 0 评论 -
插入排序之折半插入排序
折半插入排序时间复杂度O(n^2)附加空间O(1)稳定排序#define _CRT_SECURE_NO_WARNINGS#include using namespace std;#define LEN 8 // 有LEN个元素要排struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo;};原创 2012-05-19 21:09:52 · 5294 阅读 · 0 评论 -
插入排序之直接插入排序
直接插入排序时间复杂度O(n^2)附加空间O(1)稳定排序#define _CRT_SECURE_NO_WARNINGS#include using namespace std;#define LEN 8 // 有LEN个元素要排struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo;};原创 2012-05-19 16:47:08 · 1226 阅读 · 1 评论 -
Polynomial 一元多项式的表示及相加 (线性链表实现 严蔚敏版)
1、贴代码:#include #include using namespace std;struct Node { double coef; int expn; Node *next;};void CreatPolynomial(Node *&head, int n) // 生成带表头结点的单链表,除头结点外另生成n个结点{ head = (Node *)malloc原创 2012-04-15 22:58:50 · 9814 阅读 · 3 评论 -
括号匹配(栈实现)
#include #include using namespace std;#define MAXSIZE 20typedef struct { char *base; char *top; int stacksize;}SqStack;void InitStack(SqStack &S){ S.base = (char *)malloc( MAXSIZE * size原创 2012-03-31 13:17:46 · 1767 阅读 · 0 评论 -
约瑟夫环,杀人游戏(静态循环链表实现)
觉得用静态循环链表最划算了。1、动态链表要动态分配,指针移来移去,释放指针等等,弄得很烦,容易出错。2、用循环链表是当然的了。 // DS: 似循环静态链表#include #include //#include using namespace std;int Kill_You( const int sum = 1, const int distance = 1, c原创 2012-03-24 15:51:46 · 3274 阅读 · 1 评论 -
C 语言中模拟“泛型”
一般在写 C 程序时用 typedef 将容器中元素的类型抽象,无法在同一个程序中用到两种类型,而本文试图在一个程序中用到两种不同类型的容器,比如实现类似于 C++ 中的 vector 和 vector。核心技术是将元素类型定义为 void *,管它什么类型,都用 void * 类型的指针指向真正的数据,与此同时,类型的大小是个重要信息,比如一般地,char 为1个字节,double 为4个字节。原创 2014-02-07 22:44:15 · 3710 阅读 · 0 评论