栈的应用实例1—数制转换

栈的应用实例—数制转换
  1. 先复习一下数电和组成原理课程中所学过的进制转换问题。
  2. 常见的进制有十进制(D),八进制(O),十六进制(H),二进制(B)。
  3. 它们之间的部分转换如下:
    /
    /
  4. 这里有一个例子
    /
  5. 转换为八进制的结果为2504,可以看出正好与运算过程的值逆序。因此我们可以将运算过程中得到的八进制数的各位顺序进制,然后按出栈序列打印输出即为所求八进制数。我们这里可以用上次的博客里写的程序来完成。
  6. 实际代码如下:
#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

#define STACK_INIT_SIZE 100   //栈的初始化容量 
#define STACK_INC_SIZE 10	  //栈的分配增量 

typedef int elemType;

//栈的数据结构
typedef struct{
	elemType* base;  //栈底指针 
	elemType* top;	//栈顶指针 
	int stackSize;	//当前已分配的栈总存储空间 
}SqStack; 

void initStack(SqStack& S);  		 //构造空栈并初始化 
void pushStack(SqStack& S,elemType data); //数据元素进栈
void popStack(SqStack& S);  		 //数据元素出栈 

void initStack(SqStack& S)
{ 
	S.base=(elemType*)malloc(STACK_INIT_SIZE * sizeof(elemType));
	if(!S.base)  exit(1);
	S.top=S.base;
	S.stackSize=STACK_INIT_SIZE;  
} 

void pushStack(SqStack& S,elemType data)
{
	if(S.top-S.base>=S.stackSize) //栈满,扩充容量 
	{
		S.base=(elemType*)realloc(S.base,(S.stackSize+STACK_INC_SIZE) * sizeof(elemType));
		if(!S.base)  exit(1);
		S.top=S.base+S.stackSize; //栈顶改变
		S.stackSize+=STACK_INC_SIZE;
	}
	*S.top=data;
	cout<<"进栈:"<<*S.top;
	S.top++;
	cout<<endl;
}

void popStack(SqStack& S)
{
	if(S.top!=S.base)
	{
		cout<<"出栈:"<<*(S.top-1); 
		S.top--;
	} 
	cout<<endl;
}

void printStack(SqStack& S)
{
	cout<<"栈中的内容为:";
	for(elemType* i=S.base;i<S.top;i++)
	{
		int j=0;
		cout<<*(i+j)<<"  "; 
		j++;
	}
	cout<<endl;
}

int main()
{
	SqStack S;     //定义栈S 
	initStack(S);  //初始化栈S 
	int N;
	cin>>N;
	while(N) 
	{
		pushStack(S,N%8);
		N=N/8;
	}
	cout<<endl;
	while(S.top>S.base)
	{
		popStack(S);
		if(S.top==S.base)
		{
			popStack(S);
			break;
		}
	}
	return 0;
}

运行结果:
/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值