stack.c代码如下:
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
//创建栈
Stack *stack_create()
{
Stack * S =(Stack*)malloc(sizeof(Stack));
if(NULL ==S)
{
printf("创建失败\n");
return NULL;
}
printf("创建成功\n");
S->top = -1;
return S;
}
//判空
int stack_empty(Stack* S)
{
return S->top==-1;
}
//判满
int stack_full(Stack *S)
{
return S->top==MAX-1;
}
//入栈
void stack_push(Stack *S,type e)
{
//判断逻辑
if(NULL==S || stack_full(S))
{
printf("入栈失败\n");
return ;
}
//先加top再放进
++S->top;
S->data[S->top]=e;
printf("入栈成功\n");
}
//进制转换
void stack_trans(Stack *S,int m,int n)
{
//判断逻辑
if(S==NULL||stack_full(S))
{
printf("失败\n");
return;
}
//进制转换
while(m)
{
stack_push(S,m%n);
m=m/n;
}
//转换出栈
printf("转换后为:\n");
while(S->top!=-1)
{
stack_pop(S);
}
}
//出栈
void stack_pop(Stack *S)
{
//判断逻辑
if(NULL==S || stack_empty(S))
{
printf("出栈失败\n");
return ;
}
printf("%d出栈成功\n",S->data[S->top]);
S->top--;
}
//遍历
void stack_show(Stack *S)
{
//判断逻辑
if(NULL==S || stack_empty(S))
{
printf("遍历失败\n");
return ;
}
printf("栈中元素分别是:");
for(int i = S->top;i>=0;i--)
{
printf("%d\t",S->data[i]);
}
putchar(10);
}
stack.h代码如下:
#ifndef __STACK_H__
#define __STACK_H__
#define MAX 8
typedef int type;
typedef struct
{
type data[MAX];
int top;
}Stack;
//创建栈
Stack * stack_create();
//判空
int stack_empty(Stack* S);
//判满
int stack_full(Stack *S);
//入栈
void stack_push(Stack *S,type e);
//进制转换
void stack_trans(Stack *S,int M,int N);
//出栈
void stack_pop(Stack *S);
//遍历
void stack_show(Stack *S);
#endif
main代码如下:
#include <stdio.h>
#include "stack.h"
int main(int argc, const char *argv[])
{
Stack *S=stack_create();
if(NULL==S)
{
return -1;
}
stack_trans(S,75,2);
stack_trans(S,75,8);
return 0;
}
结果如下:
ubuntu@ubuntu:3zy$ gcc *.c
ubuntu@ubuntu:3zy$ ./a.out
创建成功
入栈成功
入栈成功
入栈成功
入栈成功
入栈成功
入栈成功
入栈成功
转换后为:
1出栈成功
0出栈成功
0出栈成功
1出栈成功
0出栈成功
1出栈成功
1出栈成功
入栈成功
入栈成功
入栈成功
转换后为:
1出栈成功
1出栈成功
3出栈成功