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