This commit is contained in:
iridiumR 2021-11-19 10:26:57 +08:00
parent e2f36ca41b
commit d6e00f3cea
4 changed files with 116 additions and 111 deletions

View file

@ -1,112 +1,6 @@
#include "queue.hpp"
#include "train.hpp"
#include <stdio.h>
#include <time.h>
#define JIE 10
class Train
{
private:
int _v[10];
Queue<int> come[2];
Queue<int> temp[4];
Queue<int> out;
public:
Train()
{
srand(time(NULL));
for (int i = 0; i < JIE; i++)
_v[i] = JIE - i;
for (int i = 0; i < JIE; i++)
swap(i, rand() % JIE);
printf("入队序列: \n");
printf("#1到达轨 ");
for (int i = 0; i < 5; i++)
{
come[0].enqueue(_v[i]);
printf("%2d ", _v[i]);
}
printf("\n");
printf("#2到达轨 ");
for (int i = 5; i < 10; i++)
{
come[1].enqueue(_v[i]);
printf("%2d ", _v[i]);
}
printf("\n");
}
bool orgnize()
{
int j = 0;
while (!come[1].empty() || !come[0].empty())
{
for (int i = 0; i < 4;)
{
if (temp[i].back() <
(come[1].front() < come[0].front() ?
(come[1].front() ? come[1].front() : come[0].front()) :
(come[0].front() ? come[0].front() : come[1].front())))
{
printf("%2d号车厢由#%d到达轨推入#%d缓冲轨 \n",
(come[1].front() < come[0].front() ?
(come[1].front() ? come[1].front() : come[0].front()) :
(come[0].front() ? come[0].front() : come[1].front())),
(come[1].front() < come[0].front() ?
(come[1].front() ? 2 : 1) :
(come[0].front() ? 1 : 2)),
i + 1);
temp[i].enqueue(
(come[1].front() < come[0].front() ?
(come[1].front() ? come[1].dequeue() : come[0].dequeue()) :
(come[0].front() ? come[0].dequeue() : come[1].dequeue())));
}
else
{
j++;
i++;
if (j > 100)
return false;
}
}
}
return true;
}
int Out()
{
for (int i = 1; i <= JIE;)
{
for (int j = 0; j < 4; j++)
{
if (temp[j].front() == i)
{
printf("%2d号车厢经#%d缓冲轨推入出发区出发队列为 ", temp[j].front(), j + 1);
out.enqueue(temp[j].dequeue());
for (int i = 0; i < out.size(); i++)
printf("%d ", out[i]);
printf("\n");
i++;
}
}
}
return 0;
}
protected:
void swap(int a, int b)
{
int temp = _v[a];
_v[a] = _v[b];
_v[b] = temp;
}
};
int main()
{
Train T;

View file

@ -1,5 +1,5 @@
#ifndef _LIST_
#define _LIST_
#ifndef _LIST_HPP_
#define _LIST_HPP_
#include <iostream>
#include <string>
#define Node node *

View file

@ -1,5 +1,5 @@
#ifndef _QUEUE_
#define _QUEUE_
#ifndef _QUEUE_HPP_
#define _QUEUE_HPP_
#include <iostream>
#include "list.hpp"

111
ex8/train.hpp Normal file
View file

@ -0,0 +1,111 @@
#ifndef _TRAIN_HPP_
#define _TRAIN_HPP_
#include <time.h>
#include "queue.hpp"
#define JIE 10
class Train
{
private:
int _v[10];
Queue<int> come[2];
Queue<int> temp[4];
Queue<int> out;
public:
Train()
{
srand(time(NULL));
for (int i = 0; i < JIE; i++)
_v[i] = JIE - i;
for (int i = 0; i < JIE; i++)
swap(i, rand() % JIE);
printf("入队序列: \n");
printf("#1到达轨 ");
for (int i = 0; i < 5; i++)
{
come[0].enqueue(_v[i]);
printf("%2d ", _v[i]);
}
printf("\n");
printf("#2到达轨 ");
for (int i = 5; i < 10; i++)
{
come[1].enqueue(_v[i]);
printf("%2d ", _v[i]);
}
printf("\n");
}
bool orgnize()
{
int j = 0;
while (!come[1].empty() || !come[0].empty())
{
for (int i = 0; i < 4;)
{
if (temp[i].back() <
(come[1].front() < come[0].front() ?
(come[1].front() ? come[1].front() : come[0].front()) :
(come[0].front() ? come[0].front() : come[1].front())))
{
printf("%2d号车厢由#%d到达轨推入#%d缓冲轨 \n",
(come[1].front() < come[0].front() ?
(come[1].front() ? come[1].front() : come[0].front()) :
(come[0].front() ? come[0].front() : come[1].front())),
(come[1].front() < come[0].front() ?
(come[1].front() ? 2 : 1) :
(come[0].front() ? 1 : 2)),
i + 1);
temp[i].enqueue(
(come[1].front() < come[0].front() ?
(come[1].front() ? come[1].dequeue() : come[0].dequeue()) :
(come[0].front() ? come[0].dequeue() : come[1].dequeue())));
}
else
{
j++;
i++;
if (j > 40)
return false;
}
}
}
return true;
}
int Out()
{
for (int i = 1; i <= JIE;)
{
for (int j = 0; j < 4; j++)
{
if (temp[j].front() == i)
{
printf("%2d号车厢经#%d缓冲轨推入出发区出发队列为 ", temp[j].front(), j + 1);
out.enqueue(temp[j].dequeue());
for (int i = 0; i < out.size(); i++)
printf("%d ", out[i]);
printf("\n");
i++;
}
}
}
return 0;
}
protected:
void swap(int a, int b)
{
int temp = _v[a];
_v[a] = _v[b];
_v[b] = temp;
}
};
#endif