栈
- 出栈不同排列顺序:卡特兰数公式 h(n)=C(2n[下],n[上])/(n+1),适用于出栈情况求和 ==C(2n,n)-C(2n,n+1)==
- 通常元素==进栈==的操作是先移动栈顶指针,再存入元素;元素==出栈==的操作是先取出元素,再移动栈顶指针。栈的顺序存储空间为S(1:50),初始状态top=51,所以这个栈是50在栈底,1是==开口向上==的。
- 存储结构是数据的逻辑结构用计算机语言的实现,常见的存储结构有: ==顺序存储 , 链式存储 , 索引存储 ,以及 散列存储== 。其中散列所形成的存储结构叫 散列表(又叫哈希表) ,因此哈希表也是一种存储结构。栈只是一种抽象数据类型,是一种逻辑结构,栈逻辑结构对应的顺序存储结构为顺序栈,对应的链式存储结构为链栈,循环队列是顺序存储结构,链表是线性表的链式存储结构。
-
数据结构:
(1). 逻辑结构:==线性、树形、图形==结构
(2). 存储结构: (a)顺序存储结构,如数组 (b)链式存储结构,如链表 (c)索引存储,如线索树 (d)散列存储 栈,可以用顺序存储实现,(其实就是数组加一个top指针),也可以用链式存储结构实现,如链栈。 - ==局部变量、函数内动态申请的对象、函数内指向动态申请的对象的局部指针变量==是分配在栈上的,==new出来的对象==是分配在堆上。
- 在栈中,栈底保持不变,有元素入栈,栈顶指针增加;有元素出栈,栈顶指针减小。在循环队列中,队头指针和队尾指针的动态变化决定队列的长度。在循环链表中,前一个结点指向后一个结点,而最后一个结点指向头结点,==只有头结点是固定的==。线性链表中,由于前一个结点包含下一个结点的指针,尾结点指针为空,要插入删除元素,只需要改变相应位置的结点指针即可,头指针和尾指针无法决定链表长度。
- 线索二叉树的节点增加了指向前驱结点和指向后继节点的标志,因此在==遍历时无需用栈.==
- 栈的==常见应用==:浏览器历史纪录,Android中的最近任务,Activity的启动模式,CPU中栈的实现,Word自动保存,解析计算式,解析xml/json。
- 栈的表示在不同的书上一般有两种表达方式:
1.top指针指向栈顶元素,这样下一个出栈的元素就是top指向的结点元素;此时入栈操作为==p->next=Top; Top=p==;
2.top指向下一个可以入栈的位置,这样就相当于top是带头结点的链表中的头节点,然后入栈的话就要插入到top的下一个节点位置;此时入栈操作为==p->next=Top->next;Top->next=p;==