C语言《数据结构》栈的应用——进制转换;

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、利用

利用顺序栈进行入栈和出栈的操作;

二、使用步骤

1.创建顺序栈结构体

代码如下(示例):

typedef struct
{
	elemstyle *top;
	elemstyle *base;
	int cursize;
}SeqStack; 

2.源代码

代码如下(示例):

//利用栈将数字进行进制转换; 
//顺序栈的应用
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define NDEBUG
#define Stack_Size 100
#define STRLEN 30
#define ok 1
#define erro 2
typedef char elemstyle;
typedef int Status;//状态函数; 
typedef struct
{
	elemstyle *top;
	elemstyle *base;
	int cursize;
}SeqStack; 
//栈的初始化;
SeqStack*Init_Stack(SeqStack*ps)
{
	assert(ps!=NULL);
	ps->base=(elemstyle*)malloc(sizeof(elemstyle)*Stack_Size);
	ps->top=ps->base;
	ps->cursize=Stack_Size;
} 
//入栈;
Status push(SeqStack*ps,elemstyle val)
{
	assert(ps!=NULL);
	*ps->top=val;
	ps->top+=1;
	return ok;
} 
//出栈;
Status pop(SeqStack*ps,elemstyle *pval)
{
	assert(ps!=NULL);
	ps->top-=1;
	*pval=*ps->top;
	return ok;
} 
//判断栈空;
bool StackEmpty(SeqStack*ps)
{
	assert(ps!=NULL);
	return ps->top==ps->base;
} 
//销毁栈;
void DestryStack(SeqStack*ps)
{
	assert(ps!=NULL);
	free(ps->base);
	ps->top=NULL;
	ps->base=NULL;
	ps->cursize=0;
} 
//按照指定进制转换;
char *Metric(int n,char*buff,int val)
{
	if(buff==NULL)
	{
		return buff;
	}
	SeqStack *ps;
	Init_Stack(ps);
	char ch;
	int i;
   static char str[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//只有16进制,静态函数; 
	//                 0   1   2   3   4   5   6   7   8   9   10   11  12  13  14  15
	while(n!=0)
	{
		push(ps,str[n%val]);
		n=n/val;
	}
	i=0;
	while(!StackEmpty(ps))
	{
		pop(ps,&ch);
		buff[i++]=ch;
	}
	buff[i]='\0';
	DestryStack(ps);
	return buff;
} 
/*
void changeoct(SeqStack*ps,elemstyle n)
{
	
		Init_Stack(ps);
		elemstyle pval;
		while(n!=0)
		{
			push(ps,n%8);
			n=n/8;
		}
	    while(!StackEmpty(ps))
	    {
	    	pop(ps,&pval);
	    	printf("%d",pval); 
	    }
	    printf("\n");
	    DestryStack(ps);
}
*/
int main()
{
    int n;
	SeqStack*ps;
	int val;
	char buff[STRLEN]={};
	scanf("%d",&n);
	scanf("%d",&val);
	//changeoct(ps,n);
	Metric(n,buff,val);
	printf("%s",buff);
	return 0;
}

3.总结

利用栈先进后出的方式,可以解决很多问题;




  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心随而动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值