栈的内容也比较基础,而且有很多博客讲解得很明白,因此此处不再赘述。
代码已经经过检测
#include<stdio.h>
#include<stdlib.h>
#define STACKSIZE 100
//定义元素类型
typedef int elemType;
//定义栈结构
typedef struct stack
{
elemType *base;
elemType *top;
int size;
}stack;
//创建一个栈
stack* createStack()
{
stack *s = (stack*)malloc(sizeof(stack));
s->base = (elemType*)malloc(sizeof(elemType)*STACKSIZE);
s->top = s->base;
s->size = STACKSIZE;
return s;
}
//销毁一个栈
void destroyStack(stack* &s)
{
if(!s) return ;
else
{
if(!s->base)
{
free(s->base);
s->base = NULL;
s->top = NULL;
s->size = 0;
}
free(s);
s = NULL;
}
}
//获取栈顶元素
int getTop(stack s, elemType &e)
{
if(!s.base || s.base == s.top || s.size <=0)
return -1;
e = *(s.top -1);
return 1;
}
//压入栈顶
int push(stack &s, elemType e)
{
if(!s.base || s.size == 0) return -1;
if(s.top - s.base >= s.size)
{
s.base = (elemType*)realloc(s.base,(s.size + STACKSIZE)*sizeof(elemType));
if(!s.base) return -1;
s.top = s.base + s.size;
s.size += STACKSIZE;
}
*s.top++ = e;
return 1;
}
//弹出
int pop(stack &s, elemType &e)
{
if(!s.base || s.size == 0 || s.base == s.top) return -1;
e = *--s.top;
return 1;
}
//打印栈内容
void showStack(stack *s)
{
if(!s || !s->base || s->size == 0 )
{
printf("error: no stack\n");
return ;
}
elemType *temp = s->base;
while(temp != s->top)
{
printf("%d ",*temp);
temp++;
}
printf("\n");
}
//测试代码
int main()
{
stack *s = createStack();
push(*s, 4);
push(*s, 94);
push(*s, 843);
push(*s, 12);
showStack(s);
elemType e = 3;
getTop(*s, e);
printf("e = %d\n",e);
pop(*s,e);
pop(*s,e);
printf("e = %d\n",e);
showStack(s);
destroyStack(s);
showStack(s);
getchar();
return 0;
}