所有栏目

用C语言如何描述电梯的运行机制

已输入 0 字
优质回答
  • #include#include

    usingnamespacestd;

    structpassenger

    {charname;intstart;intend;intdir;

    };typedefstructLNode

    {undefined

    passenger P;structLNode *next;

    }LNode,*LinkList;

    voidInsert(LNode *C, LNode *LN)

    {undefined

    LN->next= C->next;

    C->next =LN;

    }

    void del(LNode *LN)

    {undefined

    LNode*next2 = LN->next;

    LN->next = next2->next;free(next2);

    }

    void finddel(LNode *LN, LinkList C)

    {for (LNode *p = C; p->next != NULL; p = p->next)

    {if (p->next->P.name == LN->P.name)

    {undefined

    del(p);break;

    }

    }

    }

    boolisempty(LinkList L)

    {if (L->next ==NULL)return 1;else

    return 0;

    }

    void Insert2(LinkList A, LinkList B, LinkList C,intdir, intfloor)

    {for (LNode *p = C->next; p != NULL; p = p->next)

    {if (dir == 1 && p->P.start >= floor && p->P.dir == 1)

    {//查找出C中方向相同且起始楼层在电梯上方的所有节点

    LNode *r = (LNode*)malloc(sizeof(LNode));

    LNode*s = (LNode*)malloc(sizeof(LNode));

    r->P = p->P;

    s->P = p->P;for (LNode *q = A; ; q = q->next)

    {//将该节点插入A中,确保其起始楼层为升序的方式

    if (q->next == NULL || q->next->P.start >= r->P.start)

    {undefined

    Insert(q, r);break;

    }

    }for (LNode *q = B; ; q = q->next)

    {//将该节点插入B中,确保其目标楼层为升序的方式

    if (q->next == NULL || q->next->P.end >= s->P.end)

    {undefined

    Insert(q, s);break;

    }

    }

    }else if (dir == 0 && p->P.start <= floor && p->P.dir == 0)

    {undefined

    LNode*r = (LNode*)malloc(sizeof(LNode));

    LNode*s = (LNode*)malloc(sizeof(LNode));

    r->P = p->P;

    s->P = p->P;for (LNode *q = A; ; q = q->next)

    {if (q->next == NULL || q->next->P.start <= r->P.start)

    {undefined

    Insert(q, r);break;

    }

    }for (LNode *q = B; ; q = q->next)

    {if (q->next == NULL || q->next->P.end <= s->P.end)

    {undefined

    Insert(q, s);break;

    }

    }

    }

    }

    }int finds(int m, LinkList C, intdir)

    {//确定出电梯行驶方向最后停留的楼层

    if (dir == 1)

    {for (LNode *p = C->next; p != NULL; p = p->next)

    {if (mP.start)

    m= p->P.start;

    }

    }else{for (LNode *p = C->next; p != NULL; p = p->next)

    {if (m>p->P.start)

    m= p->P.start;

    }

    }returnm;

    }intmain()

    {undefined

    LinkList C= (LNode*)malloc(sizeof(LNode));

    C->next = NULL;//C为存储所有的乘客信息的链表

    LinkList A = (LNode*)malloc(sizeof(LNode));

    A->next = NULL;//A为存储某个行驶方向上,上电梯的所有乘客信息

    LinkList B = (LNode*)malloc(sizeof(LNode));

    B->next = NULL;//B为A中乘客的按下电梯顺序排列

    int floor;//记录电梯选择运行方向时所在的楼层

    int dir;//记录电梯运行的方向

    cout << "请输入电梯所在楼层:";while (cin >>floor)

    {cout<< "请依次输入乘客代号、起始楼层、目标楼层、行驶方向:" <

    dir= 0;while (cin >>a)

    {undefined

    LinkList x= (LNode*)malloc(sizeof(LNode));

    x->P.name =a;

    cin>> x->P.start >> x->P.end >> x->P.dir;

    Insert(C, x);if (x->P.start >=floor)

    dir= 1;

    }cin.clear();

    while (!isempty(C))

    {//有乘客未乘坐电梯

    Insert2(A, B, C, dir, floor);//将C中满足条件的乘客放入A、B中

    if(isempty(B))

    floor=finds(floor, C, dir);while (!isempty(B))

    {//模拟电梯往某个特定方向行驶的过程

    if (dir == 1)

    {//当电梯是向上行驶时

    if ((A->next == NULL) || (A->next->P.start > B->next->P.end))

    {//出电梯的情况

    cout << "当前楼层为" << B->next->P.end << ","

    << B->next->P.name << "出电梯" <

    finddel(B->next, C);//删除C中对应的乘客信息

    del(B);//删除链表中该乘客的信息

    }else{//进电梯的情况

    cout << "当前楼层为" << A->next->P.start << ","

    << A->next->P.name << "进电梯" <

    del(A);//删除链表中该乘客的信息

    }

    }else{//当电梯是向下行驶时

    if ((A->next == NULL) || (A->next->P.start < B->next->P.end))

    {undefined

    cout<< "当前楼层为" << B->next->P.end << ","

    << B->next->P.name << "出电梯" <

    finddel(B->next, C);

    del(B);

    }else{undefined

    cout<< "当前楼层为" << A->next->P.start << ","

    << A->next->P.name << "进电梯" <

    del(A);

    }

    }if (B->next != NULL && B->next->next ==NULL)

    {undefined

    floor= finds(B->next->P.end, C, dir);

    }

    }

    dir= !dir;//改变行驶方向

    }cout<< endl <

    cout<< "请输入电梯所在楼层:";

    }

    system("pause");

    }

    2023-10-25 07:47:14
  • 在C语言中,可以使用多线程和条件变量来描述电梯的运行机制。每个楼层和电梯都可以表示为一个线程,电梯线程负责接收乘客请求并根据优先级选择目标楼层,楼层线程负责检测乘客的请求并通知电梯线程。

    通过条件变量实现线程之间的同步和通信,电梯线程根据当前状态和目标楼层进行运行、开关门等操作,直到达到目标楼层。

    这样可以模拟电梯的运行机制,并实现多个乘客同时使用电梯的情况。

    2023-10-25 07:47:14
最新问题 全部问题