分类: IT职场
2011-06-09 15:14:18
1、数据结构
#define INIT_SIZE 10
#define INCRE_SIZE 5
struct stack
{
int *base;
int *top;
int stacksize;
};
2、构造栈
int CreateStack(struct stack &S)
{
S.base = (int *)malloc(INIT_SIZE * sizeof(int));
if (S.base == NULL)
{
return 0;
}
S.top = S.base;
S.stacksize = INIT_SIZE;
return 1;
}
3、插入元素
int Push(struct stack &S, int value)
{
if (S.top - S.base >= S.stacksize)
{
S.base = (int *)realloc(S.base, (S.stacksize + INCRE_SIZE) * sizeof(int));
if (S.base == NULL)
{
return 0;
}
S.top = S.base + S.stacksize;
S.stacksize += INCRE_SIZE;
}
*S.top++ = value;
return 1;
}
4、判断是否为空栈
bool EmptyStack(struct stack S)
{
if (S.base == S.top)
{
return true;
}
else
{
return false;
}
}
5、如果栈不空,则返回栈顶元素
int GetTop(struct stack S, int &value)
{
if (EmptyStack(S))
{
return 0;
}
else
{
value = *(S.top - 1);
return 1;
}
}
6、删除栈顶
int Pop(struct stack &S, int &value)
{
if (EmptyStack(S))
{
return 0;
}
else
{
value = *(--S.top);
return 1;
}
}
7、销毁栈
void DestroyStack(struct stack S)
{
free(S.base);
S.base = NULL;
S.top = NULL;
S.stacksize = 0;
}
8、清空栈
void ClearStack(struct stack &S)
{
S.top = S.base;
}
9、栈中元素个数
int LengthStack(struct stack S)
{
if (S.base == S.top)
{
return 0;
}
else
{
return (S.top - S.base);
}
}
10、到栈顶遍历元素 (由于参数S是以值的方式传送,因此函数中的S.base++并不会影响栈中的数组地址)
void TraverStack(struct stack S)
{
while (S.top > S.base)
{
printf("%d ", *S.base++);
}
printf("\n");
}