Asp.net 学习资料

伦惠峰

双栈操作

struct Bothstack{
     ElemType stack[stackMaxSize];
     int top1,top2;
   };
  双栈操作的抽象数据类型可定义为:
    DAT BSTACK is
    Data:采用顺序结构存储的双栈,其存储类型为Bothstack
    operations:
    void InitStack(Bothstack& BS,int k);
    //初始化栈。当k=1或2时对应置栈1或栈2为空,k=3时置两个格均为空
    void Clearstack(BothStack& BS,int k)
    //清除栈。当k=1或2时对应栈1或栈2被清除,k=3时两个栈均被清除
    int StackEmpty(BothStack& BS,int k)
    //判断栈是否为空。当k=1或2时判断对应的栈1或栈是否为空,k=3时
    //判断两个栈是否同时为空。若判断结果为空则返回1,否则返回0
    ElemType Peek(BothStack& BS,int k)
    //取栈顶元素。当k=1或2时对应返回栈1或栈2的栈顶元素
    void Push(BothStack& Bs,int k,const ElemType& item)
    //进栈。当k=1或2时对应向栈1或栈2的顶端压入元素item
    End BSTACK
void InitStack(BothStack& BS,int k)
     {
      if(k==1)
       BS.top1=-1;
      else if(k==2)
       BS.top2=StackMaxSize;
      else if(k==3){
       BS.top1=-1;
       BS.top2=StackMaxSize;
       }
     }
   
     void ClearStack(BothStack& BS,int k)
     {  //函数体同上
     }
     int StackEmpty(BothStack& BS,int k){
      if(k==1)
       return BS.top1==-1;
       else if(k==2)
       return BS.top2==StackMaxSize;
       else if(k==3)
         return(BS.top1==-1)&&(BS,top2==StackMaxSize);
       else{
         cerr<<"k的值不正确!"';
         exit(1);
        }
      }
      ElemType peek(BothStack& BS,int k)
      {
        if(k==1){
         if(BS.top1==-1){
          cerr<<"Stack 1 is empty!"<<end1;
          exit(1);
          }
          return BS,stack(bs,top1);
         }
         else if(k==2){
          if(BS.top2==StackMaxSize){
           cerr<<"Stack 2 is empty!"<<end1;
           exit(1);
          }
         return BS,stack[BS,top2];
        }
         else{
           cerr<<"k的值不正确!";
            exit(1);
         }
       }

    void push(BothStack& BS,int k,const ElemType& item)
        {
           if(BS.top1==BS.top2-1){
            cerr<<"Stack overflow!"<<end1;
            exit(1);
          }
         if(k==1){
          BS.top1++;
          Bs.stack[BS.top1]=item;
          }
          else if(k==2){
             BS.top1--;
             BS.stack[BS.top2]=item;
         }
        }
       ElemType pop(BothStack& BS,int k]
        {
         if(k==1){
           if(BS.top==-1){
               cerr<<"Stack 1 is empty!"<<end1;
               exit(1);
              }
           BS.top--;
           return BS,stack[BS.top1+1];
           }
         else if(k==2){
           if(BS.top==StackMaxSize){
             cerr<<"Stack 2 is empty!"<<end1;
             exit(1);
           }
           BS.top2++;
            return BS.stack[BS,top2-1];
            }
          else{
           cerr<<"k的值不正确!";
           exit(1);
           }
         }

///操作的算法

#include<iostream.h>
    #include<stdlib.h>
    const int StackMaxSize=50;
    typedef int ElemType;
    struct BothStack{
       ElemType stack[StackMaxSize];
       int top1,top2;
      };
     #include"bstack.h"
      void main()
      {
        BothStack a;
        InitStack(a,3);//初始化两个栈
        int i,j,k;
         //计算机产生20个随机数并输出,同时按奇偶数不同分别放入不同的栈中
        for(i=0;i<20;i++){
         j=rand()%100;
          cout<<j<<"";
          if(j%2==0)
           push(a,1,j);
           else
           push(a,2,j);
          }
        cout<<end1;
        //按照存入栈1中元素的次序输出栈1中的所有元素
        cout<<"栈1:";
         for(i=0;i<=a.top1;i++)
         cout<<a.stack[i]<<"";
         cout<<end1;
         //按照存入栈2中元素的次序输出栈2中的所有元素
         cout<<"栈2:";
         for(i=StackMaxSize-1;i>=a.top2;i--)
         cout<<a.stack[i]<<"";
         cout<<end1;
         //按照后进先出的原则输出每个栈中的所有元素
         for(k=1;k<=2;k++){
          if(k==1)
           cout<<"栈1:";
           else
           cout<<"栈2:";
           while(!StackEmpty(a,k))
             cout<<Pop(a,k)<<"";
              cout<<end1;
            }
          }
     该程序输入并运行后将得到如下结果(由于机器系统和C++版本不同,你得到的结果可能
与此不同):
    41 67 34 0 69 24 78 58 62 5 45 81 27 61 91 95 42 27 36
栈1:34 0 24 78 58 62 64 42 36
栈2:41 67 69 5 45 81 27 61 91 95 27
栈1:36 42 64 62 58 78 24 0 34
栈2:27 95 91 61 27 81 45 5 69 67 41

posted on 2007-08-13 21:36  伦惠峰  阅读(248)  评论(0)    收藏  举报

导航