栈的顺序表实现及相关操作
栈的定义
typedef int data_t;
typedef struct
{
data_t * data;
int maxlen; //表示栈的最大容量
int top; //指向栈顶指针
}seqstack_t;
栈的操作定义
创建空栈 :CreateStack (len)
清空栈 :ClearStack (S)
判断是否栈空:EmptyStack (S)
判断是否栈满:FullStack (S)
元素进栈 :PushStack (S, x)
元素出栈 :PopStack (S)
取栈顶元素 :GetTop (S)
销毁栈:DestroyStack(S)
栈操作的实现
/*
*创建空栈
* */
seqstack_t * CreateStack(int len)
{
seqstack_t * s = (seqstack_t *)malloc(sizeof(seqstack_t));
if (NULL == s)
{
printf("create stack pointer s error!\n");
return NULL;
}
s->data = (data_t *)malloc(sizeof(data_t) * len);
if (NULL == s->data)
{
printf("create stack data[] error!\n");
return NULL;
}
s->maxlen = len;
s->top = -1;
return s;
}
/*
*清空栈,成功返回0,失败返回-1
* */
int ClearStack(seqstack_t *s)
{
if (NULL == s || NULL == s->data)
{
printf("stack is not exsit or stack is empty!\n");
return -1;
}
s->top = -1;
return 0;
}
/*
*判断是否栈空,栈空返回1, 非空返回0
* */
int EmptyStack(seqstack_t *s)
{
if (NULL == s)
{
printf("stack is not exsit\n");
return 1;
}
return((s->top == -1) ? 1:0);
}
/*
*判断是否栈满,栈满返回1, 非满返回0
* */
int FullStack(seqstack_t *s)
{
if (NULL == s)
{
printf("stack is not exsit!\n");
return 0;
}
return ((s->top + 1) == s->maxlen ? 1:0);
}
/*
*元素进栈
*
* */
void PushStack(seqstack_t *s, data_t x)
{
if (NULL == s || NULL == s->data)
{
printf("stack is not exsit!\n");
return;
}
if (FullStack(s))
{
printf("stack is already full!\n");
return;
}
s->top++;
s->data[s->top] = x;
}
/*
*元素出栈,栈空或者不存在返回-1
*
* */
data_t PopStack(seqstack_t * s)
{
if (NULL == s)
{
printf("stack is not exsit!\n");
return -1;
}
if (EmptyStack(s))
{
printf("stack is empty!\n");
return -1;
}
s->top--;
return s->data[s->top + 1];
}
/*
*取栈顶元素,如果栈空或者栈不存在返回-1
* */
data_t GetTop(seqstack_t *s)
{
if (NULL == s || EmptyStack(s))
{
printf("stack is not exsit or stack is empty!\n");
return -1;
}
return s->data[s->top];
}
/*
*销毁栈
* */
void DestroyStack(seqstack_t *s)
{
if(NULL == s)
{
return;
}
free(s->data);
s->data = NULL;
free(s);
s = NULL;
}
测试代码
int main(int argc, char *argv[])
{
seqstack_t * s = CreateStack(LEN);
PushStack(s, 1);
PushStack(s, 2);
PushStack(s, 3);
printf("top of stack:%d\n", GetTop(s));
printf("if stack is empty ? %d\n", EmptyStack(s));
printf("if stack is full ? %d\n", FullStack(s));
printf("pop stack : %d\n", PopStack(s));
printf("pop stack : %d\n", PopStack(s));
printf("pop stack : %d\n", PopStack(s));
printf("if stack is empty ? %d\n", EmptyStack(s));
DestroyStack(s);
//printf("s = %d, s->data = %d\n", s, s->data);
return 0;
}