提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
提示:以下是本篇文章正文内容,下面案例可供参考
一、利用
利用顺序栈进行入栈和出栈的操作;
二、使用步骤
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.总结
利用栈先进后出的方式,可以解决很多问题;