您的位置:首页 > 其它

顺序栈之进制转换(C实现)

2015-11-22 12:17 211 查看
data.h

#ifndef _DATA_H
#define _DATA_H

typedef int ElemType;

#endif


stack.h

#ifndef _STACK_H
#define _STACK_H

#include "data.h"

#define STACK_INIT_SIZE 10
#define STACK_INCREME	10

typedef struct
{
ElemType * base;
ElemType *top;
int size;
}STACK;

STACK * InitStack();

void DestroyStack(STACK *s);

int Push(STACK *s,ElemType *e);

int Pop(STACK *s,ElemType *e);

int IsEmpty(STACK *s);

#endif
stack.c

#include "stack.h"
#include <stdio.h>
#include <stdlib.h>

STACK * InitStack()
{
STACK * s = (STACK *)malloc(sizeof(STACK));
if(s == NULL)
exit(0);
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if(s->base == NULL) exit(0);
s->top = s->base;
s->size = STACK_INIT_SIZE;
return s;
}

void DestroyStack(STACK *s)
{
free(s->base);
free(s);
}

int Push(STACK *s,ElemType *e)
{
if(s == NULL || e == NULL)
return 0;
if(s->top - s->base >= s->size)
{
s->base = (ElemType *)realloc(s->base,
(s->size + STACK_INCREME) *sizeof(ElemType));
if(s->base == NULL)
return 0;
s->top = s->base + s->size;
s->size = s->size + STACK_INCREME;
}
//	*s->top = *e;
//	s->top ++;
*s->top++ = *e;
return 1;
}

int Pop(STACK *s,ElemType *e)
{
if(s == NULL || e == NULL)
return 0;
if(s->base == s->top) return 0;
*e = *--s->top;
return 1;
}

int IsEmpty(STACK *s)
{
return s->top == s->base ? 1 : 0;
}
main.c

#include "stack.h"
#include <stdio.h>

int main()
{
int num = 1348,temp;
STACK * s = InitStack();
while(num)
{
temp = num % 8;
Push(s,&temp);
num /= 8;
}
printf("result is ");
while(!IsEmpty(s))
{
Pop(s,&temp);
printf("%d",temp);
}
printf("\n");
DestroyStack(s);
}


VC6运行效果图、



*这个程序是将10进制的1348转换成8进制的2504
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: