一、栈的定义:后进先出的线性表,要求只在表尾进行删除和插入操作。
二、栈操作c代码实现:
realloc扩容函数说明:
/*定义栈的类型*/
typedef struct
{
ElemType *base;//指向栈底的指针
ElemType *top;//指向栈顶的指针
int stackSize;//栈当前可使用的最大容量
}sqStack;
/*初始化栈*/
#define STACK_INIT_SIZE 100
void init_stack(sqStack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if(!s->base)
{
exit(0);
}
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
/*入栈操作*/
#define STACKINCREMENT 10
void Push(sqStack *s,ElemType e)
{
/*判断栈是否满*/
if(s->top - s->base >= s->stackSize)
{
s->base = (ElemType *)realloc(s->base,(s->stackSize + STACKINCREMENT)*sizeof(ElemType));
if(!s->base)
{
exit(0);
}
s->top = s->base + s->stackSize;
s->stackSize = s->stackSize + STACKINCREMENT;
}
/*压入数据*/
*(s->top) = e;
s->top++;
}
/*出栈操作*/
void Pop(sqStack *s,ElemType *e)
{
/*判断栈是否为空*/
if(s->top == s->base)
{
return;
}
*e = *--(s->top);
}
/*清空一个栈*/
void clear_stack(sqStack *s)
{
s->base = s->top;
}
/*销毁栈*/
void destroy_stack(sqStack *s)
{
int i, len;
len = s->stackSize;
for(i = 0;i<len;i++)
{
free(s->base);
s->base++;
}
s->base = s->top = NULL;
s->stackSize = 0;
}
/*计算栈的当前容量*/
ElemType stack_len(sqStack s)
{
return(s.top - s.base);
}