数组的逆袭
来源:互联网 发布:js 字体颜色渐变 编辑:程序博客网 时间:2024/04/27 15:41
在设计算法的时候,很多人喜欢使用链表或者堆栈等复杂的高级数据结构。不过,对于奉行至简主义的我来说,总觉得这些重型武器被误用得太多了。数组这种数据结构具有简洁,易用的优点,恰如一把轻便的AK-47,在很多场景下展现出自己的巨大威力来。下面我们就来看一下数组的几种妙用。
一.数组用于查表法
我们都知道,一个十进制数字可以由'0'~'9'这十个字符中的零个或多个组成,我们称字符'0'~'9'为十进制的字符集。类似的,称字符'0'~'9', 'a'~'z'为36进制的字符集。问题来了,给你一个任意的进制n(2<=n<=36),如何知道某个字符c是否属于这个进制的字符集呢?查表法给出了一种解决方案,请看下面的代码:
int is_in_set(char c, int base) { const char digits[] = { "0123456789abcdefghijklmnopqrstuvwxyz" }; return (memchr(c, digits, base) != NULL);}
实际上,不仅数组中的元素携带着信息,元素在数组中的位置(或者称作偏移量)也是一种有用的信息。
我们可以总结如下:如果存在一个从集合A到集合B的一一映射B=f(A),而且这个映射并不能用一般性的公式来描述,同时两个集合的成员总量又不是很大的情况下,就可以考虑使用查表法。
再看另外一个例子:某一月份总共有多少天(为了简单起见,我们不考虑闰年)?常规的做法无非是用一串if-else语句或者一串switch-case语句,但是使用数组来完成这个任务要更好一些。
int daysOfMonth(int month) { const int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; return days[month - 1];}
二.数组用作链表
我们已经讲过了,数组有两种类型的信息可供我们使用:1.元素值;2.元素的偏移量。如果在某种情况下我们只需要关心元素的偏移量的话,那么就有可能使用数组构建一个单向(循环)链表。
具体的问题描述请参见上一篇文章《幸存者:约瑟夫问题》中的“数组法”,这里就不赘述了。
三.数组用作堆栈
数组作为堆栈来使用也是可能的,唯一的限制是,长度有上限,不能无限地增加元素。考虑一个元素类型为int型的堆栈结构,下面是使用数组进行实现的示例代码:
#define MAX_SIZE 100int Stack[MAX_SIZE];int top = -1;#define PUSH(s) Stack[++top] = (s)#define POP() Stack[top--]#define IS_FULL() top == MAX_SIZE#define IS_EMPTY() top == -1
最后留一道题目供大家思考:试对输入的表达式进行括号验证。总共有四种括号,按优先级从低到高排列为:{ }, [ ], ( ), < >。需要满足的条件如下:
1.括号必须闭合,例如下面的情况是不对的:}(a+b); [(a+<b-c>)*d
2.括号必须按优先级顺序排列,优先级高的括号不能出现在优先级低的括号的外面,例如下面的情况是不对的:(a*{b+c})
3.括号不能嵌套,例如下面的情况是不对的:{a*(b+c})
试试看吧。
- 数组的逆袭
- 创建一个数组, 实现初始化数组、清空数组、完成数组元素的逆置。
- 创建一个数组, 实现数组初始化、数组清空以及数组元素的逆置
- javascript 数组的数组
- 数组的数组
- 【数组】数组的增改查
- 数组-数组的概述
- 数组-数组的应用
- 最快的数组逆置和数组左旋算法
- c语言:创建一个数组,分别实现函数初始化数组、 清空数组、数组元素的逆置
- 创建一个数组 实现函数init()初始化数组 empty()清空数组 reverse()函数完成数组元素的逆置
- 数组的数组 以及 二维数组做形参
- 数组的数组与多维数组
- 数组的数组(变长数组)
- json 二维数组 数组的数组
- 数组与数组的地址
- C#数组-数组的初始化
- 多维数组、数组的排序
- c++空类的大小
- Java 类型转换
- SQL Sever 2000 关系数据库概述
- python,开始之路
- Java网络编程 下
- 数组的逆袭
- 敏捷开发“松结对编程”实践之一:人员结构篇(大型研发团队,学习型团队,139团队,师徒制度)
- Hello,Bada!
- LINUX 精华区分类索引
- oracle基本使用
- 简单工厂模式
- 带下拉菜单截图 巧用PrtSc截图键
- 青年(心之力)
- 【iPhone代码片段之一】UIActionSheet&UIAlertView的应用