那么在编程时,可以用一个变量保存栈元素的个数。栈是否满,取决于申请动态内存时的返回值,如
Stack
*p
=
(Stack
*)malloc(sizeof(Stack));,若(p
==
NULL),则栈满。
#define STACK_SIZE 100#define PUSH_POP_SUCCESS 1
#define PUSH_POP_ERROR 0
struct _stackbuf {
int _collection[STACK_SIZE]
int _top
}
typedef struct _stackbuf S_STACK
typedef unsigned int u_int_f
// 入栈
u_int_f push(S_STACK *stack, int d){
if (stack->_top >= STACK_SIZE) return PUSH_POP_ERROR
stack->_collection[stack->_top++] = d
return PUSH_POP_SUCCESS
}
// 出栈
u_int_f pop(S_STACK *stack, int *e){
if (!stack->_top) return PUSH_POP_ERROR
*e=stack->_collection[--(stack->_top)]
return PUSH_POP_SUCCESS
}
int main(){
S_STACK stack = { {0},0 }
push(&stack, 1)
push(&stack, 2)
push(&stack, 3)
int gv = 0
pop(&stack, &gv)
printf("%d\n", gv)
system("PAUSE")
return 0
}
答案是会的:最有代表性的就是递归函数,如果递归的深度达到一定量,程序栈就会满,程序就会异常退出,之前使用快速排序用到递归,当数据量比较大,数据基本有序时递归深度就比较大,程序就停止了,调试错误显示栈资源不足。