如题,我的两个代码文件里需要共用某个个栈来存放一些东西,有什么办法吗

解决方案 »

  1.   

    #include<iostream.h>
    #define STACK_INIT_SIZE 10//存储的初始分配struct Dblstack{
     int *base1;
     int *base2;
     int *top1;
     int *top2;
     int stacksize;//当前分配的存储空间,以元素为单位
    };
    int Initstack(Dblstack &s)
    {//构造一个空的顺序栈s
     s.base1=new int[STACK_INIT_SIZE];
     if(!s.base1){cout<<"申请内存失败!/n";return 0;}
     s.top1=s.base1+1;
     s.stacksize=STACK_INIT_SIZE;
     s.base2=s.base1+s.stacksize;
     s.top2=s.base2-1;
     return 1;
    }int emptystack(Dblstack &s,int i)
    {//判断栈是否为空,是返回1,否则返回0
     if(i==1&&s.top1==s.base1+1||i==2&&s.top2==s.base2-1)
      return 1;
     else return 0;
    }int fullstack(Dblstack &s)
    {//判断栈是否已经满,若栈满则返回1否则返回0
     if(s.top1==s.top2) return 1;
     else return 0;
    }int push(Dblstack &s,int i,int x)
    {//插入元素x作为新的栈顶元素
     if(fullstack(s)){ cout<<"栈满/n"; return 0;}
     else{
        if(i==1) {cout<<"插入操作成功!/n/n"; *s.top1++=x; }
     if(i==2) {cout<<"插入操作成功!/n/n"; *s.top2--=x; }
     }return 1;
    }int pop(Dblstack &s,int i,int &x)
    {//若栈不为空则删除i栈中的栈顶元素用x返回,否则返回0
     if(emptystack(s,i)) return 0;
     else{
     if(i==1) {cout<<"出栈成功!出栈元素为:"; x=*--s.top1; }
     if(i==2) {cout<<"出栈成功!出栈元素为:"; x=*++s.top2; }
     }return 1;
    }int gettop(Dblstack &s,int i,int &x)
    {//若栈不为空,则用x返回栈顶元素,并返回真,否则返回0
     if(emptystack(s,i)) return 0;
     else{
     if(i==1) { x=*(s.top1-1); cout<<"/n出栈成功!栈顶为:"; } 
     if(i==2) { x=*(s.top2+1); cout<<"/n出栈成功!栈顶为:"; }
     }return 1;
    }int clearstack( Dblstack &s)
    {//若栈为空返回1,否则将栈置为空后返回1
     if(emptystack(s,1)&&emptystack(s,2)) return 1;
     else {s.top1=s.base1+1; s.top2=s.base2-1;}
     return 1;
    }
    int stacktraverse(Dblstack  s)
     { // 从栈底到栈顶依次输出栈中每个元素
       // 一旦visit()失败,则操作失败
       while(s.top1-1>s.base1)
       {  s.base1++;
         cout<<*s.base1<<'/t';
       }
       while(s.top2+1<s.base2)
       {   s.base2--;
        cout<<*s.base2<<'/t';
       }
       cout<<endl;
       return 1;
     }
    void welcome()              //界面的欢迎函数
    {
     cout<<"/t欢迎使用本程序"<<endl;
     cout<<"/t本程序为顺序栈的公用问题"<<endl;
     cout<<"/t1进入程序/t0退出程序"<<endl;
     cout<<"/t请选择你的操作!"<<endl;
    }void menue()//菜单界面函数
    {       cout<<"/t请你选择所需要的操作/n";
         cout<<"/t1-元素入栈/t2-元素出栈/n";
      cout<<"/t3-取栈顶元素/t4-测栈空/n";
      cout<<"/t5-清空栈/t6-遍历/n";
      cout<<"/t/t7-退出/n";
      
    }void main()
    {    
     int choice,e,x,i;
     Dblstack s;
     Initstack(s);
     welcome();
     cin>>e;
        if(e==1)
     {
          do{menue();
       cin>>choice;
      switch(choice)
       {
       case 1://入栈
        cout<<"请输入插入元素的值!";
        cin>>x;
        cout<<"/n选择插入哪个栈顶!(1||2):";
        cin>>i;
        cout<<endl;
        push(s,i,x); 
        break;
            case 2://出栈
              cout<<"请选择出栈元素所在的栈:";
        cin>>i;
        cout<<endl;
        if(emptystack(s,i)){cout<<"此栈空!/n";break;}
        else{
        pop( s,i,x);
        cout<<x<<endl;
        cout<<endl;
        break;
        }
           case 3://获取栈顶元素
           cout<<"请选择取栈顶元素所在的栈:/n";
        cin>>i;
        gettop( s, i, x);
                    cout<<x<<endl;
           break;
          
          case 4://测栈空
            if(emptystack(s,1)&&emptystack(s,2))
          cout<<"栈空"<<endl;
            else
             cout<<"栈不空"<<endl;
            break;
       case 5://清空栈
                  clearstack( s);
         break;
       case 6:
        stacktraverse(s);
                  break;
         case 7:
        cout<<"程序结束"<<endl;
          break;
         default:
           cout<<"不合适的操作/n";
      break;
      }
     }while(choice!=7);
         }cout<<"感谢使用此程序:"<<endl;
    }
      

  2.   

    static?
    全局变量?
    stack<T>?
      

  3.   

    static 是不能实例的.....
    全部变量,不大好用...;;LZ我还是没大理解你的意思............
    把类型申明为public 在写个public 函数中实例化这个类型..然后调用这个public 函数就得了..不过其实就是"全部变量";个人感觉不是很好;
    用ref out等也可以....
      

  4.   

    用public是可以在另外一个代码文件里调用,但是得生成一个新的实例才能调用原来的public内容我要的结果是在一个代码文件里对另一个代码文件里已有的栈进行入栈操作楼上说的是对的,用static能做到
      

  5.   

    上述的问题差不多解决了,现在多了另外一个问题,关于this关键字的。。我现在是在做silverlight的一个控件,在实际执行的时候,控件会根据用户需求作一些修改。问题来了,我把控件自身用this关键字传给某个栈的时候,传递的控件是用户修改过的还是没修改过的。我这边代码运行之后好像是没修改过的