#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
#define Status int
#define OK 1
#define ERROR 0
#define SElemtype int
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define PRINT 1
typedef struct {
SElemtype *base;
SElemtype *top;
int stacksize;
}SqStack;
//initialize stack
Status InitStack(SqStack *S)
{
S->base = (SElemtype *)malloc(STACK_INIT_SIZE * sizeof(SElemtype));
if ( !S->base)
return ERROR;
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
int StackLen(SqStack S)
{
int i=0;
while (S.top != S.base)
{
i++;
S.top -=1;
}
return i;
//return (S.top - S.base);
}
//get top
Status GetTop(SqStack *S, SElemtype *e)
{
if (S->base == S->top)
return ERROR;
*e = *(S->top - 1);
return OK;
}
//Push
Status Push(SqStack *S, SElemtype e)
{
if (S->top - S->base >= S->stacksize)
{
S->base = (SElemtype *)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemtype));
if (!S->base)
return ERROR;
S->top = S->base + STACK_INIT_SIZE;
S->stacksize += STACKINCREMENT;
}
*S->top++ = e;
#if defined(PRINT)
printf("\n###### push %d into stack #######",e);
#endif
return OK;
}
//pop
Status Pop(SqStack *S,SElemtype *e)
{
if (S->top == S->base)
return ERROR;
*e =*--S->top;
#if defined(PRINT)
printf("\n###### pop %d from stack #######",*e);
#endif
return OK;
}
int main(void)
{
SElemtype c,m;
SqStack s;
int len, i, sum = 0;
printf("Please input a digit : ");
InitStack(&s);
scanf("%d",&c);
while ( c > 0)
{
Push(&s, c);
--c;
sleep(1);
}
len = StackLen(s);
#if defined(PRINT)
printf("\n###### stack length : %d #######",len);
#endif
for (i = 0; i < len; ++i)
{
Pop(&s, &m);
sum += m;
}
printf("\nDecimal is %d\n",sum);
}
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
#define Status int
#define OK 1
#define ERROR 0
#define SElemtype int
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define PRINT 1
typedef struct {
SElemtype *base;
SElemtype *top;
int stacksize;
}SqStack;
//initialize stack
Status InitStack(SqStack *S)
{
S->base = (SElemtype *)malloc(STACK_INIT_SIZE * sizeof(SElemtype));
if ( !S->base)
return ERROR;
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}
int StackLen(SqStack S)
{
int i=0;
while (S.top != S.base)
{
i++;
S.top -=1;
}
return i;
//return (S.top - S.base);
}
//get top
Status GetTop(SqStack *S, SElemtype *e)
{
if (S->base == S->top)
return ERROR;
*e = *(S->top - 1);
return OK;
}
//Push
Status Push(SqStack *S, SElemtype e)
{
if (S->top - S->base >= S->stacksize)
{
S->base = (SElemtype *)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemtype));
if (!S->base)
return ERROR;
S->top = S->base + STACK_INIT_SIZE;
S->stacksize += STACKINCREMENT;
}
*S->top++ = e;
#if defined(PRINT)
printf("\n###### push %d into stack #######",e);
#endif
return OK;
}
//pop
Status Pop(SqStack *S,SElemtype *e)
{
if (S->top == S->base)
return ERROR;
*e =*--S->top;
#if defined(PRINT)
printf("\n###### pop %d from stack #######",*e);
#endif
return OK;
}
int main(void)
{
SElemtype c,m;
SqStack s;
int len, i, sum = 0;
printf("Please input a digit : ");
InitStack(&s);
scanf("%d",&c);
while ( c > 0)
{
Push(&s, c);
--c;
sleep(1);
}
len = StackLen(s);
#if defined(PRINT)
printf("\n###### stack length : %d #######",len);
#endif
for (i = 0; i < len; ++i)
{
Pop(&s, &m);
sum += m;
}
printf("\nDecimal is %d\n",sum);
}
本文介绍了一个基于C语言实现的顺序栈数据结构及其基本操作,包括初始化、压栈、弹栈、获取栈顶元素和计算栈长度等。通过具体实例展示了如何使用该栈来将输入的整数转换为对应的十进制数。

被折叠的 条评论
为什么被折叠?



