链栈的数制转换

链栈的基本操作类似于单链表,栈只能在一端进行插入删除操作。

此处链栈的定义运用到了结构体指针变量的知识,在这里简要说明,以便对链栈定义进一步理解。

结构指针变量

结构指针变量:使用一个指针变量来指向一个结构变量。结构指针变量中的值是指所指向的结构变量的首地址,通过结构指针即可访问该结构变量。这里的 *LinkStack存放结构体StackNode的首地址,有了结构指针变量,就可以更方便的访问该结构体。

     结构名和结构变量是两个不同的概念。结构名只能表示一个结构形式,编译系统不对他分配内存空间,只有当某变量被说明为这种类型结构时才对该变量分配存储空间。

  其访问的一般形式:(*结构指针变量).成员名 或者 结构指针变量名->成员名。

  有了结构指针变量的知识基础我们再来分析该数值转换问题。

问题分析:

进制转换(十转N):用栈暂存低位制

·····N mod d

·····N=N div d

实现代码如下

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#define OK 1
#define ERROR 0
using namespace std;
//链栈的初始化
typedef  struct StackNode{
      int  data;
      struct StackNode *next;
 }StackNode,  *LinkStack; // LinkStack是头指针,存放首元结点的地址 
LinkStack S;   //定义头指针的名字是S 
void InitStack(LinkStack &S)
{
	S=NULL;
} 
//判断链栈是否为空
bool StackEmpty(LinkStack S)
{   
	if(S==NULL)
		return OK;
	else
	 	return ERROR;
}
//链栈进栈
int Push(LinkStack &S,int e)
{
	LinkStack p;
	p=new StackNode;
	p->data=e;
	p->next=S;
	S=p;
	return OK;
}
//链栈出栈
int Pop(LinkStack &S,int &e)
{
	LinkStack p;
	if(S==NULL)
		return ERROR;
	e=S->data;
	p=S;
	S=S->next;
	delete p;
	return OK;
} 
void conversion()
{
	LinkStack S;
	int N,e;
	InitStack(S);
	cout<<"输入一个非负十进制数:"<<endl;
	cin>>N;
	while(N)
	{
		Push(S,N%8);
		N=N/8;
	}
	cout<<"与其等值的八进制数是:"<<endl;
	while(!StackEmpty(S))
	{
		Pop(S,e);
		cout<<e;
	}
}
int main()
{
	conversion();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42097814/article/details/83119063