Red de conocimiento informático - Aprendizaje de código fuente - Diseño del curso de estructura de datos (c): procesamiento que ahorra demanda

Diseño del curso de estructura de datos (c): procesamiento que ahorra demanda

#include

#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

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;

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;

}

<; p>void getMoney()

{//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 cola

state =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;

}

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);

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"<tipo <<"\t\t"<<"\t\t"<<"\t\t"<dinero<

Si (eq.type == "llegada")

cout << eq.head->num<<"\t\t"<tipo

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()