Diseño del curso de estructura de datos (c): procesamiento que ahorra demanda
#include
#include
usando el espacio de nombres std;
int total; //fondos totales iniciales disponibles en el banco
int closeTime; //hora de finalización del negocio
int ArrivalTime //límite de intervalo entre dos eventos de llegada
int dealTime;
int dealMoney = 30000
int currentTime = 0; //Hora actual
int totalTime = 0 //Tiempo total de estadía del cliente.
int counter = 0; //Número total de clientes
int number = 1; //Número de serie inicial del cliente +
servicio de estructura
{
int num;
tipo de cadena; //llegada o salida
int startTime;
int endTime;
int money; //número positivo para depósitos, número negativo para retiros
servicio* siguiente;
};
estructura de cola
{ //cola
servicio* cabeza;
servicio* trasero;
};
empuje vacío ( cola &q,int d)
{//Inserte el elemento d como el nuevo elemento de cola de Q
servicio* temp = nuevo servicio;
temp- >money = d;
temp->next = NULL;
if(NULL == q.head)
{// La cola está vacía, inicializada
q. cabeza = temp;
q. rear = temp;
}//si
else
{ // La cola no está vacía, inserta el elemento d
q.rear-> next = temp;
q.rear->next;
}/else
}
void pop(queue &q)
{// Si la cola no está vacía, aparecerán un par de funciones p>
servicio * temp;
temp = q. cabeza;
if(NULL == q. cabeza->siguiente)
q. head = q.rear = NULL;
else
q.head=q.head->next;
Eliminar temp;
}
service* front(queue &q)
{//Devuelve el elemento principal de la cola
return q.head;<
/p>
}
servicio* back(queue &q)
{/Devuelve el elemento final de la cola
return q.rear;
}
servicio* searchAndDel(cola &q,int m)
{/Encuentra un elemento procesable en la cola
signo de servicio* = q. head; //marca el nodo principal
service* temp;
while(NULL != q. head)
{
if((-(q. head->money)) {//Puede manejar el elemento principal de la cola if(q. head==q .rear) { temp = q.head; q.head = q.rear = NULL; temperatura de retorno ; }//if else {//El elemento principal de la cola sale de la cola temp = q.head; p> q.head = q.head->next; // Mueve el primer nodo hacia atrás un bit y regresa al primer nodo original return temp; }//else }// while else {// El primer elemento de la cola no se puede procesar if (q.head == q. rear){} else {//El nodo principal se mueve al final de la cola q . rear->next = q. head; q.rear = q. rear->next; q.head == sign) //Detener la cola por una semana. Devuelve NULL; } Devuelve NULL; } estado bool = 1; se utiliza para determinar si se está procesando una ventana int currentTimeOfDeal = 0; int theArriveTime = 0; queue eq; //cola de eventos queue fq; / /Cola uno queue sq; //Para poner en cola dos //Inicializar tres colas void Arrival() { /*La función "llegar" genera un cliente aleatorio para ingresar a la cola Genera una cola de eventos de llegada push(fq,(rand()% (2* repartMoney) - repartMoney) -dealMoney) repartMoney) -dealMoney)); // Genera clientes aleatoriamente para unirse a la primera cola back(fq)->beginTime = currentTime; back(fq)->num = número ; push(eq,(back (fq)->money)); // Agrega el evento generado a la cola de eventos back(eq)-> comenzarTime = currentTime ; back(eq)->tipo = "llegó"; back(eq)->num = número; ++número; } void putMoney () { //función de depósito total += front(fq)->money; //actualiza la cantidad total de dinero push( eq,front( fq)->money); //agregar a la cola de eventos dejar back(eq)->type = "leave"; back(eq)-> num = front(fq)->num; back(eq)-> endTime = ( front(fq)->beginTime + rand()%dealTime +1); ++counter; // Actualiza el número total de clientes totalTime += (back(eq)->endTime - front(fq)->beginTime // Actualiza el tiempo de permanencia pop(fq); currentTimeOfDeal = back(eq)->endTime estado = 0; }
{//Función de retiro
if( (-fq.head->money) > total )
{//If te falta dinero, únete a la tercera Dos colas
push( sq,front(fq)->money );
back(sq)->beginTime = front(fq )->beginTime;
back(sq)->num = front(fq)->num;
pop(fq);
}// if
else
{
total += back(fq)->dinero;
push(eq,front(fq )->money); // agregar a la cola de eventos dejar
back(eq)->type = "leave";
back(eq)->type = "leave" ;
back(eq)->num = front(fq)->num;
back(eq)->endTime = (front(fq)->beginTime + rand( )%dealTime +1);
back(eq)->beginTime = 0;.
currentTimeOfDeal = back(eq)->endTime;
+ +counter; //actualiza el número total de clientes
totalTime += ( back(eq)->endTime - back(fq)->.beginTime
<); p>pop(fq); // Eliminar el primer servicio en la primera colastate =0;
}/else
}
servicio* templado ;
int randomTemp;
void findAndDeal()
{/Encontrar elementos procesables en el par de columnas y procesarlos
while( (temped= searchAndDel (sq,total))&&NULL ! = temped )
{// Buscar retiros que se puedan procesar
total += temped->dinero //Actualizar fondos totales
p >
push(eq,temped->money); //Agregar a la cola de eventos hojas de tren
back(eq)->.type = "leave";
back (eq)->num = temped->num;
randomTemp = rand()%dealTime +1;
back(eq)->endTime = currentTime + randomTemp;
p>
currentTimeOfDeal += randomTemp;
++counter; //actualizar el número total de clientes
totalTime += ( back(eq)- >endTime - temped-> .beginTime ); // Actualizar tiempo de permanencia
eliminar temped // Eliminar nodo
temped = NULL;
} p>
estado = 0;
}
int main()
{
printf(" **** ****** *************************************\n");
printf(" Bienvenido al sistema de simulación bancaria\n");
printf(" ********************** ****** ** *******************\n");
printf("1.Iniciar simulación 0.Salir\n ");
int n ;
scanf("%d",&n);
mientras(n==1)
{
srand( time (NULL)); //inicializa la función aleatoria
printf("Ingresa el depósito inicial del banco:\n");
scanf("%d",&total);
printf("Ingrese el horario comercial del banco:\n");
scanf("%d",&closeTime); p>
srand(amp;closeTime);
printf("Ingrese el intervalo de tiempo máximo de llegada:\n");
scanf("%d",&arriveTime) ;
printf("Ingrese el tiempo máximo de procesamiento:\n");
scanf("%d",&dealTime);
scanf("% d",&dealTime);
scanf ("%d",&dealTime);;
Horario comercial del banco.
theArriveTime +=rand()%arriveTime + 1; //primera hora de llegada
while(currentTime < closeTime)
{
++horaActual ;
si( HoraActualDeOferta < horaActual ) HoraActualDeOferta = HoraActual ;
if(HoraActualDeOferta == HoraActual ) estado = 1;
si( HoraActual == theArriveTime ) // evento de llegada
{
arrive();
theArriveTime +=rand()%arriveTime +1; p>}//if
if( 1 == estado && NULL != fq.head)
{
if(fq.head->dinero >= 0)
{
putMoney();
findAndDeal();
}/if
else
getMoney();
}/if
}
cout < while( NULL ! = eq.head) //borrar cola de eventos { if(eq.head->type=="leave") cout << eq .head->num<<"\t\t"< Si (eq.type == "llegada") cout << eq.head->num<<"\t\t"< If(eq.head->money< pop(eq); } cout << "Cliente sin procesar:" << "<<" << endl; mientras( NULL ! = fq.head) { tiempototal += ( closeTime - fq.head-> beginTime ); // Actualiza los clientes no procesados al final de la primera cola cout < ;num <<" "< ++contador; pop(fq); }/mientras cout << "El tiempo promedio de estadía de los clientes es:" << totalTime/counter << endl; cout << "El saldo actual del banco es:" << total< romper; }//mientras(n==1) devuelve 0; }//maim() p>