数据结构(Data Structure)——1、栈(Stack)
来源:互联网 发布:mac双系统访问文件夹 编辑:程序博客网 时间:2024/06/14 22:09
栈的介绍
栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线形表。
栈是一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。栈可以用来在函数调用的时候存储断点,做递归时要用到栈!
栈的特性:只在表的一端访问元素的表,其元素只能从栈顶端增加或删除。设计存放那些只能从一端访问的元素。
增加(压入push):栈顶增加元素
删除(弹出pop):栈顶删除元素
后进先出原则(LIFO)
栈满:栈已达到处理元素个数的最大值。 栈空:无法从栈中删除元素。
代码示例:
1、SeqStack.h文件
#define MAXSIZE 0xFFFFtemplate<class type>class SeqStack{int top; //栈顶指示type *stacka; //数组名int maxsize; //栈最大可容纳元素个数public:SeqStack();SeqStack(int size);SeqStack(type data[], int size);virtual ~SeqStack(){delete[]stacka;}void Push(const type &item); //元素item压栈type Pop(); //数据元素出栈,返回之type GetTop(); //读栈顶数据元素并返回int Empty()const{return top == -1; //判断栈是否为空}int Full()const{return top == maxsize - 1; //判断栈是否为满}void Clear(){top = -1; //清空栈}};template<class type>SeqStack<type>::SeqStack():top(-1), maxsize(MAXSIZE){stacka = new type[maxsize];if (stacka == NULL){cerr << "动态存储分配失败!" << endl;exit(1);}}template<class type>SeqStack<type>::SeqStack(int size) :top(-1), maxsize(size){stacka = new type[maxsize]; //创建存储栈的数组if (stacka == NULL){ //分配不成功cerr << "动态存储分配失败!" << endl;exit(1);}}template<class type>SeqStack<type>::SeqStack(type data[], int size) :top(-1), maxsize(size){stacka = new type[maxsize]; //创建存储栈的数组if (stacka == NULL){ //分配不成功cerr << "动态存储分配失败!" << endl;exit(1);}for (int i = 0; i<maxsize; i++){stacka[i] = data[i];}top += maxsize;}template<class type>void SeqStack<type>::Push(const type& item){//若栈已满,出错处理;否则把元素item压栈if (Full()){cerr << "栈已满,不能压栈!" << endl;exit(1);}//这里我们采用指针先移动,然后再对元素进行操作的方式top++;stacka[top] = item;}template<class type>type SeqStack<type>::Pop(){if (Empty()){cerr << "栈已空!" << endl;exit(1);}//栈不空,取栈顶元素type data = stacka[top];top--;//返回栈顶元素return data;}template<class type>type SeqStack<type>::GetTop(){//若栈不空,返回栈顶元素的值if (Empty()){cerr << "栈空!" << endl;exit(1);}//返回栈顶元素的值return stacka[top];}
2、main.c文件
#include <iostream>#include "SeqStack.h"using namespace std;int main(){int data[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };SeqStack<int> stack(data, 10);while (!stack.Empty()){cout << stack.Pop() << " ";}cout << endl;system("pause");return 0;}
3、代码运行结果
分析:程序如实实现了栈的创建,插入,删除等操作,代码中通过使用类模板,实现了面向对象编程的思想。
Next:数据结构(Data Structure)——2、队列(Queue)
2 0
- 数据结构(Data Structure)——1、栈(Stack)
- 数据结构(Data Structure)——0、数据类型
- 数据结构(Data Structure)——二分查找
- 数据结构之图 Data Structure — graph
- 常用的数据结构(data structure)
- Heap(data structure)——堆(数据结构)(源自维基百科)
- 数据结构(C++) Data Structure learning——第一章 线性表(SEC01)
- 栈(Stack)——后进先出(LIFO)的数据结构(Data Structures)
- The Stack Data Structure
- Data Structure:stack
- Stack & Queue--Data Structure
- 【Data Structures】 5. Stack—A limited data structure and LIFO
- Data Structure?(hdu4217)
- uva11995 I Can Guess the Data Structure!(基本数据结构)
- UVA11995 I Can Guess the Data Structure!(数据结构,模拟)
- 数据结构(Data Structure) 第一集(算法分析)
- Data Structure数据结构
- usb数据结构(data structure)
- C++用字符数组实现MyString类
- freetype+opencv+vs2010图片/视频显示汉字
- linux下svn使用代理
- 基于Material Design设计的分享文字图片的APP
- android 新版 TabLayout
- 数据结构(Data Structure)——1、栈(Stack)
- 【Boost】boost库asio详解9——TCP的简单例子2
- 完全理解Gson(1):简单入门
- POJ-2155-Matrix
- 冒泡排序 二分排序 while遍历、递归遍历目录与子目录文件
- 百度推送需要的参数
- 数据结构课设 求前缀表达式的值
- 体验了不带摄像头的VR头盔以后,觉得它也只能用来玩玩游戏了
- [动态树分治] BZOJ4012 [HNOI2015]开店