數據結構經典算法彙總___循環隊列:

循環隊列:(調試成功)

#include "iostream.h"

  class ssqueue

{  private:

        int front,rear;                 //rear 虛存

              int *data;

              int size;

   public:

ssqueue(int s=10)

{   front=0;rear=0;size=s;

       data=new int[size] ;

    if(data==NULL)

       {   cout<<"assign is fail!"<<endl;     }

       else

       {     cout<<"bulid is suceed !"<<endl;  }

} 

~ssqueue()

{}

  int Insert(const int& item )

{ 

       if(Isempty())

       {     this->data[rear++]=item;   return 1;}

       if(Isfull())

       {   cout<<"fail! the squeue is full!"<<endl;  return 0;}

       data[rear]=item;

       rear=(rear+1)%size;

       return 1;

}

 

int  Out()

{   int temp;

    if(Isempty())

       {     cout<<"the squeue is empty ,out fail!"<<endl; return  0; }

       temp=data[front];

       front=(front+1)%size;

       return  temp;

}

int getsize()

{    return (size-1);}

  int Isempty()                     //empty retrun 1

{    return rear==front;}

  int Isfull()                    //full return 1

{    return (rear+1)%size==front;}

  int getfront()

{    if(Isempty())

  {   cout<<"the queue is empty"<<endl; return 0;}

         return data[front];}

  int getrear()

{    if(Isempty())

  {         cout<<"the queue is empty"<<endl;

           return 0;

  }

         return data[rear-1];

  }

void print()

{    int temp=front;

     if(Isempty())

         {   cout<<"the queue is empty"<<endl; return ; }

     for(;temp!=rear;temp=(temp+1)%size)

                cout<<data[temp]<<"  ";

}

int count()

{    int temp=front;

         for(int i=0;temp!=rear;i++)     temp=(temp+1)%size ;

                return i;

}

};

 

#include "iostream.h"

int main(int argc, char* argv[])

{   int n,flag=200,tag=1;     int nu;

   // cout <<"please input the numeber of the queue data"<<endl;

//       cin>>n;

    cout<<"the program begin!"<<endl<<"you can input '0'exit press any key to continue"<<endl;

       cin>>tag;

       if(tag==0) 

              return 0;

       cout<<" 你是第一次運行這個程序,將爲你建立一個循環隊列! "<<endl;

       cout <<"please input the numeber of the queue data"<<endl;

       cin>>n;

    int ch;int i;      ssqueue q(n+1);

       while (flag!=0)

       {

           cout<<"             0 退出 "<<endl;

           cout<<"            1 元素入隊 "<<endl;

           cout<<"            2 出隊 "<<endl;

       cout<<"            3 查詢對頭元素 "<<endl;

       cout<<"            4 查詢對尾元素 "<<endl;

     cout<<"            5 查詢對列所有元素 "<<endl;

cout<<"            6 查詢對列最大容量 "<<endl;

       cout<<"             7 查詢現在對列中元素的個數 "<<endl;

       cin>>flag;

       switch(flag)

       {

       case 0: break;

       case 1:

                  cout <<"please input the numeber of the queue data"<<endl;

                     cin>>n;

               for (i=0;i<n;i++)

                     {   cout<<"please input the data"<<endl;

                      cin>>ch;

                      q.Insert(ch);

                     }

           cout<<"the front and the rear is/n";

           cout<<q.getfront()<<"/t"<<q.getrear()<<endl;

           break;

     case 2:

             

                     cout<<" 請輸入要出隊元素的個數 /n";

                     cin>>nu;

                     for(i=0;i<nu;i++)     q.Out();

                     break;

      case 3:  cout<<q.getfront()<<endl; break;

         case 4:  cout<<q.getrear()<<endl;  break;

      case 5:  q.print(); cout<<endl;   break;

         case 6:  cout<<q.getsize()<<endl;  break;

         case 7:  cout<<q.count()<<endl;   break;

         default:  cout<<" 你的輸入有誤!請重試 "<<endl;  

}

}

       return 0;

}

 

循環模板隊列:(調試成功)

template<class type> class ssqueue

