栈的实现代码及操作:
#include
<
malloc.h
>
#include < stdio.h >
#define STACK_INIT_SIZE 100
#define INCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef struct SqStack
... {
ElemType *base;
int top;
int stacksize;
} SqStack;
// 清空栈
int ClearStack(SqStack * s)
... {
s->top=-1;
return OK;
}
// 判断是否为空
int StackEmpty(SqStack s)
... {
if(s.top==-1)
return TRUE;
else
return FALSE;
}
// 初始化
int InitStack(SqStack * s)
... {
s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s->base)
return OVERFLOW;
s->top=-1;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
// 入栈
int Push(SqStack * s,ElemType e)
... {
if(s->top==s->stacksize-1)
...{
ElemType *newbase=(ElemType *)realloc(s->base,sizeof(ElemType)*(s->stacksize+INCREMENT));
if(!newbase)
return OVERFLOW;
s->base=newbase;
s->stacksize+=INCREMENT;
}
s->top++;
s->base[s->top]=e;
return OK;
}
// 出栈
int Pop(SqStack * s,ElemType * e)
... {
if(StackEmpty(*s))
return ERROR;
*e=s->base[s->top];
s->top-=1;
return OK;
}
// 栈顶元素
int GetTop(SqStack s,ElemType * e)
... {
if(s.top==-1)
return ERROR;
else
...{
*e=s.base[s.top];
return OK;
}
}
int main( int argc, char * argv[])
... {
int i;
ElemType elem;
SqStack s;
InitStack(&s);
for(i=0;i<5;i++)
...{
printf("input a number:");
scanf("%d",&elem);
Push(&s,elem);
printf(" ");
}
for(i=0;i<5;i++)
...{
if(Pop(&s,&elem)==OK)
...{
printf("%d ,",elem);
}
else
...{
printf("empty!");
break;
}
}
}
#include < stdio.h >
#define STACK_INIT_SIZE 100
#define INCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef struct SqStack
... {
ElemType *base;
int top;
int stacksize;
} SqStack;
// 清空栈
int ClearStack(SqStack * s)
... {
s->top=-1;
return OK;
}
// 判断是否为空
int StackEmpty(SqStack s)
... {
if(s.top==-1)
return TRUE;
else
return FALSE;
}
// 初始化
int InitStack(SqStack * s)
... {
s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s->base)
return OVERFLOW;
s->top=-1;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
// 入栈
int Push(SqStack * s,ElemType e)
... {
if(s->top==s->stacksize-1)
...{
ElemType *newbase=(ElemType *)realloc(s->base,sizeof(ElemType)*(s->stacksize+INCREMENT));
if(!newbase)
return OVERFLOW;
s->base=newbase;
s->stacksize+=INCREMENT;
}
s->top++;
s->base[s->top]=e;
return OK;
}
// 出栈
int Pop(SqStack * s,ElemType * e)
... {
if(StackEmpty(*s))
return ERROR;
*e=s->base[s->top];
s->top-=1;
return OK;
}
// 栈顶元素
int GetTop(SqStack s,ElemType * e)
... {
if(s.top==-1)
return ERROR;
else
...{
*e=s.base[s.top];
return OK;
}
}
int main( int argc, char * argv[])
... {
int i;
ElemType elem;
SqStack s;
InitStack(&s);
for(i=0;i<5;i++)
...{
printf("input a number:");
scanf("%d",&elem);
Push(&s,elem);
printf(" ");
}
for(i=0;i<5;i++)
...{
if(Pop(&s,&elem)==OK)
...{
printf("%d ,",elem);
}
else
...{
printf("empty!");
break;
}
}
}