![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 66
wawlian
独善其身,兼济天下
展开
-
C语言中的指针操作
C语言中指针操作主要有以下几种:指针赋值(assignment):将一个地址赋给指针求值(value-finding/dereferencing):通过运算符*求出指针所指向地址中存储的数值。取指针地址:可以使用&获得指针变量本身地址。将整数加给指针:使用+将整数加给指针,该整数会与指针所指类型占字节数相乘,并将乘积加到初始地址。指针自增:对指向某数组元素的指针做自增运算,可以让指针指向数原创 2011-11-15 15:02:07 · 433 阅读 · 0 评论 -
重学数据结构002——桶排序、基数排序
1.桶排序 有N个整数,范围是1-M或者是0-M-1。留置一个数组Count,其大小为M,并初始化为0。于是Count有M个单元(或者叫桶)。当Ai被读入时,Count[Ai]增1。当所有的输入被读入,扫描Count,打印输出排序号的列表。桶排序实现代码如下: #include #define Max 10 void initArray(int原创 2011-11-15 15:00:22 · 428 阅读 · 0 评论 -
重学数据结构001——链表基本操作与一元多项式相加
1.链表的基本操作 链表数据结构的定义:由于链表一方面需要在节点中存储数据,另一方面还需要存储"线索",因此,通常采用结构体定义链表节点数据类型。 struct Node; typedef struct Node *PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; typedef in原创 2011-11-15 14:56:56 · 943 阅读 · 1 评论 -
两数组最小距离问题
已知两个元素从小到大排列的数组x[]和y[],请写出一个程序算出两个数组元素彼此之间差的绝对值中最小的一个,这个叫做数组的距离。 这个问题不难,可以通过一个循环嵌套循环解决。但是既然说了两个数组元素都是从小到大排列,那么肯定有别的简单的办法。 如果x[i]>y[j],对于x[i]-y[j],所有排在y[j]之前的元素计算这个式子的值都会大于x[i]-y[j],因原创 2011-12-17 16:21:42 · 1430 阅读 · 0 评论 -
重学数据结构007——二叉查找树
之前的博客中提到过,我学习采用的参考书是《数据结构与算法分析——C语言描述》。这门书的组织安排与国内广泛实用的教材《数据结构——C语言版》比较不同。这本书描述了一些树和二叉树的概念,举例讲解了什么是树的三种遍历之后,就开始重点讲解二叉查找树、平衡二叉树、AVL树、伸展树、B数了。这一篇博客,重点学习二叉查找树的概念和基本操作。 大家都知道,树的定义本身就带有递归性。因此,树的很多操作都涉原创 2011-12-27 18:48:27 · 718 阅读 · 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-27 18:49:42 · 383 阅读 · 0 评论 -
重学数据结构005——栈的应用之平衡符号
之前学习了栈的基本操作,并且学习了栈的两种实现方式:链式存储和顺序存储(数组)。现在看看栈都有哪些应用。栈的一个主要应用是平衡符号。 初学者在编写代码并且编译时,难免会因为少写了一个')'和被编译器报错。也就是说,编译器会去匹配括号是否匹配。当你输入了一个'(',很自然编译器回去检查你是否有另一个')'符号与之匹配。如果所有的括号都能够成对出现,那么编译器是能够通过的。否则编译器原创 2011-12-27 18:36:05 · 483 阅读 · 0 评论 -
重学数据结构004——栈的基本操作及实现(数组实现)
上文提到过栈以及栈的基本操作。上文中是基于链表做的实现。但是这种方法会出现大量的malloc()和free()操作,这种开销是非常昂贵的。 另外一种实现方式是基于数组的实现。这种实现方式需要预先制定一个栈的大小,此外还需要一个Top来记录栈顶元素下一个位置的数组索引值。如下图所示: 有的教材将Top指向栈顶元素,也就是上图中X所在的数组单元。我们这里不这么认为。原创 2011-12-27 18:30:19 · 920 阅读 · 0 评论 -
重学数据结构006——中缀表达式转后缀表达式
我们在数学中常见的计算式,例如2+(3*4)叫做中缀表达式。表达式中涉及到了多个运算符,而运算符之间是有优先级的。计算机在计算并且处理这种表达式时,需要将中缀表达式转换成后缀表达式,然后再进行计算。 中缀表达式转后缀表达式遵循以下原则: 1.遇到操作数,直接输出; 2.栈为空时,遇到运算符,入栈; 3.遇到左括号,将其入栈; 4.遇到右括号,执行出原创 2011-12-27 18:44:38 · 538 阅读 · 0 评论 -
等值首尾和问题
问题:假设有一个数组x[],有n个元素,并且每一个都大于零;称x[0]+x[1]+x[2]+...+x[i]为前置和,而x[j]+x[j+1]+...+x[n-1]为后置和。试编写一个程序,求出x[]中有多少组前置和后置和。思路:设置两个索引变脸indexHead和indexTail,一个从前往后扫描,一个从后往前扫描。并且使用两个变量记录当前的前置和和后置和,并通过比较他们的值来决定移动哪个原创 2011-12-23 23:25:22 · 1380 阅读 · 0 评论 -
C语言删除字符串中的指定字符,字符串连接
1.删除字符串中的指定字符/*将字符串s中出现的字符c删除*/ void squeeze(char s[],int c) { int i,j; for (i = 0, j = 0; s[i] != '\0'; i++) { if (s[i] != c) { s[j++] = s[i]; }原创 2011-12-19 23:08:07 · 4344 阅读 · 0 评论 -
C语言将字符串转换成对应的数字(十进制、十六进制)
问题1:讲一个十进制数字的字符串表示转换成对应的整数。举例:将“1234”转换成整数1234./*将字符串s转换成相应的整数*/ int atoi(char s[]) { int i; int n = 0; for (i = 0; s[i] >= '0' && s[i] '9'; ++i) { n = 10 * n + (s[i] - '0');原创 2011-12-17 23:16:55 · 1536 阅读 · 0 评论 -
C/C++中的位运算
C/C++提供了六个位运算操作符,可以对整数进行位运算,下面分别来介绍这六种位运算符。 (1)按位与& 将两个操作数的每一个二进制位进行逻辑与运算。 例如:3&5 3:00000011 5:00000101 3&5:00000001 按位与操作有以下两个特别的用处:将某个操作数的若干位置0;取操作数的若干指定位。原创 2011-12-17 16:12:49 · 309 阅读 · 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-12-17 16:09:45 · 534 阅读 · 0 评论 -
重学数据结构003——栈的基本操作及实现(链式存储)
1.栈的概念 展示只允许在其一端进行插入语删除操作的表。从定义上来说,栈其实也是线性表,因此栈也具备大多数线性表所具备的基本操作。但是,从定义上可知,栈在进行插入、删除操作时,只能在一端进行操作,这一端成为栈顶(top)。 栈最核心的操作主要是:进栈(Push)、出栈(Pop)、返回栈顶元素(Top)。 此外,栈还判断栈是否为空、创见栈、清空栈等操作。 既然是线性表,原创 2011-11-15 15:12:31 · 384 阅读 · 0 评论