{  private:

      int front,rear;                 //rear 虛存

              type *data;

              int size;

   public:

ssqueue(int s=10)

{   front=0;rear=0;size=s;

       data=new int[size] ;

    if(data==NULL)

       {   cout<<"assign is fail!"<<endl;     }

       else

       {     cout<<"bulid is suceed !"<<endl;  }

} 

~ssqueue()

{}

  int Insert(const type& item )

{ 

       if(Isempty())

       {     this->data[rear++]=item;   return 1;}

       if(Isfull())

       {   cout<<"fail! the squeue is full!"<<endl;  return 0;}

       data[rear]=item;

       rear=(rear+1)%size;

       return 1;

}

 

int  Out()

{   int temp;

    if(Isempty())

       {     cout<<"the squeue is empty ,out fail!"<<endl; return  0; }

       temp=data[front];

       front=(front+1)%size;

       return  temp;

}

int getsize()

{    return (size-1);}

  int Isempty()                     //empty retrun 1

{    return rear==front;}

  int Isfull()                    //full return 1

{    return (rear+1)%size==front;}

  type getfront()

{    if(Isempty())

  {   cout<<"the queue is empty"<<endl; return 0;}

         return data[front];}

  type getrear()

{    if(Isempty())

  {         cout<<"the queue is empty"<<endl;

           return 0;

  }

         return data[rear-1];

  }

void print()

{    int temp=front;

     if(Isempty())

         {   cout<<"the queue is empty"<<endl; return ; }

     for(;temp!=rear;temp=(temp+1)%size)

                cout<<data[temp]<<"  ";

}

int count()

{    int temp=front;

         for(int i=0;temp!=rear;i++)     temp=(temp+1)%size ;

                return i;

}

};

#include"queue1.h"

#include "iostream.h"

#include "stdio.h"

int main(int argc, char* argv[])

{   int n,flag=200,tag=1;     int nu;

   // cout <<"please input the numeber of the queue data"<<endl;

//       cin>>n;

    cout<<"the program begin!"<<endl<<"you can input '0'exit press any key to continue"<<endl;

       cin>>tag;

       if(tag==0) 

              return 0;

       cout<<" 你是第一次運行這個程序,將爲你建立一個循環隊列! "<<endl;

       cout <<"please input the numeber of the queue data"<<endl;

       cin>>n;

    char ch;int i;   ssqueue<int> q(n+1);

       while (1)

       {

    cout<<"            0 退出 "<<endl;

    cout<<"            1 元素入隊 "<<endl;

    cout<<"             2 出隊 "<<endl;

       cout<<"            3 查詢對頭元素 "<<endl;

       cout<<"            4 查詢對尾元素 "<<endl;

    cout<<"            5 查詢對列所有元素 "<<endl;

    cout<<"            6 查詢對列最大容量 "<<endl;

       cout<<"            7 查詢現在對列中元素的個數 "<<endl;

       cin>>flag;

       switch(flag)

       {

       case 0: break;

       case 1:

                  cout <<"please input the numeber of the queue data"<<endl;

                     cin>>n;

             for (i=0;i<n;i++)

                     {   cout<<"please input the data"<<endl;

                      cin>>ch;

                      if(!q.Insert(ch)) break;

                     }

             

           cout<<"the front and the rear is/n";

           cout<<q.getfront()<<"/t"<<q.getrear()<<endl;

           break;

     case 2:

             

                     cout<<" 請輸入要出隊元素的個數 /n";

                     cin>>nu;

                     if(nu>q.getsize())

                     {   cout<<" 出隊失敗,隊列中的元素沒有怎麼多 /n";   break;}

                     for(i=0;i<nu;i++)   

                         if(q.Out()==0) break;

                   break;

      case 3:  cout<<q.getfront()<<endl; break;

         case 4:  cout<<q.getrear()<<endl;  break;

      case 5:  q.print(); cout<<endl;   break;

         case 6:  cout<<q.getsize()<<endl;  break;

         case 7:  cout<<q.count()<<endl;   break;

         default:  cout<<" 你的輸入有誤!請重試 "<<endl;  

       }

}

       return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章