//顺序栈
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define Status int
#define SElmType int
#define OVERFLOW -2
//自定义栈的结构体
typedef struct
{
SElmType *base;//栈的底端,不移动
SElmType *top;//栈的顶端,移动
int stacksize;//栈的最大容量
}SqStack;
//初始化空栈
Status InitStack(SqStack &S)
{
S.base=new SElmType[MAXSIZE];//为顺序栈动态分配一个内存为MAXSIZE的数组空间
if(!S.base)//如果内存分配失败直接退出系统
exit(OVERFLOW);
S.top=S.base;//顶端和底端指针相同,空栈
S.stacksize=MAXSIZE;//stacksize为栈的最大容量
return OK;
}
//入栈
Status PushStack(SqStack &S,SElmType e)
{
if(S.top-S.base==MAXSIZE)
exit(OVERFLOW);
*S.top++=e;
return OK;
}
//出栈
Status PopStack(SqStack &S,SElmType &e)
{
if(S.base==S.top)
exit(OVERFLOW);
e=*--S.top;
return OK;
}
//返回栈顶元素
SElmType GetTop(SqStack &S,SElmType e)
{
if(S.top==S.base)
exit(OVERFLOW);
return *(S.top-1);
}
//是否为空栈
Status StackEmpty(SqStack &S)
{
if(S.base==S.top)
return ERROR;
else
return OK;
}
//功能函数
void Conversion(int N,SqStack &S)
{
InitStack(S);
while(N)
{
PushStack(S,(N%8));
N=N/8;
}
while(StackEmpty(S))
{
PopStack(S,N);
cout<<N;
//cout<<GetTop(S,N);最后一次调用StackEmpty函数时,栈空,GetTop函数终止系统,因此不会出现栈底元素。
}
cout<<endl;
}
int main()
{
SqStack S;
int N;
cout<<"请输入需要转换的十进制数"<<endl;
cin>>N;
Conversion(N,S);
return 0;
}
//链栈
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int SElmType;
typedef int Status;
//链栈
typedef struct StackNode
{
SElmType data;//存储数据
struct StackNode *next;//结点指针
}StackNode,*LinkStack;
//初始化
Status InitStack(LinkStack &S)
{
S=NULL;//创建一个空栈
return OK;
}
//入栈
Status PushStack(LinkStack &S,SElmType e)
{
LinkStack p= new StackNode;//生成临时结点
p->data=e;//数据域赋值e
p->next=S;//新结点插入栈顶
S=p;//修改栈顶指针为p,下一个新结点会插到p前面
return OK;
}
//出栈
Status PopStack(LinkStack &S,SElmType &e)
{
if(S==NULL)//判断栈是否为空
return ERROR;
LinkStack p;//临时结点
e=S->data;//数据传给e方便输出
p=S;//p临时保存栈顶空间,以备释放
S=S->next;//修改栈顶指针
delete p;//释放栈顶空间
return OK;
}
//取栈顶元素
SElmType GetTop(LinkStack &S)
{
if(S!=NULL)//指针不移动
return S->data;
}
//是否为空栈
Status StackEmpty(LinkStack &S)
{
if(S==NULL)
return ERROR;
else
return OK;
}
//功能函数
void Conversion(LinkStack &S,SElmType N)
{
InitStack(S);
while(N)
{
PushStack(S,(N%8));//将除8后的余数压入栈中
N=N/8;
}
while(StackEmpty(S))
{
PopStack(S,N);//出栈,指针下移
cout<<N;
}
cout<<endl;
}
int main()
{
LinkStack S;
SElmType N;
cout<<"请输入需要转换的十进制数"<<endl;
cin>>N;
Conversion(S,N);
return 0;
}
原文链接: https://www.cnblogs.com/c-truth/p/12602186.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
![栈中的进制转换,十进制转八进制,C++](https://www.ccppcoding.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/338816
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!