| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 791 人关注过本帖
标题:银行模拟 严蔚敏教材C语言
取消只看楼主 加入收藏
杨亚勤
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-1-29
结帖率:0
收藏
 问题点数:0 回复次数:0 
银行模拟 严蔚敏教材C语言

typedef    struct
{

    int    type;
    int    time;

}Event;










typedef    struct    LNode
{

    Event   data;
    LNode   *next;

}LNode, *ListPtr;













typedef    struct
{

    ListPtr    head;

}LinkList;














Status    MakeNode( ListPtr  &p, Event  e )
{

    p=( ListPtr )malloc( sizeof( LNode ) );
    if( !p )    return  ERROR;
    p->data=e;
    p->next=null;
    return  OK;

}














Status    InitList( LinkList  &L )
{
   
    L.head=( ListPtr )malloc( sizeof( LNode ) );
    if( !L.head )     return    ERROR;
    L.head->next=null;
    return    OK;

}













Status    OrderInsert( LinkList  &L, Event  e )
{

    MakeNode( p, e );
    q=L.head->next;
    while( q!=null && ( q.data ).time<  ( p.data ).time )
    {

        pre=q;
        q=q->next;

    }
    p->next=q;
    pre->next=p;
    return    OK;

}















Status    DelFirst( LinkList  &L, Event  &e )
{

    p=L.head->next;
    if( p==null )    return  ERROR;
    L.head->next=p->next;
    e=p->data;
    free( p );
    return  OK;

}















typedef    struct
{

    int    ArriveTime;
    int    ServiceTime;

}Customer;















typedef    struct    QNode
{

    Customer    data;
    QNode    *next;

}QNode,  *QueuePtr;

















typedef    struct
{

    QueuePtr    front;
    QueuePtr    rear;
    int    length;

}LinkQueue;













Status    MakeQNode( QueuePtr  &p,  Customer  e )
{

    p=( QueuePtr )malloc( sizeof( QNode ) );
    if( !p )    return  ERROR;
    p->data=e;
    p->next=null;
    return  OK;

}













Status    InitQueue( LinkQueue  &Q)
{

    Q.front=Q.rear=( QueuePtr )malloc( sizeof( QNode ) );
    if( !Q.front )    return  ERROR;
    Q.front->next=null;
    Q.length=0;
    return  OK;

}















Stutas    EnQueue( LinkQueue  &Q,  Customer  e )
{

    MakeQNode( p,  e );
    Q.rear->next=p;
    Q.rear=p;
    Q.length++;
    return  OK;

}















Status    DeQueue( LinkQueue  &Q,  Customer  &e )
{

    if( Q.length==0 )    return  ERROR;
    p=Q.front->next;
    Q.front->next=p->next;
    Q.length--;
    e=p->data;
    if( p==Q.rear )   Q.rear=Q.front;
    free( p );
    return  ok;

}














Status    GetHead( LinkQueue  &Q,  Customer  &e )
{

    if( Q.lengeh==0 )   return  ERROR;
    p=Q.front->next;
    e=p->data;
    return  OK;

}
















int    MinQueue( LinkQueue  q )
{

    min=q[1].length;
    num=1;
    for( i=2; i<=4; i++ )
    {

        size=q[ i ].length;
        if( min >size )
        {

            min=size;
            num=i;

        }

    }
    return  num;

}
















Status    OpenForDay()
{

    TotalTime=0;
    CustomerNum=0;
    event.time=0;
    event.type=0;
    InitList( eventlist );
    OrderInsert( eventlist,  event );
    for( i=1; i<=4; i++ )
    {

        InitQueue( q[i] );

    }
    return   OK;

}














Status    CustomerArrived()
{

    ++CustomerNum;
    Random( servicetime, intertime );
    i=MinQueue( q );
    EnQueue( q[i], ( event.time, servicetime ) );
    if( q[i].length==1 )
    {

        OrderInsert( eventlist,  ( event.time + servicetime,  i ) );

    }
    t=event.time + intertime;
    if( t< CloseTime )
    {
        OrderInsert( eventlist,  ( t,  0 ) );

    }
    return  OK;

}
















Status    CustomerDepature()
{

    i=event.type;
    DeQueue( q[i],  customer );
    TatolTime += event.time - customer.ArriveTime;
    if( q[i].length !=0 )
    {

        GetHead( q[i], next_customer );
        OrderInsert( eventlist,  ( event.time + next_customer.ServiceTime,  i ) );

    }
    return  ERROR;

}














Event   event;
LinkList    evenlist;
Customer    customer;
LinkQueue   q[5];
int    TatolTime,  CustomerNum;                                /* 全局变量 */















int    main()
{

    OpenForDay();
    while( eventlist.head->next != null )
    {

        DelFirst( eventlist,  event );
        if( event.type==0 )
        {

            CustomerArrived();

        }
        else
        {

            CustomerDepature();

        }

   }
   printf( " Average time: %f ", ( float )TotalTime/CustomerNum );   
   return  0;

}

        


        
搜索更多相关主题的帖子: 模拟 银行 教材 C语言 严蔚敏 
2010-02-10 23:55
快速回复:银行模拟 严蔚敏教材C语言
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024722 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved