데이터 구조 - 스 택 - 배열 이 맞 는 더 블 스 택 을 실현 합 니 다.

6450 단어 데이터 구조
번호 가 0 과 1 인 두 개의 스 택 을 하나의 배열 공간 v [m] 에 저장 하고 스 택 밑 은 각각 배열 의 양 끝 에 있 으 며 양 끝 에 각각 스 택 포인 터 를 놓 습 니 다. 1. 양자 차이 가 1 일 때 2. 0 스 택 이 - 1 이 고 1 스 택 이 m 일 때 이미 꽉 찼 습 니 다.다음 작업 이 창고 에서 나 오고 창고 에 들 어가 면 팝 업 이 되 고 비어 있 습 니 다.초기 화
#include 
#include 
#include 
#include 
/*        ,    ,      1      
top      , bot   

*/
using namespace std;
typedef  int ElemType;
const int maxn=300;
typedef struct
{   int top[2],bot[2];//         
    vector v;//  。
    int m;//        ;
}dbstack;
dbstack s;
bool init()
{  s.m=maxn;
    s.top[0]=-1;
    s.top[1]=s.m;
    s.v.assign(maxn,0);
    return true;
}
bool push(int num,int vis)
{    if(s.top[1]-s.top[0]==1)
      {  puts("the stack is full");
         return false;
      }
      if(vis==1)
      {   s.top[1]--;
           s.v[s.top[1]]=num;
      }
      else
      {   s.top[0]++;
          s.v[s.top[0]]=num;
      }
    return true;
}
pair<bool,ElemType> pop(int vis)
{   pair<bool,ElemType> m;
    if(vis==0&&s.top[0]==-1)
     {  puts("empty");
      cout<0]<<"!!"<false;
         m.second=0;
         return m;
     }
     if(vis==1&&s.top[1]==s.m)
     {   puts("empty");
         cout<1]<<"!!"<false;
        m.second=0; return m;
     }
      m.second=s.v[s.top[vis]];
      m.first=true;
     return m;
}
bool top(int vis)
{ if(vis==1)
      s.top[vis]++;
      else
        s.top[vis]--;
    return true;
}
bool empty1(int vis)
{   if(vis==1&&s.top[vis]==s.m)
    return true;
    else if(vis==0&&s.top[vis]==-1)
        return true;
    return false;
}
int main()
{   init();
    push(1,1);
    push(2,1);
    push(5,0);
    push(6,0);
    push(7,0);
    //cout<
    while(!empty1(1))
    {
        if(pop(1).first)
        cout<1).second<1);
    }
    while(!empty1(0))
    {    if(pop(0).first)
        cout<0).second<0);
    }



    return 0;
}

좋은 웹페이지 즐겨찾기