堆栈数组类型讲解

2021-03-08  本文已影响0人  幼姿沫

① 数据类型的分类   

1.可变类型    list  dict                 会在原来的内存地址上修改元素    拷贝之后改变的元素不会牵扯             改变原来的元素,deepcopy深拷贝会将深层次的内容均复制过来

       2.  不可变类型  int str tuple  long  不会在原来的内存地址上修改元素,而是指向了新的内存引用    

             浅拷贝可以将原来的不可变数据类型拷贝过去,复制体的改变会影响牵扯原来的数据

② 堆和栈的区别

1.申请方式不同   栈是系统自动分配的 堆是人为申请开辟的

2.申请大小的不同   栈的内存空间小  堆的内存空间大

3.申请效率的不同   栈的申请速度快  堆的申请速度慢

4.底层不同     栈是连续的空间  堆是不连续的空间 是一棵完全二叉树

5.存储内存的不同     栈在函数调用的时候,第一个进栈的是该函数的下一个指令的地址,然后是函数的各个参数,参数是由右向左入栈的之后是函数的局部变量,静态变量是不会入栈的,他会存储在静态存储区。

当本次函数调用结束后,局部变量先出栈,之后是参数最后栈顶指针指向最开始存储的地址,也就是主函数中的下一条指令,程序由该点继续运行。

堆一般是堆的头部用一个字节存放堆的大小,堆内的具体内容由程序员自己安排。

③  堆   栈   队列的区别

1.堆   人为申请开辟的 空间大 速度慢  不连续的完全二叉树  

堆是在程序运行的时候,申请某个大小的内存空间  即动态分配内存   

对其访问和对一般内存的访问没有区别。

  2.栈  stack    其实就是一个桶 是系统自动分配的内存空间  先放进去的后拿出来

后放进去的先拿出来      后进先出    存放顺序*参数  局部变量   静态资源在静态内存空间  拿取顺序 *局部变量   参数       栈是在栈顶做插入和删除操作

3.队列  queue    先进先出  只能在队头删除 队尾添加

④   数组array  链表   队列queue 堆栈stack的区别

1.数组 和链表都是内存的概念  数组是在连续的空间中存储数据   链表是在不连续的内      存空间中存储数据。

2.队列和栈都是存取的概念   队列是在队尾添加  队头删除       先进先出    

                                             堆栈是在队尾添加队尾删除       后进先出      

                                             队列和堆栈可以用链表实现也可用数组实现

上一篇 下一篇

猜你喜欢

热点阅读