数据结构中的栈与内存中的栈的不同
一、数据结构中的堆栈
在数据结构中的堆栈,实际上堆栈是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。
1.栈就像装数据的桶或箱子
我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。
2.堆像一棵倒过来的树
而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取出我们想要的书。
二、内存分配中的栈和堆
然而我要说的重点并不在这,我要说的堆和栈并不是数据结构的堆和栈,之所以要说数据结构的堆和栈是为了和后面我要说的堆区和栈区区别开来,请大家一定要注意。
栈中分配局部变量空间,堆区是向上增长的用于分配程序员申请的内存空间。另外还有静态区是分配静态变量,全局变量空间的;只读区是分配常量和程序代码空间的;以及其他一些分区
栈
创建一个结构体,里面包含一个数组就是我们的栈(用顺序表的形式来存储),还有一个整形来记录栈的长度。
初始化就是让栈中元素个数记为0就行。
往栈中加入数据,就是向下标为size 的数组元素中存值,存完后,数组长度size++。
删除,就让数据个数减一个就行。
读栈顶元素就是要返回最后入栈的值,然后栈中元素个数减一。
队列
队列就用链表实现
栈和队列的区别?
队列是先进先出,有出口和入口,先进去可以先出来。
栈就像一个箱子,后放上去的,可以先出来