[置顶] 【数据结构】 栈
2016-05-26 12:26
253 查看
栈结构,通俗易懂,特点:先进后出,后进先出。
以下,仅对于栈结构常用的操作进行实现
包括:
入栈(push),出栈(pop),判空(empty),栈顶元素(GetTop)
#include <iostream>
using namespace std;
template<class T>
class Stack
{
public:
Stack(T size) // 初始化数组大小
:top(0) //栈顶指针
, _size(size)
{
_array = new T[size]; // top指向最后一个元素时,再往下跳会越界,所以多开一个
}
~Stack()
{
if (_array)
{
delete[] _array;
}
}
public:
void Push(const T val)
{
if (top >= _size)
{
cout << "overflow" << endl;
return;
}
else
{
_array[top] = val;
top++;
}
}
T Pop()
{
T ret;
if (top < 0)
{
cout << "underflow" << endl;
return -1;
}
else
{
top--;
ret = _array[top];
}
return ret;
}
bool isEmpty()
{
return top == 0;
}
T Top()
{
if (!isEmpty())
{
return _array[top - 1];
}
else
{
cout << "error:stack is empty!" << endl;
}
}
void Show()
{
if (isEmpty())
{
cout << "stack has no data!" << endl;
return;
}
for (size_t i = 0; i < top; i++)
{
cout << _array[i] << " ";
}
cout << endl;
}
private:
size_t top;
size_t _size;
T* _array;
};
void Test()
{
Stack<int> stk(5);
stk.Push(1);
stk.Push(2);
stk.Push(3);
stk.Push(4);
stk.Push(5);
stk.Show();
cout << stk.Top() << endl;
cout << stk.Pop() << endl;
cout << stk.Pop() << endl;
cout << stk.Pop() << endl;
cout << stk.Top() << endl;
stk.Show();
}
int main()
{
Test();
system("pause");
return 0;
}栈结构是最简单的数据结构,很多数据结构都会用到栈结构,所以简单的栈结构常用的操作需掌握。
若有纰漏,欢迎指正
本文出自 “Vs吕小布” 博客,请务必保留此出处http://survive.blog.51cto.com/10728490/1768289
以下,仅对于栈结构常用的操作进行实现
包括:
入栈(push),出栈(pop),判空(empty),栈顶元素(GetTop)
#include <iostream>
using namespace std;
template<class T>
class Stack
{
public:
Stack(T size) // 初始化数组大小
:top(0) //栈顶指针
, _size(size)
{
_array = new T[size]; // top指向最后一个元素时,再往下跳会越界,所以多开一个
}
~Stack()
{
if (_array)
{
delete[] _array;
}
}
public:
void Push(const T val)
{
if (top >= _size)
{
cout << "overflow" << endl;
return;
}
else
{
_array[top] = val;
top++;
}
}
T Pop()
{
T ret;
if (top < 0)
{
cout << "underflow" << endl;
return -1;
}
else
{
top--;
ret = _array[top];
}
return ret;
}
bool isEmpty()
{
return top == 0;
}
T Top()
{
if (!isEmpty())
{
return _array[top - 1];
}
else
{
cout << "error:stack is empty!" << endl;
}
}
void Show()
{
if (isEmpty())
{
cout << "stack has no data!" << endl;
return;
}
for (size_t i = 0; i < top; i++)
{
cout << _array[i] << " ";
}
cout << endl;
}
private:
size_t top;
size_t _size;
T* _array;
};
void Test()
{
Stack<int> stk(5);
stk.Push(1);
stk.Push(2);
stk.Push(3);
stk.Push(4);
stk.Push(5);
stk.Show();
cout << stk.Top() << endl;
cout << stk.Pop() << endl;
cout << stk.Pop() << endl;
cout << stk.Pop() << endl;
cout << stk.Top() << endl;
stk.Show();
}
int main()
{
Test();
system("pause");
return 0;
}栈结构是最简单的数据结构,很多数据结构都会用到栈结构,所以简单的栈结构常用的操作需掌握。
若有纰漏,欢迎指正
本文出自 “Vs吕小布” 博客,请务必保留此出处http://survive.blog.51cto.com/10728490/1768289
相关文章推荐
- [置顶] 【数据结构】 一个数组实现两个栈【面试】
- [置顶] 【数据结构】 两个栈实现一个队列【面试】
- [置顶] 【数据结构】 出栈序列的合法性【面试】
- AVL Trees 学习笔记
- 实现一个基于LinkedList的队列数据结构,去除ArrayList集合中重复的元素,
- JavaScript数组实现数据结构中的队列与堆栈
- 数据结构与算法的分析 —— 渐进复杂度(三个记号)
- 数据结构和算法 – 8.链表
- 数据结构与算法的分析 —— 平均时间复杂度 vs 分摊时间复杂度
- 通用块层、IO调度层以及设备驱动层的数据结构
- 数据库索引-数据结构
- 数据结构索引-InnoDB索引
- 堆 (数据结构)
- 数据结构与算法-快速排序算法(java实现)
- 堆 (数据结构)
- 数据结构(C++)—— 向量(Vector)
- 数据结构与算法的分析
- 模拟实现顺序表
- 图形的遍历方法之先广后深法
- 算法的时间复杂度和空间复杂度杂谈