既然你的 top是全局变量了,就不需要再在函数参数中传递了。还有c默认是值传递,如果调用的函数需要修改参数并传回,请用引用或者地址来进行参数传递。
专注于为中小企业提供做网站、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业罗源免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
因为在调用其他函数是都是临时开辟的内从空间,但传的是指针,所以编译时没错,但在连接时地址不一致导致了问题,只有主函数中真实的创建了头指针,才不会导致错误。
是。但这只是算法描述,将需要的所有定义都省略了,只留下核心代码,也不能算错。
1、这个链栈应该就是一个用链表弄的后进先出的栈结构。top指针永远指向栈的最上面的那个节点。这个函数是新加一个节点到这个栈中,首先分配了空间给s,s是要新加入这个栈的那个节点。
2、还有,print函数应该是不想修改链栈的吧,只是读取。所以参数就不要用a的地址了,直接用a传递就行了,保证函数体内不会意外修改a。函数参数要做相应的修改。像这样:都不用额外借助一个S了。
3、栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
4、程序基本上是不错。你的思路也是对的。只是算法上有点不清楚!应该是先把字符,入队和入栈;然后再把出栈的字符 与 出队的字符进行比较,如果完全一致,就说明是匹配的。只需要把函数compare 调整一下即可。
5、后面因为arr空间的内容已经被修改,所以,之后的printf语句都得不到结果。顺便再解释一下printf(%s\n,p);得到的为什么是乱码。正如上面所说,先计算参数p的值保存栈顶。保存的值为arr的地址。
6、出栈,成功返回1,失败返回0,出栈不取出元素值,只是删除栈顶元素。如出栈要实现,取出元素值,并释放空间,可结合取栈顶元素函数做修改,这里不再给出。
这个链栈应该就是一个用链表弄的后进先出的栈结构。top指针永远指向栈的最上面的那个节点。这个函数是新加一个节点到这个栈中,首先分配了空间给s,s是要新加入这个栈的那个节点。
/*linkstack *initstack(linkstack *top) //初始化栈将栈的数据设空// { top-next=null;return top;} 这个函数没必要。return (top-next==null);也是错的。
S=S-next; //S要修改 } 还有,print函数应该是不想修改链栈的吧,只是读取。所以参数就不要用a的地址了,直接用a传递就行了,保证函数体内不会意外修改a。函数参数要做相应的修改。像这样:都不用额外借助一个S了。
1、/*linkstack *initstack(linkstack *top) //初始化栈将栈的数据设空// { top-next=null;return top;} 这个函数没必要。return (top-next==null);也是错的。
2、实现链栈各种基本运算的算法 编写程序实现链栈种基本运算,并在此基础上设计一个主程序完成如下功能: 初始化栈 判断栈是否为空 依次进栈a,b,c,d,e元素。
3、还有,print函数应该是不想修改链栈的吧,只是读取。所以参数就不要用a的地址了,直接用a传递就行了,保证函数体内不会意外修改a。函数参数要做相应的修改。像这样:都不用额外借助一个S了。
4、当然也可以不用初始化函数,像3楼的因为在调用其他函数是都是临时开辟的内从空间,但传的是指针,所以编译时没错,但在连接时地址不一致导致了问题,只有主函数中真实的创建了头指针,才不会导致错误。
5、堆栈至少应该有个初始的init函数。具体的改动我就不帮你做了。提出几点改进的意见:增加一个initstack的函数,里面的内容具体就是有个头NODE,不然的话你push是到哪个节点下呢?你这里用一个Is全局指针,个人认为很不合理。
6、这个链栈应该就是一个用链表弄的后进先出的栈结构。top指针永远指向栈的最上面的那个节点。这个函数是新加一个节点到这个栈中,首先分配了空间给s,s是要新加入这个栈的那个节点。