VC++2012编程演练数据结构《3》堆栈实现进制转换
来源:互联网 发布:php 网络爬虫抓取图片 编辑:程序博客网 时间:2024/06/06 03:55
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。
栈可以用来在函数调用的时候存储断点,做递归时要用到栈!
以上定义是在经典计算机科学中的解释。
在计算机系统中,栈则是一个具有以上属性的动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。在i386机器中,栈顶由称为esp的寄存器进行定位。压栈的操作使得栈顶的地址增大,弹出的操作使得栈顶的地址减小。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。
栈可以用来在函数调用的时候存储断点,做递归时要用到栈!
以上定义是在经典计算机科学中的解释。
在计算机系统中,栈则是一个具有以上属性的动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。在i386机器中,栈顶由称为esp的寄存器进行定位。压栈的操作使得栈顶的地址增大,弹出的操作使得栈顶的地址减小。
栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。
打开IDE
我们创建一个VC++2012工程来实现堆栈类与应用
头文件
#if !defined(AFX_STACK_H__CC48020F_CB24_4299_8D43_0DCB84F1375E__INCLUDED_)#define AFX_STACK_H__CC48020F_CB24_4299_8D43_0DCB84F1375E__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include "stdafx.h"//顺序栈的类定义stack.h#define ERROR 0#define EQUAL 1#define OVERFLOW -1#define STACKSIZE 100#define STACKINCREMENT 10class SqStack{private:SElemType *base;SElemType *top;int stacksize;public://构造一个空栈SStatus InitStack(SqStack **S);//栈存在则栈被销毁Status DestroyStack();//栈存在则清为空栈Status ClearStack();//栈存在则返回true,否则falsebool StackEmpty();// 栈存在则返回栈的元素个数,即栈的长度int StackLength();//栈存在且非空则返回栈的栈顶元素SElemType GetTop();// 栈存在则插入元素e为新的栈顶元素Status Push(SElemType e);// 栈存在且非空则删除栈的栈顶元素并用e返回其值SElemType Pop(SElemType *e);// 栈的遍历void StackTraverse(void (*visit)(SElemType *));};#endif // !defined(AFX_STACK_H__CC48020F_CB24_4299_8D43_0DCB84F1375E__INCLUDED_)
实现文件
//////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "stack.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////Status SqStack::InitStack(SqStack **S){ (*S)=(SqStack *) malloc(sizeof(SqStack));(*S)->base=(SElemType *)malloc(STACKSIZE *sizeof(SElemType));if(!(*S)->base) exit(OVERFLOW);(*S)->top=(*S)->base;(*S)->stacksize=0;return 1;}Status SqStack::DestroyStack(){free(base);return 1;}Status SqStack::ClearStack(){stacksize=0;return 1;}bool SqStack::StackEmpty(){if(stacksize==0) return true;else return false;}int SqStack::StackLength(){ return stacksize;}SElemType SqStack::GetTop(){ if(top==base){cerr<<"空栈!\n";exit(1);}return *(top-1);}Status SqStack::Push(SElemType e){*(top++)=e;stacksize++;return 1;}SElemType SqStack::Pop(SElemType *e){if(top==base){cerr<<"空栈!\n";exit(1);}*e=*--top;stacksize--;return *e;}void SqStack::StackTraverse(void (*visit)(SElemType *)){while(top!=base){stacksize--;visit(--top);}}我们来实现调用类演习一下
#include "stdafx.h"#include "stack.h"using namespace std;void conversion(){SqStack *S;SElemType e;int n;S->InitStack(&S);printf("输入十进制数:");cin>>n;if(n<0){ printf("\n数必须大于零!\n");return;}if(!n) S->Push(0);while(n){S->Push(n%8);n=n/8;}printf("结果是:");while(!S->StackEmpty()){S->Pop(&e);printf("%d",e);}}void main(){ printf("运行结果:\n");conversion();getch();}
源代码下载地址如下
http://download.csdn.net/detail/yincheng01/4785289
- VC++2012编程演练数据结构《3》堆栈实现进制转换
- VC++2012编程演练数据结构《5》堆栈实现递归运算
- VC++2012编程演练数据结构《14》链式堆栈
- VC++2012编程演练数据结构《5》堆栈实现解析任意计算表达式
- VC++2012编程演练数据结构《6》优先级队列演练
- VC++2012编程演练数据结构《11》哈希表
- VC++2012编程演练数据结构《12》二叉排序树
- VC++2012编程演练数据结构《13》单链表
- VC++2012编程演练数据结构《21》二叉排序树
- VC++2012编程演练数据结构《24》哈夫曼树
- VC++2012编程演练数据结构《29》图
- VC++2012编程演练数据结构《4》队列实现检验回文数
- VC++2012编程演练数据结构《1》循环双端队列
- VC++2012编程演练数据结构《9》平衡二叉搜索树
- VC++2012编程演练数据结构《15》双循环链表
- VC++2012编程演练数据结构《16》广义表
- VC++2012编程演练数据结构《17》稀疏矩阵
- VC++2012编程演练数据结构《18》KMP算法
- 斐波那契数列(兔子数列)
- android 打包失败
- Bag-of-words model in computer vision
- Android.util.Log
- JS全局变量VAR和THIS--在函数内部,加var是局部变量,不加是全局变量
- VC++2012编程演练数据结构《3》堆栈实现进制转换
- 如何在区域集群上部署 Oracle RAC 11.2.0.3
- layoutSubviews在以下情况下会被调用
- 单元测试中的“可测性”
- 第十二周-素数6
- UILineBreakModeWordWrap
- java 获取路径
- $.mobile.changePage("list.html","slide",false,true); list.html中的js不执行的解决方法
- SOCKET编程之使用AF_UNIX实现本机数据流通信示例