新人报道!c语言简单的背包问题,大家帮忙看看哪里出错了

#include<stdio.h>
typedef struct{
    int *a;
    int top;
    int stacksize;
    int incrementsize;
}Stack;

void initStack(Stack &s,int maxsize,int incrementsize);
void Push(Stack &s,int data);
void StackTraverse(Stack &s);
bool Pop(Stack &s,int &e);
bool StackEmpty(Stack &s);
void beibao(int w[],int T,int n);


void main(){
/*  Stack s;
    initStack(s,5,3);

    Push(s,0);
    Push(s,1);
    Push(s,2);
    Push(s,3);
    Push(s,4);

    StackTraverse(s);
    int e=0;
    Pop(s,e);
    StackTraverse(s);
    printf("删除的元素为:%d\n",e);
*/
    int w[]={1,4,3,5,2};
    beibao(w,5,5);

}
//初始化栈
void initStack(Stack &s,int maxsize,int incrementsize){
    s.top=-1;
    s.a=new int[maxsize];
    s.stacksize=maxsize;
    s.incrementsize=incrementsize;
}
//压栈
void Push(Stack &s,int data){
    if(s.top==s.stacksize-1){
        printf("栈已满!");
    }

    s.a[++s.top]=data;


}
//遍历栈
void StackTraverse(Stack &s){

    for(int i=s.top;i>=0;i--){
        printf("%d ",s.a[i]);
    }
    printf("\n");
}
//弹栈
bool Pop(Stack &s,int &e){
    if(s.top==-1){
    return false;
    }else{
        e=s.a[s.top--];
        return true;
    }

}
//判断栈是否为空
bool StackEmpty(Stack &s){
    if(s.top==-1){
    return true;
    }else{
        return false;
    }
}

void beibao(int w[],int T,int n){
    Stack s;
    initStack(s,10,3);
    int k=0;
    do{
        while(T>0 && k<n){
            if(T-w[k]>=0){
                Push(s,k);
                T-=w[k];
            }
            k++;

        }

        if(T==0){ 
        StackTraverse(s);
        }

        Pop(s,k);
        T+=w[k];
        k++;


    }while(!StackEmpty(s) || k<n);

}
阅读 4.3k
1 个回答

phpwind头像附件

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进