C语言写Pop函数取栈的出错

Python015

C语言写Pop函数取栈的出错,第1张

Pop函数改成这样:

int Pop (Stack * pstack, int * pname)

{

if(pstack->top<=0)

{

return 0

}

pstack->top--

* pname = pstack->data[pstack->top]

return 1

}

Push函数改成这样:

int Push (Stack * pstack, int num)

{

if(pstack->top>=Stack_size)

{

printf("Push Error!")

return 0

}

pstack->data[pstack->top]=num

pstack->top++

return 0

}

试试(原来那样当元素达到最大数目时pstack->top就越界了)。

关于 pop 函数,我不太确定题主说的是哪个函数,因为 C 语言的标准函数库是没有 pop 这个函数的。如果题主说的是 C++ 的 Stack 类中的 pop 函数的话,它并不是一个缩写,因为从栈中取值的操作就叫做 pop。

然后就是查询单词原型的网站,因为 C 语言好多函数库中的函数名都是按照很奇怪的方法缩写的,所以基本上没有一个专门查全称的网站。不过题主可以参考

http://www.cplusplus.com/reference/clibrary/

这个网站里面虽然没有指出具体的缩写方式,但是能很好地解释 C 语言标准函数库的所有函数的作用。通过它的介绍你应该会对函数的全称有一个大概的理解。比如说这个针对 stdio.h 头文件中所定义函数的解释:

不光是 C 语言,C++ 的标准类库的信息也可以在这个网站中找到。

这个算是数据结构的内容讲解的是一个叫做栈类型的数据结构,这个数据结构的特点就是后进先出--最后放进去的数据最先拿出来。pop函数就是拿出数据的操作,push是放入是数据的操作。

内容拓展:

pop函数呵push函数的使用:

#include <stdio.h>

#include <unistd.h>

#include <pthread.h>

void *clean(void *arg)

{

printf("cleanup: %s \n",(char *)arg)

return (void *)0

}

void * thr_fn1(void * arg)

{

printf("chread 1 start \n")

pthread_cleanup_push((void *)clean,"thraed 1 first handler")

pthread_cleanup_push((void *)clean,"thread 1 second handler")

printf("thread 1 push complete \n")

if(arg)

{

return ((void *)1)

}

pthread_cleanup_pop(0)

pthread_cleanup_pop(0)

return (void *)1

}

//输出结果: chread 1 start ->thread 1 push complte 

//push和pop框起来的代码,不管正常退出还是异常退出,都将执行清除函数,但是存在特例:不包括return 退出。