数制转换代码顺序栈java_栈基本操作(顺序栈+数制转换)

#include

#include

using namespace std;

//定义初始化长度和每次增加的长度

const int STACK_INIT_SIZE=10;

const int STACK_INCREAMENT=2;

struct Stack{

int* base; //栈底

int* top; //栈顶

int stacksize; //已分配栈的大小

};

//函数声明

void show();//主界面

void InitStack(Stack &S);//初始化栈

void DestroyStack(Stack &S);//销毁栈

void ClearStack(Stack &S);//清空栈

int StackEmpty(Stack S);//判断栈是否为空

int StackLength(Stack S);//获取栈的长度

void GetTop(Stack S,int &e);//获取顶部元素

void Push(Stack &S,int e);//入栈

void Pop(Stack &S,int &e);//出栈

void StackVisit(Stack S);//从栈顶遍历栈

void Transfer(int n,int r,Stack &s);//数制转换

int main(){

show();

Stack s;

int e,action;

while(cin>>action){

switch(action){

case 1://初始化栈

system("cls");

InitStack(s);

break;

case 2://销毁栈

system("cls");

DestroyStack(s);

break;

case 3://清空栈

system("cls");

ClearStack(s);

cout<

break;

case 4://判断栈是否为空

system("cls");

StackEmpty(s);

break;

case 5://获取栈的长度

system("cls");

StackLength(s);

break;

case 6://获取顶部元素

system("cls");

GetTop(s,e);

break;

case 7://入栈

system("cls");

cout<

int l;

cin>>l;

cout<

for(int i=0;i

cin>>e;

Push(s,e);

}

break;

case 8://出栈

system("cls");

Pop(s,e);

break;

case 9://从栈顶遍历栈

system("cls");

StackVisit(s);

break;

case 10://数制转换

system("cls");

cout<

int n,r;

cin>>n>>r;

Transfer(n,r,s);

break;

default:

return 0;

}

system("pause");

system("cls");

show();

}

return 0;

}

//主界面

void show(){

cout<

cout<

cout<初始化栈 |"<

cout<销毁栈 |"<

cout<清空栈 |"<

cout<判断栈是否为空 |"<

cout<获取栈长度 |"<

cout<获取栈顶元素 |"<

cout<压栈 |"<

cout<出栈 |"<

cout<遍历栈 |"<

cout<数制转换 |"<

cout<退出 |"<

cout<

cout<

}

//初始化栈

void InitStack(Stack &S){

S.base=new int[STACK_INIT_SIZE];

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

cout<

}

//销毁栈

void DestroyStack(Stack &S){

delete S.base;

cout<

}

//清空栈

void ClearStack(Stack &S){

S.top=S.base;

}

//判断栈是否为空

int StackEmpty(Stack S){

if(S.base==S.top){

cout<

return 1;

} else {

cout<

return 0;

}

}

//获取栈的长度

int StackLength(Stack S){

cout<

return S.top-S.base;

}

//获取顶部元素

void GetTop(Stack S,int &e){

if(S.top==S.base){

cout<

} else{

e=*(S.top-1);

cout<

}

}

//入栈

void Push(Stack &S,int e){

if(S.top-S.base>=S.stacksize){

//在原有的空间上增加一段空间,用realloc(),具体使用方法请自行百度

S.base=(int* )realloc(S.base,(S.stacksize+STACK_INCREAMENT)*sizeof(int));

if(!S.base){

cout<

} else {

S.top=S.base+S.stacksize;

S.stacksize+=STACK_INCREAMENT;

}

}

*(S.top++)=e;

cout<

}

//出栈

void Pop(Stack &S,int &e){

if(S.top==S.base){

cout<

} else {

e=*--S.top;

cout<

}

}

//从栈顶遍历栈

void StackVisit(Stack S){

if(S.top==S.base){

cout<

}

int e;

while(S.top>S.base){

//方法一

cout<

//方法二

//Pop(S,e);

}

cout<

}

//进制转换,将十进制的n转换为r进制的数

void Transfer(int n,int r,Stack &S){

ClearStack(S);

//n=(n/r)*r+n%r;

while(n){

Push(S,n%r);

n=n/r;

}

cout<

while(S.top>S.base){

cout<

}

cout<

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值