📄 sqstack.c
字号:
/*
* 作者:antigloss
* 最后修改:05-8-27 19:50
* 蚂蚁的 C/C++ 标准编程
* cpp.ga-la.com
*/
#include <stdio.h>
#include <stdlib.h>
#include "../header/sqstack.h"
/* begin of ClearStack 05-8-27 19:35 */
void ClearStack( SqStack *S ) /*将 S 置为空栈。*/
{
S->top = S->base;
} /* end of ClearStack */
/* begin of DestroyStack 05-8-27 19:45 */
void DestroyStack( SqStack *S ) /* 销毁栈S,S 不再存在。*/
{
free( S->base );
S->base = S->top = NULL;
S->stacksize = 0;
} /* end of DestroyStack */
/* begin of GetTop 05-8-27 18:40 */
int GetTop(SqStack *S, int *e) /* 返回栈顶元素 */
{
if ( S->base == S->top ) { /* 栈空,返回0 */
return 0;
}
*e = *(S->top - 1);
return 1; /* 栈不空,返回1 */
} /* end of GetTop */
/* begin of InitStack 05-8-27 17:35 */
int InitStack(SqStack *S) /* 创建一个空栈 */
{
S->base = malloc( INIT_SIZE * sizeof *S->base );
if ( !S->base ) { /* 空间分配失败 */
return 0;
}
/* 空间分配成功 */
S->top = S->base; /* 置栈顶指针 */
S->stacksize = INIT_SIZE; /* 初始化栈大小 */
return 1; /* 空栈创建成功 */
} /* end of InitStack */
/* begin of Pop 05-8-27 19:20 */
int Pop(SqStack *S, int *e) /* 删除栈顶元素 */
{
if ( S->base == S->top ) { /* 栈空,返回0 */
return 0;
}
*e = *(--S->top); /* 栈不空,栈顶指针下移(即删除栈顶元素)*/
return 1; /* 栈不空,返回1 */
} /* end of Pop */
/* begin of Push 05-8-27 18:35 */
int Push(SqStack *S, int e) /* 插入栈顶 */
{
if ( (unsigned)(S->top - S->base) == S->stacksize ) { /* 栈满,追加存储空间 */
int *newbase = realloc( S->base, (S->stacksize + INCREMENT) * sizeof *newbase );
if ( !newbase ) { /* 分配失败,返回0 */
return 0;
}
/* 分配成功 */
S->base = newbase;
S->top = S->base + S->stacksize; /* 置栈顶指针 */
S->stacksize += INCREMENT; /* 重置栈大小 */
}
*S->top = e;
++S->top; /* 接收输入后,S->top指向栈顶元素的下一个位置 */
return 1;
} /* end of InitStack */
/* begin of StackEmpty 05-8-27 19:40 */
int StackEmpty( SqStack *S ) /* 若栈 S 为空栈,则返回 1,否则返回 0。*/
{
return !(S->top - S->base);
} /* end of StackEmpty */
/* begin of StackLength 05-8-27 19:30 */
unsigned StackLength( SqStack *S ) /* 返回 S 的元素个数,即栈的长度。*/
{
return (unsigned)(S->top - S->base);
} /* end of StackLength */
/* begin of StackTraverse 05-8-27 19:00 */
void StackTraverse( SqStack *S ) /* 显示堆栈内容 */
{
int *base = S->base;
while ( base != S->top ) {
putchar( *base++ );
}
} /* end of StackTraverse */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -