#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100//初始分配储存空间大小
#define STACKINCREMENT 10//存储空间分配增量
typedef struct Stack
{
int *base;
int *top;
int stacksize;//当前已经分配的储存空间
}SqStack;
int InitStack(SqStack *S);
int DestoryStack(SqStack *S);
int ClearStack(SqStack *S);
int StackEmpty(SqStack *S);
int StackLength(SqStack *S);
int GetTop(SqStack *S);
int Push(SqStack *S,int number);
int Pop(SqStack *S,int *e);
void StackTraverse(SqStack *S,void(*visit)(int));
void print(int e);
int main()
{
SqStack S;
InitStack(&S);
int j,e;
for(j=1; j<=5; j++)
{
Push(&S,j);
}
Pop(&S,&e);
printf("\n弹出的栈顶元素为:e=%d\n",e);
printf("新栈顶元素为e=%d,栈的长度为%d\n",GetTop(&S),StackLength(&S));
printf("栈中元素为:\n");
StackTraverse(&S,print);
ClearStack(&S);
DestoryStack(&S);//销毁栈
printf("\n栈是否为空:%d\n",StackEmpty(&S));
return 0;
}
int InitStack(SqStack *S)
{
S->base = (int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S->base)
{
return 0;
}
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return 1;
}
int DestoryStack(SqStack *S)
{
free(S->base);
S->base= NULL;
S->top = NULL;
S->stacksize =0;
return 0;
}
int ClearStack(SqStack *S)
{
S->top = S->base;
return 0;
}
int StackEmpty(SqStack *S)
{
if(S->top==S->base)
return 1;
else
return 0;
}
int StackLength(SqStack *S)
{
return S->top-S->base;
}
int GetTop(SqStack *S)
{
if(S->top==S->base)
{
return 0;
}
return *(S->top-1);
}
int Push(SqStack *S,int number)
{
if(S->top-S->base>=S->stacksize)
{
S->base = (int*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int));
if(!S->base)
{
return 0;
}
S->top = S->stacksize+S->base;
S->stacksize += STACKINCREMENT;
}
*S->top++=number;
return 1;
}
int Pop(SqStack *S,int *e)
{
if(S->top==S->base)
{
return 0;
}
S->top-=1;
*e = *(S->top);
return 0;
}
void StackTraverse(SqStack *S,void(*visit)(int))
{
while(S->top>S->base)
visit(*S->base++);
}
void print(int e)
{
printf("%2d",e);
#include <stdlib.h>
#define STACK_INIT_SIZE 100//初始分配储存空间大小
#define STACKINCREMENT 10//存储空间分配增量
typedef struct Stack
{
int *base;
int *top;
int stacksize;//当前已经分配的储存空间
}SqStack;
int InitStack(SqStack *S);
int DestoryStack(SqStack *S);
int ClearStack(SqStack *S);
int StackEmpty(SqStack *S);
int StackLength(SqStack *S);
int GetTop(SqStack *S);
int Push(SqStack *S,int number);
int Pop(SqStack *S,int *e);
void StackTraverse(SqStack *S,void(*visit)(int));
void print(int e);
int main()
{
SqStack S;
InitStack(&S);
int j,e;
for(j=1; j<=5; j++)
{
Push(&S,j);
}
Pop(&S,&e);
printf("\n弹出的栈顶元素为:e=%d\n",e);
printf("新栈顶元素为e=%d,栈的长度为%d\n",GetTop(&S),StackLength(&S));
printf("栈中元素为:\n");
StackTraverse(&S,print);
ClearStack(&S);
DestoryStack(&S);//销毁栈
printf("\n栈是否为空:%d\n",StackEmpty(&S));
return 0;
}
int InitStack(SqStack *S)
{
S->base = (int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S->base)
{
return 0;
}
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return 1;
}
int DestoryStack(SqStack *S)
{
free(S->base);
S->base= NULL;
S->top = NULL;
S->stacksize =0;
return 0;
}
int ClearStack(SqStack *S)
{
S->top = S->base;
return 0;
}
int StackEmpty(SqStack *S)
{
if(S->top==S->base)
return 1;
else
return 0;
}
int StackLength(SqStack *S)
{
return S->top-S->base;
}
int GetTop(SqStack *S)
{
if(S->top==S->base)
{
return 0;
}
return *(S->top-1);
}
int Push(SqStack *S,int number)
{
if(S->top-S->base>=S->stacksize)
{
S->base = (int*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int));
if(!S->base)
{
return 0;
}
S->top = S->stacksize+S->base;
S->stacksize += STACKINCREMENT;
}
*S->top++=number;
return 1;
}
int Pop(SqStack *S,int *e)
{
if(S->top==S->base)
{
return 0;
}
S->top-=1;
*e = *(S->top);
return 0;
}
void StackTraverse(SqStack *S,void(*visit)(int))
{
while(S->top>S->base)
visit(*S->base++);
}
void print(int e)
{
printf("%2d",e);
}
栈空:base 等于top
栈满:top-base=栈的大小
top指向栈顶元素的下一位置。
Java栈的操作:
http://blog.csdn.net/jiutianhe/article/details/18605999