数据结构.栈(C语言实现)
2013-10-01 14:58
447 查看
#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;
}
//stacklen
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;
}
//stacklen
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语言与java语言实现
- 数据结构之---c语言实现双向链表操作
- 数据结构之---C语言实现图的十字链表存储表示
- 数据结构——单链表(C语言实现)
- 数据结构之C语言实现顺序表(SeqList)无主函数
- c语言 栈的实现 满足任何数据结构
- 数据结构之 栈(C语言实现)
- 数据结构之单链表C语言实现
- 数据结构与C语言实现(十二)——排序合集
- 数据结构之---C语言实现选择排序
- [算法]数据结构算法背包问题解法之递归解法,C语言实现
- 数据结构之串的基本操作的实现(c语言)
- c语言实现通用数据结构(五):通用映射(HashMap)
- 数据结构—非二叉树存储结构(C语言实现)
- 数据结构之循环队列c语言实现
- 数据结构之单链表的C语言实现
- C语言 文件I/O:实现结构体数据 存储到文件和从文件读取
- 数据结构之队列(C语言实现)
- 数据结构之---C语言实现括号匹配(栈实现)
- 数据结构中链式栈的c语言实现