c语言链条栈怎么判断满了没

Python016

c语言链条栈怎么判断满了没,第1张

因为堆栈是链式栈,是否满栈取决于堆存储的大小。堆空间耗尽时,可以狭义地理解为栈满。

那么在编程时,可以用一个变量保存栈元素的个数。栈是否满,取决于申请动态内存时的返回值,如

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

}

答案是会的:

系统分配给每个程序的栈空间是有限的,超过了就会堆满。

最有代表性的就是递归函数,如果递归的深度达到一定量,程序栈就会满,程序就会异常退出,之前使用快速排序用到递归,当数据量比较大,数据基本有序时递归深度就比较大,程序就停止了,调试错误显示栈资源不足。