栈&队列&栈帧&递归
来源:互联网 发布:c语言从单数1加到100 编辑:程序博客网 时间:2024/05/29 19:02
*栈的定义——Stack
栈是只允许在末端进行插入和删除的线性表,栈具有后进先出的特征(LIFO,Last In First Out).
*栈的应用
栈很大意义上模拟了压栈,实现了递归转非递归。还有算术表达式求值,波兰表达式(后缀表达式),迷宫问题等。
*队列的定义
队列值允许在表的队尾进行插入,在表对头进行删除。队列具有先进先出的特性(FIFO,First In First Out).
1、优先级队列的定义
每次从队列中取出的都是最高优先级的数据,这种队列就是优先级队列。
——后续使用Heap实现
2、队列的应用
(1)生产者消费者模型,如网络数据buffer
(2)任务队列
(3)图的广度优先遍历
*一般函数的调用栈帧
*递归函数调用栈帧
*函数栈帧调用&数据结构栈帧--栈实现将递归程序转换为非递归程序
#include<iostream>
#include<stack>
using namespace std;
template<class T>
struct Node
{
public:
Node(const T& x)
:_data(x)
,_next(0)
{}
T _data;//数据
Node* _next;//指向下个节点的指针
};
template<class T>
class SList
{
public:
SList()
:_head(0)
,_tail(0)
{}
public:
void PushBack(const T& x)
{
if(!_head)//链表为空
{
_head=new Node<T> (x);
_tail=_head;
}
else
{
_tail->_next=new Node<T> (x);
_tail=_tail->_next;
}
}
Node<T>* GetHead()
{
return _head;
}
private:
Node<T>* _head;
Node<T>* _tail;
};
//逆序打印单链表递归实现
template<class T>
void PrintTailToHead_R(Node<T>* head)
{
if(head)
{
PrintTailToHead_R(head->_next);
cout<<head->_data<<" ";
}
}
//逆序打印单链表非递归实现
template<class T>
void PrintTailToHead(Node<T>* head)
{
stack<Node<T>*> s;
while(head)
{
s.push(head);
head=head->_next;
}
while(!s.empty())
{
cout<<s.top()->_data<<" ";
s.pop();
}
}
void Test()
{
SList<int> s1;
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.PushBack(5);
PrintTailToHead_R(s1.GetHead());
cout<<endl;
PrintTailToHead(s1.GetHead());
cout<<endl;
}
int main()
{
Test();
return 0;
}
- 栈&队列&栈帧&递归
- 队列,栈和递归
- 迷宫问题(栈,递归,队列)
- 队列和栈和递归
- 递归->栈->队列面试题
- 二叉树镜像之递归、栈、队列实现
- 2.1 穷竭搜索(递归,栈,队列)
- 数据结构中的栈和递归以及队列
- 迷宫求解非递归 DFS BFS(应用栈和队列)
- 栈和队列_迷宫问题_递归
- 二叉树(利用栈和队列实现递归和非递归遍历,构建等)
- 遍历二叉树——递归和非递归(栈和队列的应用)实现
- Java用队列优化递归
- 栈帧&栈&递归
- 二叉排序树节点的删除(C++,算法导论),前中后序遍历(递归/非递归,栈实现),按层次遍历(队列实现)
- 栈和队列之仅用递归函数和栈操作逆序一个栈
- 栈和队列(3)--如何仅用递归函数和栈操作逆序一个栈
- 1栈和队列--仅用递归函数和栈操作逆序一个栈
- 写程序的步骤
- xapp585使用注意事项
- VMware安装黑苹果的笔记
- WebView读取SD卡上的HTML
- 最短路计数(Shortest Path Count)
- 栈&队列&栈帧&递归
- 三种快速排序算法以及快速排序的优化
- 编译原理学习笔记---语法
- Java1.7下的ConcurrentHashMap【简要总结】
- 并查集(Union-Find Set)模板
- tk库的使用
- 继原创保护功能开通之后,又开通赞赏功能
- postman测试post请求参数为json类型
- 编译原理学习笔记---自上而下分析