C语言
文章平均质量分 72
iteye_6931
这个作者很懒,什么都没留下…
展开
-
两数组最小距离问题
已知两个元素从小到大排列的数组x[]和y[],请写出一个程序算出两个数组元素彼此之间差的绝对值中最小的一个,这个叫做数组的距离。 这个问题不难,可以通过一个循环嵌套循环解决。但是既然说了两个数组元素都是从小到大排列,那么肯定有别的简单的办法。 如果x[i]>y[j],对于x[i]-y[j],所有排在y[j]之前的元素计算这个式子的值都...2011-12-11 23:26:15 · 397 阅读 · 0 评论 -
重学数据结构007——二叉查找树
之前的博客中提到过,我学习采用的参考书是《数据结构与算法分析——C语言描述》。这门书的组织安排与国内广泛实用的教材《数据结构——C语言版》比较不同。这本书描述了一些树和二叉树的概念,举例讲解了什么是树的三种遍历之后,就开始重点讲解二叉查找树、平衡二叉树、AVL树、伸展树、B数了。这一篇博客,重点学习二叉查找树的概念和基本操作。 大家都知道,树的定义...2011-11-22 21:36:24 · 117 阅读 · 0 评论 -
重学数据结构006——中缀表达式转后缀表达式
我们在数学中常见的计算式,例如2+(3*4)叫做中缀表达式。表达式中涉及到了多个运算符,而运算符之间是有优先级的。计算机在计算并且处理这种表达式时,需要将中缀表达式转换成后缀表达式,然后再进行计算。 中缀表达式转后缀表达式遵循以下原则: 1.遇到操作数,直接输出; 2.栈为空时,遇到运算符,入栈; 3.遇到左括...2011-11-18 21:38:14 · 144 阅读 · 0 评论 -
重学数据结构005——栈的应用之平衡符号
之前学习了栈的基本操作,并且学习了栈的两种实现方式:链式存储和顺序存储(数组)。现在看看栈都有哪些应用。栈的一个主要应用是平衡符号。 初学者在编写代码并且编译时,难免会因为少写了一个')'和被编译器报错。也就是说,编译器会去匹配括号是否匹配。当你输入了一个'(',很自然编译器回去检查你是否有另一个')'符号与之匹配。如果所有的括号都能够成对出现,那么编译...2011-11-18 12:01:27 · 257 阅读 · 0 评论 -
重学数据结构004——栈的基本操作及实现(数组实现)
上文提到过栈以及栈的基本操作。上文中是基于链表做的实现。但是这种方法会出现大量的malloc()和free()操作,这种开销是非常昂贵的。 另外一种实现方式是基于数组的实现。这种实现方式需要预先制定一个栈的大小,此外还需要一个Top来记录栈顶元素下一个位置的数组索引值。如下图所示: 有的教材将Top指向栈顶元素,也就是上图中X所在的数组单元。我们这里不这么认为。...原创 2011-11-17 23:13:21 · 83 阅读 · 0 评论 -
重学数据结构003——栈的基本操作及实现(链式存储)
1.栈的概念 展示只允许在其一端进行插入语删除操作的表。从定义上来说,栈其实也是线性表,因此栈也具备大多数线性表所具备的基本操作。但是,从定义上可知,栈在进行插入、删除操作时,只能在一端进行操作,这一端成为栈顶(top)。 栈最核心的操作主要是:进栈(Push)、出栈(Pop)、返回栈顶元素(Top)。 此外,栈还判断栈是否为空、创见栈、清空栈等操作。 既然是线性...2011-11-14 23:19:33 · 101 阅读 · 0 评论 -
重学数据结构002——桶排序、基数排序
1.桶排序 有N个整数,范围是1-M或者是0-M-1。留置一个数组Count,其大小为M,并初始化为0。于是Count有M个单元(或者叫桶)。当Ai被读入时,Count[Ai]增1。当所有的输入被读入,扫描Count,打印输出排序号的列表。 桶排序实现代码如下:#include <stdio.h>#define Max 10vo...2011-11-11 17:17:47 · 110 阅读 · 0 评论 -
重学数据结构001——链表基本操作与一元多项式相加(C语言)
大一的时候我们专业开了一门C语言限选课,老师觉得指针太难,所以不讲指针。大三的时候学数据结构,考虑到数据结构比较难,老师不要求代码实现。就这样,两门比较重要的课就这样浑浑噩噩的过去了。后来学Java,算是学的还行,也独立的做过一些导师的项目。只是在找工作的时候,才发现笔试题、面试题到处都是C、C++和数据结构的题。多多少少也因此碰了不少壁。不管怎么样,自己还年轻,以前没学好,现在学...2011-11-10 13:26:44 · 229 阅读 · 0 评论 -
C语言中指针的操作
C语言中指针操作主要有以下几种:指针赋值(assignment):将一个地址赋给指针求值(value-finding/dereferencing):通过运算符*求出指针所指向地址中存储的数值。取指针地址:可以使用&获得指针变量本身地址。将整数加给指针:使用+将整数加给指针,该整数会与指针所指类型占字节数相乘,并将乘积加到初始地址。指针自增:对指向某数组元素的指针做自增...原创 2011-10-23 00:27:50 · 157 阅读 · 0 评论 -
等值首尾和问题
问题:假设有一个数组x[],有n个元素,并且每一个都大于零;称x[0]+x[1]+x[2]+...+x[i]为前置和,而x[j]+x[j+1]+...+x[n-1]为后置和。试编写一个程序,求出x[]中有多少组前置和后置和。思路:设置两个索引变脸indexHead和indexTail,一个从前往后扫描,一个从后往前扫描。并且使用两个变量记录当前的前置和和后置和,并通过比较他们的值来决定移动...2011-12-24 00:03:15 · 152 阅读 · 0 评论 -
重学数据结构008——AVL树
之前学习了二叉查找树的及相关操作。二叉查找树的大部分主要操作的复杂度都是O(logN)量级的。现在考虑这样一种情况:通过集合{3,2,4,1,0,-1,-2,-3,-4,-4}中的元素来构建二叉查找树,得到的树如图所示: 如果现在我们需要查找元素-4,那么时间复杂度还是是O(logN)吗?有个更加极端的例子,假设数据集是{6,5,3,1,0,-1,-2,-3,-4,-4}呢?再...2011-12-16 19:58:47 · 73 阅读 · 0 评论 -
等值数目问题
问题描述:已知两个整型数组f[]和g[],它们的元素都已经从小到大排列,并且每个数组中的元素各是各不相同的。例如,f[]中可能是1,3,4,7,9而g[]中可能是3,5,7,8,10。请写一个程序算出这两个数组中有多少组元素是相等的。例如f[2]=g[1]=3,f[4]=g[3]=8,因此上面的例子有两组。思路:一般情况下,很容易想到下面的方法:1.固定f[i],检查g[]中的每个元素,看...原创 2011-11-27 00:44:59 · 188 阅读 · 0 评论