c语言
zhlei12345
这个作者很懒,什么都没留下…
展开
-
中缀表达式转变成后缀表达式
我们这里只针对加减乘除运算的表达式进行转变。中缀表达式就是正常的表达式,例如a+b*c+(d*e+f)*g。我们需要将它转变成后缀表达式,也就是符号在数字后面。转变规则就是如果遇到数字,就输出数字,如果遇到符号,比较这个符号和栈中的符号优先级的高低,如果这个符号优先级高,就压入栈中,反之,现将栈顶符号输出,再进行比较,决定是否输出符号。如果遇到左括号,它的优先级最高,只有碰到右括号,才将左括号弹出。原创 2015-04-22 16:12:32 · 599 阅读 · 0 评论 -
优先队列(二)
本文主要探索一下优先队列的其他的一些操作,这些操作涉及到二叉堆中某个元素的处理,因此必须首先找到指定元素的位置。但是我们知道在一个给定的最小元素二叉堆中(也就是堆顶元素是最小值),寻找一个元素(如果不是最小元素)是必须遍历这个二叉堆的,所需的时间就是线性时间。 本文主要把散列表和二叉堆结合起来,通过散列表,用常数时间找到某个元素在二叉堆中的位置。原创 2015-05-01 22:34:11 · 383 阅读 · 0 评论 -
优先队列基础知识(一)
本文主要复习优先队列的相关知识。运用二叉堆数据结构实现优先处理队列中的较小元素(当然也可以是其他的元素)。所谓二叉堆,其几何形状就是完全二叉树。这样的话,我们就可以用数组来实现二叉堆,原因就是一个节点i的子节点就是2i和2i+1,一个节点的父节点就是i/2取整数部分。这样就避免了使用指针来寻找二叉树中的位置,加快了搜寻速度。原创 2015-04-30 10:52:39 · 423 阅读 · 0 评论 -
排序算法
本文主要回顾基本的排序算法。内容包括算法的基本描述,算法的实现,算法的时间复杂度分析三个部分。原创 2015-05-11 22:13:15 · 508 阅读 · 0 评论 -
运用C中的uthash.t头文件来实现hash表
在C语言中,我们常常需要用到hash表,但是每次进行定义比较浪费时间,所以我们用uthash.h头文件来实现hash表的定义。 我们来看如下一个问题,给定一个数组,我们需要找到这个数组中的两个元素,使得他们的和为给定的target值,然后,返回这两个元素的位置。原创 2015-05-16 15:27:35 · 3370 阅读 · 1 评论 -
N的阶乘(N!)中的末尾有多少个0
问题:N的阶乘(N!)中的末尾有多少个0? 例如:N = 5,N! = 120.末尾有1个0.分析:想到这个问题,有人可能第一反应就是现求出N!,然后再根据求出的结果,最后得出N!的末尾有多少个0。但是转念一想,会不会溢出,等等。其实,从”那些数相乘可以得到10”这个角度,问题就变得比较的简单了。 首先考虑,如果N的阶乘为K和10的M次方的乘积,那么N!末尾就有M的0。如果将转载 2015-05-30 09:43:59 · 626 阅读 · 0 评论 -
不相交集ADT
首先我们必须明白不相交集这种数据结构是用来干什么的。不相交即主要用来实现动态等价问题的求解。动态等价问题\textbf{动态等价问题} \quad\quad这里不再说明等价关系的概念,这个可以参考数理逻辑之类的书。假设我们有一个集合和一个等价关系~,针对集合中的任意两个元素aa和bb,我们如何确定他们有等价关系~,即a~b.那么我们需要等价类的概念,一个元素a∈Sa \in S原创 2015-05-18 19:04:52 · 778 阅读 · 0 评论 -
最长回文子字符串
给出一个字符串,我们需要找到最长的回文子字符串.原创 2015-05-23 12:56:30 · 444 阅读 · 0 评论 -
图论算法的基础知识
图的表示\large\textbf{图的表示} \quad\quad如果有向图是稠密的,也就是图中的边数|E||E|和定点数|V||V|满足如下关系|E|=O(|V|2)|E|=O(|V|^2)。那么我们就用二维数组来表示,如果有向图是稀疏的,也就是边数相当的少,那么我们就用邻接表来表示。它就是一个结构体数组,每个元素表示一个顶点,然后指向它的所有相邻的顶点(这个相邻是指出边)。 \quad\q原创 2015-06-05 20:10:00 · 3184 阅读 · 0 评论 -
寻找不大于n的素数
运用Sieve of Eratosthenes算法,简单来说就是从2出发,除掉是2的倍数的数,然后从3出发,除掉3的倍数的数(3的2倍已经除掉,所以可以从3*3来除掉数),以此类推。已除掉的数就不在考虑,直到sqrt(n)sqrt(n)。原创 2015-05-24 21:40:15 · 987 阅读 · 0 评论 -
编写查找一个单链表特定元素的程序
我们分成递归和非递归两种方法来实现。原创 2015-04-28 22:44:26 · 1615 阅读 · 0 评论 -
优先队列基础知识(四)---二项队列
本文主要分析二项队列。这个优先队列结构也是为了处理对数时间合并两个优先队列而提出来的。它可是保证平均插入时间为常数。同时合并,删除最小元操作的最坏时间为O(logN)O(logN)。这比左式堆更优,左式堆和斜堆是没办法实现平均插入时间是常数时间的。原创 2015-05-11 09:24:18 · 473 阅读 · 0 评论 -
优先队列基础知识(三)---左式堆
本文主要就是介绍这样的堆数据结构---左式堆,实现对数时间的合并操作。原创 2015-05-08 17:17:40 · 1432 阅读 · 0 评论 -
栈基础学习
本文主要针对栈的实现进行学习 首先是头文件,声明所要用的函数和结构体#ifndef stack_H_#define stack_H_struct Stacks;typedef struct Stacks *Stack;//创建一个空栈Stack create(int scale);//判断是否为空栈int Isempty(Stack S);//Pushvoid Push(Sta原创 2015-04-14 22:16:44 · 437 阅读 · 0 评论 -
二叉查找树
使得二叉树成为二叉查找树的关键就是令树中的每个节点的左子树的关键值小于X的关键值,它的右子树中所有的关键字大于X的关键字。 本文主要介绍二叉查找树的实现和基本的插入和删除操作 头文件声明如下#ifndef ADT_H_#define ADT_H_struct ADT;typedef struct ADT *ADtree;typedef struct ADT *Position;//查找原创 2015-04-16 22:33:36 · 371 阅读 · 0 评论 -
二叉平衡树
本文主要介绍二叉平衡树的定义以及它的插入节点工作。 头文件的定义#ifndef AVL_H_#define AVL_H_struct AVL;typedef struct AVL *Search_tree;typedef struct AVL *Position;int Max(int x,int y);Search_tree create();void print(Position原创 2015-04-17 21:21:09 · 451 阅读 · 1 评论 -
X+Y返回格式
练习:写一个函数,把两个正整数数相加后,返回结果,这个结果每三位加一个逗号,为了简单起见,这些数范围为(0,1000000).#include <stdio.h>原创 2015-04-17 22:50:39 · 413 阅读 · 0 评论 -
两个多项式相加
习题1(链表) 编写将两个多项式相加的函数。不要毁坏输入数据。如果这两个多项式分别有M项和N项,那么你的程序的复杂度是多少。原创 2015-04-24 22:02:49 · 2069 阅读 · 0 评论 -
计算后缀表达式(一)
本节主要计算简单的后缀表达式的值,数据是0-9,只有‘+’,‘-’,‘*’,‘/’,四种运算。计算的基本方法就是用栈来处理,遇到数字,就将数字压入栈中,遇到运算符,就将栈中的前两个数字做相应的运算,然后退两次栈,再把计算过的数字压入栈中。最终输出栈顶元素。原创 2015-04-25 10:07:50 · 500 阅读 · 0 评论 -
哈希表基础知识(2)
在散列表基础知识(1)中,我们介绍了分离链接法来解决哈希冲突。它的一个缺陷就是需要经常的分配动态内存,这是比较花费时间的。本文再介绍解决散列表的另外一种方法开放定址法。不需要多次的动态分配内存。原创 2015-04-27 11:15:55 · 1170 阅读 · 0 评论 -
哈希表基础知识(hash table)(1)
本节主要结束散列表的相关内容。散列是一种用以常数平均时间执行插入,删除,和查找的技术。但是那些需要元素间任何排列信息的操作将不会得到有效的支持,比如查找最小值,以线性时间按排序顺序将整个表打印出来的操作都不是散列表所支持的。 针对哈希表,我们需要注意两点,1.哈希函数的确定。本章节用Horner法则来获得哈希函数。2.解决哈希冲突。本章节主要通过分离链接法来实现原创 2015-04-25 10:59:10 · 601 阅读 · 0 评论 -
哈希表基础知识(3)
\quad\quad在哈希表基础知识(1)和(2)中我们介绍了两种哈希表表示方法,分离链接法和开放地址法,但是这些都是针对数据可以存储到内存中的数据而言的操作,如果数据量过大,不能存进内存,也就是说我们需要解决磁盘上的检索数据问题。 \quad\quad我们假设每个磁盘区块上可存储的数据是有限的,如果我们用分离链接法或者是开放地址法的话,那么在查找数据的时候我们是需要对多个磁盘区块进行考察的。这样原创 2015-04-27 16:01:14 · 461 阅读 · 0 评论 -
表达树的基础知识
表达式树的树叶是操作数,比如常量或者是变量,二其他的节点为操作符,我们在这里限制操作符都是二目的。原创 2015-04-16 18:04:57 · 427 阅读 · 0 评论