剑指offer 2.3 数据结构1-数组求sizeof()
2014-08-10 11:25
239 查看
字符串、数组:最基本的数据结构,他们用连续的内存分别存储数字和字符。
链表和树:对他们的操作需要大量的指针,解决相关问题一定要注意其鲁棒性,否则容易出现程序崩溃的问题。
栈:与递归紧密相关的数据结构
队列:与广度优先遍历算法紧密相关
=======================================================================
2.3.1 数组
占据一块连续的内存空间,并顺序存储数据。
创建时:首先指定数组的容量大小,然后根据大小分配内存。
空间效率不是很好,容易有空闲的区域没有充分利用
时间效率高:根据下标在O(1)时间读/写任何元素。
可以利用数组时间效率高的优先,用数组来实现简单哈希表:把数组的下标设为哈希表的键值(Key),而该下标所对应的数字
就成了哈希表的值(Value)。
动态数组,解决了空间效率不高的问题,如C++ STL中的vector
(vector每一次扩容,新的容量都是前一次的两倍)
数组和指针:声明一个数组,其名字就是一个指向数组第一个元素的指针,也可以用指针来访问数组。
运行结果是:20,4,4
分析:data1是一个数组,sizeof(data1)是求数组的大小,这个数组包含了5个整数,每个整数占4个字节,因此总共是20个字节。
data2是一个指针,尽管他指向了data1的第一个数组,但它本质上仍是指针,在32位系统上,求sizeof,得到的结果都是4。
在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针,因此尽管函数GetSize的参数data被声明为数组,但他会退化为指针,sizeof结果认为4.
链表和树:对他们的操作需要大量的指针,解决相关问题一定要注意其鲁棒性,否则容易出现程序崩溃的问题。
栈:与递归紧密相关的数据结构
队列:与广度优先遍历算法紧密相关
=======================================================================
2.3.1 数组
占据一块连续的内存空间,并顺序存储数据。
创建时:首先指定数组的容量大小,然后根据大小分配内存。
空间效率不是很好,容易有空闲的区域没有充分利用
时间效率高:根据下标在O(1)时间读/写任何元素。
可以利用数组时间效率高的优先,用数组来实现简单哈希表:把数组的下标设为哈希表的键值(Key),而该下标所对应的数字
就成了哈希表的值(Value)。
动态数组,解决了空间效率不高的问题,如C++ STL中的vector
(vector每一次扩容,新的容量都是前一次的两倍)
数组和指针:声明一个数组,其名字就是一个指向数组第一个元素的指针,也可以用指针来访问数组。
int getSize(int data[]) { return sizeof(data); } int main() { int data1[] = {1,2,3,4,5}; int size1 = sizeof(data1); int* data2 = data1; int size2 = sizeof(data2); int size3 = getSize(data1); cout << size1 << " " << size2 << " " << size3 << endl; return 0; }
运行结果是:20,4,4
分析:data1是一个数组,sizeof(data1)是求数组的大小,这个数组包含了5个整数,每个整数占4个字节,因此总共是20个字节。
data2是一个指针,尽管他指向了data1的第一个数组,但它本质上仍是指针,在32位系统上,求sizeof,得到的结果都是4。
在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针,因此尽管函数GetSize的参数data被声明为数组,但他会退化为指针,sizeof结果认为4.
相关文章推荐
- 剑指offer 2.3 数据结构4-替换字符串中的空格
- 剑指offer 2.3 数据结构2-二维数组中的查找
- #数据结构与算法学习笔记#剑指Offer1:二维数组中的查找(JAVA)
- 剑指offer 2.3 数据结构3-字符串
- 算法导论2.3-7(未排序数组) 和 剑指offer面试题41(排序数组)
- 【剑指offer】数据结构 ——包含min函数的栈(C++)
- 剑指offer(二.1)数据结构篇之数组
- 【剑指offer】数据结构 ——从上往下打印二叉树
- #数据结构与算法学习笔记#剑指Offer1.5:二维数组中的查找(C++)
- 剑指offer--数据结构之二叉树(1、4、6、11、12、27、48、50、60)
- 剑指Offer:调整数组中的数据
- 【剑指offer】数据结构 ——栈的压入、弹出序列(C++)
- 【剑指offer】数据结构 —— 二叉树的下一个结点(C++)
- 剑指offer-数据结构:字符串(基础知识)
- 剑指offer--数据结构之链表(9、19、35)
- 数据结构笔记(3)数组的算法
- 结构和其他数据形式 结构数组
- 数据结构之【数组和广义表】复习题
- 数据结构与算法之—数组(一)
- 数据结构之树状数组