栈是一种只能在一端进行操作的线性数据结构,数据的修改按后进先出(LIFO)原则进行。
以下是代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OK 0
#define ERROR -1
#define OVERFLOW 1
#define STACK_INIT_SIZE 50
#define STACK_INCREMENT 10
typedef struct stack{
int *base; //栈底指针
int *top; //栈顶指针
int stack_size; //栈的存储空间大小
}sq_stack;
int init_stack(sq_stack *s)
{
s->base = (int*)malloc(sizeof(int));
if(!s->base)
exit(OVERFLOW);
s->top = s->base;
s->stack_size = STACK_INIT_SIZE;
return OK;
}
int push(sq_stack *s, int elem)
{
//首先判断栈是否满
if ( (s->top - s->base) >= s->stack_size )
{
s->base = (int*)realloc(s->base, (STACK_INCREMENT + s->stack_size) *sizeof(int) );
if(!s->base)
exit(OVERFLOW);
s->top = (s->base + s->stack_size);
s->stack_size += STACK_INCREMENT;
}
*s->top = elem;
s->top++;
return OK;
}
int pop(sq_stack *s, int *elem)
{
if (s->base == s->top)
return ERROR;
*elem = *(--s->top);
return OK;
}
int get_top(sq_stack s, int *elem)
{
if (s.base == s.top)
return ERROR;
*elem = *(s.top-1);
return OK;
}
int get_length(sq_stack s)
{
return (s.top -s.base);
}
int main()
{
sq_stack s;
int i, elem;
init_stack(&s);
//进栈
for(i = 1; i < 10; i++)
{
push(&s, i);
printf("%3d", i);
}
printf("\n");
//出栈
for(i = 1; i < 10; i++)
{
pop(&s, &elem);
printf("%3d", elem);
}
printf("\n");
return OK;
}本文出自 “兵疯千里” 博客,请务必保留此出处http://slientradio.blog.51cto.com/7241495/1390771
原文:http://slientradio.blog.51cto.com/7241495/1390771