Double-Ended Queue(Deque)-1

December 10, 2008 at 5:24 pm (Queue) ()

(1) Linear Deque

int left,right;
itemType Q[n];
void Create_Deque(){
     right=n/2;
     left=right+1;
}
void Add(bool left_end,itemType item){
     if( left_end && left<=0 ||
         !left_end && right>=n-1)
          move(left_end);
     if(left_end==1){
          Q[--left]=item;
     else
          Q[++right]=item;
}
void Del(bool left_end,itemType &item){
     if(left>right) cout<<"The queue is empty.";
     else if(left_end)
          item=Q[left++];
     else
          item=Q[right--];
}
void move(bool left_end){
     if(right-left==n-1) cout<<"The queue is full.";
     else if (left){
          for(int i=right;i>=left;i--) Q[i+1]=Q[i];
          left++;
          right++;
     }else{
          for(int i=left;i<=right;i++) Q[i-1]=Q[i];
          left--;
          right--;
     }
}

Post a Comment