数据结构之 简单栈的创建
来源:互联网 发布:js websocket 编辑:程序博客网 时间:2024/05/29 14:22
顺序栈
#include "stdafx.h"#include<iostream>using namespace std;typedef int SElemType;typedef struct{ SElemType *base; int top; int stacksize;}Stack;bool initStack(Stack&stack,int size){ stack.base= new SElemType[size]; if(!stack.base) return 0; stack.stacksize=size; stack.top=0; return 1;}bool Push(Stack&stack, SElemType str){ if(stack.top>=stack.stacksize) return 0; stack.base[++stack.top]=str; return 1;}bool Pop(Stack&stack,SElemType& e){ if(stack.top<=0) { stack.top=0; return 0; } e=stack.base[stack.top]; stack.top--; return 1;}void freeStack(Stack&stack){ delete[] stack.base;}SElemType TopStack(Stack&stack){ return stack.base[stack.top];}int main(int argc, char* argv[]){ Stack stack; initStack(stack,50); for(int i=0;i<49;i++)//测试入栈 { Push(stack,i); } cout<<TopStack(stack)<<endl; for(int j=0;j<2;j++)//测试出栈 { SElemType e; Pop(stack,e); } cout<<TopStack(stack)<<endl; freeStack(stack); return 0;}
顺序栈解释:说白了就是开一个动态数组,进栈就是向里添加数据,数组角标由小到大递增,而出栈就是将添加了的最大角标递减,so Easy!栈有很多应用 如:编译,匹配括号,走迷宫等等
链式栈
#include "stdafx.h"#include <stdio.h>#include<iostream.h>template<typename T> class Stack{ public: Stack<T>(); ~Stack<T>(); void Push(const T&); T Pop(); void clear(); T GetTopData() const; private: typedef struct nodeStack{ T data; nodeStack *last; }*LinkStack; LinkStack _linkStack;};int main(int argc, char* argv[]){ Stack<char*> stack; stack.Push("栈1"); cout<<"入栈"<<endl; cout<<"入栈后栈顶:"<<stack.GetTopData()<<endl; stack.Push("栈2"); cout<<"入栈"<<endl; cout<<"入栈后栈顶:"<<stack.GetTopData()<<endl; stack.Push("栈3"); cout<<"入栈"<<endl; cout<<"入栈后栈顶:"<<stack.GetTopData()<<endl; stack.Push("栈4"); cout<<"入栈"<<endl; cout<<"入栈后栈顶:"<<stack.GetTopData()<<endl<<endl; char *c=stack.Pop(); cout<<"出栈"<<endl; cout<<"出栈后栈顶:"<<stack.GetTopData()<<" 上次出栈的值:"<<c<<endl; c= stack.Pop(); cout<<"出栈"<<endl; cout<<"出栈后栈顶:"<<stack.GetTopData()<<" 上次出栈的值:"<<c<<endl; return 0;}template<typename T> Stack<T>::Stack(){ _linkStack=new nodeStack(); _linkStack->last=NULL; _linkStack->data=(T)NULL;}template<typename T> Stack<T>::~Stack(){ clear();}template<typename T> void Stack<T>::Push(const T&t) { LinkStack ls=new nodeStack; ls->last=_linkStack; ls->data=t; _linkStack=ls;}template<typename T> T Stack<T>::Pop(){ T t=NULL; if(_linkStack) { LinkStack ls; ls=_linkStack->last; if(!ls)//如果是底栈 return (T)NULL; t=_linkStack->data;//输出当前出栈数据 delete _linkStack; //删除当前栈 _linkStack=ls; //把前一个栈指针指向当前栈 } return t;}template<typename T> void Stack<T>::clear(){ while(_linkStack) { Pop(); }}template<typename T> T Stack<T>::GetTopData() const{ if(!_linkStack) return (T)NULL; return (T)_linkStack->data;}
输出:
链式栈原理就是一个单向链表!写这个东西还是有用的,让我又复习数据结构教材,同时也复习了模板的应用~
更多文章:http://blog.csdn.net/what951006?viewmode=list
powered by:小乌龟在大乌龟背上~
0 0
- 数据结构之 简单栈的创建
- 数据结构之简单栈
- 简单数据结构的实现之顺序栈
- 简单数据结构的实现之链栈
- 数据结构之栈的简单实现
- 数据结构1-简单单链表的创建
- 简单数据结构之栈模拟
- 数据结构之——栈的创建于基本操作
- 数据结构之 双链表的创建,删除,插入
- 数据结构之图的创建及其遍历
- 数据结构之栈的简单实例c++实现
- 数据结构C语言之栈的简单实现
- 数据结构之链式栈的应用-简单表达式计算
- 数据结构之简单四则运算表达式求值8-(栈的实现)
- 数据结构之-一个简单的矩阵
- 简单数据结构的实现之链队列
- 简单数据结构的实现之循环队列
- 简单数据结构的实现之二叉树
- JavaScript的学习
- Android中ListView的addFooterView不显示的有关问题
- C++拷贝、赋值与销毁
- Go语言的学习
- [leetcode] 449. Serialize and Deserialize BST 解题报告
- 数据结构之 简单栈的创建
- 1018. Public Bike Management (30)
- 第四章 复合类型(1)
- 反省2016117晚
- 第四章 复合类型(2)
- Android Studio常见编译错误
- 概率论基础概念总结 Basic Concepts in Statistics
- Java并发(三)
- 在 IBM LinuxONE 云端平台建构虚拟服务器在线测试以 Docker 开发的 Application system