数据结构.栈(C语言实现)
来源:互联网 发布:playclubsaber捏脸数据 编辑:程序博客网 时间:2024/04/20 13:30
#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语言实现栈
- 数据结构.栈(C语言实现)
- 数据结构---栈C语言实现
- 数据结构栈C语言实现
- 数据结构(C语言实现)
- 数据结构C语言实现
- 数据结构(C语言实现)
- C语言实现数据结构中的顺序栈
- C语言实现数据结构中的链栈
- C语言实现堆栈(栈)的数据结构
- 数据结构C语言实现之顺序栈
- 数据结构C语言实现之链栈
- <数据结构>顺序栈的C语言实现
- <数据结构>链栈的C语言实现
- C语言实现栈数据结构操作
- [数据结构]C语言栈的实现
- 数据结构--顺序栈实现(c语言)
- 数据结构-链式栈-C语言实现
- 在windows 7 虚拟机上安装windows xp系统全过程总结
- 黑马程序员——浅谈java中的包
- 二叉树学习笔记
- InterlockedIncrement函数详解
- java抽象类和接口
- 数据结构.栈(C语言实现)
- 【XE5-IndyDB -2】 IndyDB 服务器
- UVa 10879 Code Refactoring (因数分解)
- C语言存储类总结
- 数据结构.循环队列(C语言实现)
- hibernate之session实例的创建
- 华为销售服务--面试经验(长沙地区)
- 数据结构.队列(C语言实现)
- java内部类