Data Structureチェーン行列


データ構造教室作業実験六実験報告
  • 第1題
  • テーマ
  • コード
  • 第一題
    テーマ
    チェーンを使って患者の診察を実現するシミュレーションプログラムです.(1)キューの記憶構造を定義する.(2)キューの初期化を実現し、空、入隊、出隊などの基本操作を判断する.(3)行列の基本的な操作を呼び出して患者の診察を実現するシミュレーションプログラムは、行列、診察、問い合わせ、退出などの機能を含む.
    コード
    //   
    #include 
    #include 
    #include 
    using namespace std;
    
    //     
    //    
    typedef struct QNode
    {
        int data;
        struct QNode *next;
    }QNode,*QueuePtr;
    
    typedef struct LinkQueue
    {
        //      
        QueuePtr front;
        //      
        QueuePtr rear;
    }LinkQueue;
    //   
    void InitQueue_L(LinkQueue &Q)
    {
    	QueuePtr p=new QNode;
    	p->next=NULL;
        Q.front=Q.rear=p;
    }
    //    
    void DestroyQueue_L(LinkQueue &Q)
    {
        // Front    
        while(Q.front)
        {
            //        
            //   
            //                
            Q.rear=Q.front->next;
            delete Q.front;
            Q.front=Q.rear;
        }
    }
    //    
    void ClearQueue_L(LinkQueue &Q)
    {
        //                 
        //             
        //        
        //         
        //     
        QueuePtr p,q;
        p=Q.front->next;
        while(p)
        {
            q=p;
            p=p->next;
            delete q;
        }
        Q.front->next=NULL;
        Q.rear=Q.front;
    }
    //     
    int QueueLength_L(LinkQueue Q)
    {
        QueuePtr p;
        p=Q.front;
        int length;
        length=0;
        while(p->next)
        {
            length++;
            p=p->next;
        }
        return length;
    }
    //     
    void GetHead_L(LinkQueue Q,int &e)
    {
        if(Q.front->next==NULL)
        {
            cout<<"The Queue is EMPTY."<<endl;
            return;
        }
        else
        {
            e=Q.front->next->data;
            return;
        }
    }
    //    
    void EnQueue_L(LinkQueue &Q,int &e)
    {
        //       
        QueuePtr p;
        p->data=e;
        p->next=NULL;
        //      
        Q.rear->next=p;
        Q.rear=p;
        return;
    }
    //    
    void DeQueue_L(LinkQueue &Q,int &e)
    {
        if(Q.front->next==NULL)
        {
            cout<<"The Queue is EMPTY."<<endl;
            return;
        }
        QueuePtr p;
        //p front     
        p=Q.front->next;
        e=p->data;
        Q.front->next=p->next;
        //        
        if(Q.rear==p)
        {
            Q.rear=Q.front;
        }
        delete p;
    }
    
    
    void SeeDoctor()
    {
        LinkQueue Q;
    //               
        InitQueue_L(Q);			//       Q
        int flag=1;			// flag=1:    ;=0:    
        char ch;
        while(flag)
        {
            cout<<"     :";
            cin>>ch;
            switch(ch)
            {
                case 'a' :
                case 'A' :
                    cout<<"   :";
                    int n;
    				cin>>n;
    				cout<<endl;
                    EnQueue_L(Q,n);//       
                    break;
                case 'n' :
                case 'N' :
                    if(Q.front->next)
                    {
                    	int n;
                        DeQueue_L(Q,n); 		//       
                        cout<<"    "<<n<<"     "<<endl;
                    }
                    else
                        cout<<"       。"<<endl;
                    break;
                case 's' :
                case 'S' :
                    cout<<"           :";
                    while(Q.front->next)
                    {//           
                    	int n;
                        DeQueue_L(Q,n);
                        cout<<n<<" ";
                    }
                    cout<<endl<<"          !"<<endl;
                    flag=0;
                    break;
                default:
                    cout<<"       !"<<endl;
            }
        }
    } // SeeDoctor
    int main()
    {
        void SeeDoctor();
        SeeDoctor();
        return 0;
    }