数据结构与算法(二):数组

注:我们先由简到难总结一下常用的数据结构,如简单数组、链表、散列表、队列、栈、树、图等等,最后再来研讨算法。

一、线性表

线性表是很基本的一种数据结构,就如字面意思一样,它把若干数据线性组合在一起:每个元素都最多只有前相邻和后相邻元素,也就是元素之间首尾相接。典型的线性表结构有数组、链表、栈、队列等。它有一些特征(摘自百度百科):

          1.集合中必存在唯一的一个“第一元素”。

          2.集合中必存在唯一的一个 “最后元素” 。

          3.除最后一个元素之外,均有唯一的后继(后件)。

          4.除第一个元素之外,均有唯一的前驱(前件)。

注意:循环链表也是一种线性表结构,只是第一个元素和最后一个元素首尾相连。

二、数组

数组是一种元素序列,本身就是一种线性表结构,它用一块连续的内存空间把相同类型的一些元素无序的组合起来(关于相同类型的说法并不是绝对的,比如VFP中并没有要求数组中必须存储相同类型的元素,我们只是站在数据结构的角度这样说)。关于数组,相信大家都很熟悉,用的也比较多,特性之类的也比较了解,我们只需要强调一点,就是数组怎么实现“随机访问”时间复杂度为O(1)的?

这里面有关键的两点,一是它的内存空间是连续的,二是存储相同的数据类型。具体是什么意思呢?我们在malloc(动态分配)一块内存的时候,会指定所需空间的大小,比如:

int *p = (int*) malloc(sizeof(int) * 10);

我们要创建一个数组,那么一开始就确定了类型:type,同时我们指定数量:n,那么需要的内存空间大小就能直接算出来:sizeof(type) * n。malloc函数分配该大小的内存空间,如果成功会返回指向被分配内存空间的指针,该指针指向此内存区域的起始地址。当然我们需要把void *类型转换为我们确定的类型,比如int *。

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值