struct Node{ long n;int tag; }; long Fb(long n) { LinkedStack <Node> S;Node *w;long sum=0; do { while(n>1){w->n =n;w->tag =1;S.Push (*w);n--;} sum=sum+n; while(S.IsEmpty ()==false) { S.Pop (*w); if(w->tag ==1) { w->tag =2; S.Push (*w); n=w->n-2; break; } } }while(S.IsEmpty ()==false); return sum; }
void LinkedStack<T>::Push(const T &x) { top = new StackNode<T>(x, top); assert(top); } template <typename T> bool LinkedStack<T>::Pop(T &x) { if (IsEmpty()){ return false; } StackNode<T> *p = top; top = top->link; x = p->data; delete p; return true; }
解决方案:40分
代码太少了,很多东西不会到你是怎么处理的,从下面pop和push看,感觉你的T代表的是结构体的类型,即:struct Node。假如是的话,那么pop和push处理的还是相当通用的。Fb函数有问题,Node *w;这里,Node是哪里来的?w也没有赋值就使用了,w指向哪里根本就无法预料。根据这点代码看,你最大的问题是没有给w动态申请空间,或指向同类型的变量。
假如你能保证你以前的代码是通用的,没问题的,那么查问题的时候直接查找你新编写的不就行了
假如你能保证你以前的代码是通用的,没问题的,那么查问题的时候直接查找你新编写的不就行了