作业8
This commit is contained in:
parent
293e4be1e9
commit
d86571bd80
3 changed files with 235 additions and 0 deletions
89
ex8/ex8.cpp
Normal file
89
ex8/ex8.cpp
Normal file
|
@ -0,0 +1,89 @@
|
|||
#include "queue.hpp"
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#define JIE 6
|
||||
|
||||
class Train
|
||||
{
|
||||
private:
|
||||
int _v[6];
|
||||
Queue<int> come;
|
||||
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");
|
||||
for (int i = 0; i < JIE; i++)
|
||||
{
|
||||
come.enqueue(_v[i]);
|
||||
printf("%d ", _v[i]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
bool orgnize()
|
||||
{
|
||||
int j = 0;
|
||||
while (!come.empty())
|
||||
{
|
||||
for (int i = 0; i < 4;)
|
||||
{
|
||||
if (temp[i].back() < come.front())
|
||||
{
|
||||
printf("将车厢%d引入缓冲轨道%d \n", come.front(), i + 1);
|
||||
temp[i].enqueue(come.dequeue());
|
||||
}
|
||||
else
|
||||
{
|
||||
j++;
|
||||
i++;
|
||||
if (j > 20)
|
||||
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("将缓冲轨道%d中的车厢%d引入出发序列\n", j+1,temp[j].front());
|
||||
out.enqueue(temp[j].dequeue());
|
||||
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;
|
||||
T.orgnize() ? T.Out() : printf("编组失败\n");
|
||||
return 0;
|
||||
}
|
107
ex8/list.hpp
Normal file
107
ex8/list.hpp
Normal file
|
@ -0,0 +1,107 @@
|
|||
#ifndef _LIST_
|
||||
#define _LIST_
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#define Node node *
|
||||
|
||||
template <class T>
|
||||
class List
|
||||
{
|
||||
typedef struct node
|
||||
{
|
||||
T data;
|
||||
Node pred;
|
||||
Node succ;
|
||||
} node;
|
||||
|
||||
private:
|
||||
Node header = new node;
|
||||
Node trailer = new node;
|
||||
int _size;
|
||||
|
||||
protected:
|
||||
Node firstInsertN(Node New);
|
||||
Node lastInsertN(Node New);
|
||||
Node succInsertN(Node old, Node ne);
|
||||
Node predInsertN(Node old, Node ne);
|
||||
void removeN(Node i);
|
||||
Node searchN(int value, int n, Node p);
|
||||
|
||||
public:
|
||||
int size()
|
||||
{
|
||||
return _size;
|
||||
}
|
||||
List();
|
||||
void clear();
|
||||
Node first() { return header->succ; }
|
||||
Node last() { return trailer->pred; }
|
||||
T firstInsert(T New);
|
||||
T lastInsert(T New);
|
||||
T removeLast();
|
||||
Node succInsert(Node Old, T New);
|
||||
Node predInsert(Node Old, T New);
|
||||
|
||||
int get(int i);
|
||||
Node find(int i);
|
||||
T remove(T i);
|
||||
|
||||
int operator[](int i)
|
||||
{
|
||||
Node p = first();
|
||||
while (0 < i--)
|
||||
p = p->succ;
|
||||
return p->data;
|
||||
}
|
||||
};
|
||||
|
||||
template <class T>
|
||||
List<T>::List()
|
||||
{
|
||||
_size = 0;
|
||||
header->data = NULL;
|
||||
header->succ = trailer;
|
||||
header->pred = NULL;
|
||||
|
||||
trailer->data = NULL;
|
||||
trailer->succ = NULL;
|
||||
trailer->pred = header;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void List<T>::clear()
|
||||
{
|
||||
while (0 < _size)
|
||||
remove(0);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
T List<T>::firstInsert(T New)
|
||||
{
|
||||
Node temp = new node;
|
||||
temp->data = New;
|
||||
temp->pred = header;
|
||||
temp->succ = header->succ;
|
||||
header->succ = temp;
|
||||
temp->succ->pred = temp;
|
||||
_size++;
|
||||
return New;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
T List<T>::removeLast()
|
||||
{
|
||||
if (!_size)
|
||||
return NULL;
|
||||
|
||||
Node last = trailer->pred;
|
||||
T temp = last->data;
|
||||
(last->pred)->succ = last->succ;
|
||||
(last->succ)->pred = last->pred;
|
||||
delete[] last;
|
||||
_size--;
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
#endif
|
39
ex8/queue.hpp
Normal file
39
ex8/queue.hpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
#ifndef _QUEUE_
|
||||
#define _QUEUE_
|
||||
|
||||
#include <iostream>
|
||||
#include "list.hpp"
|
||||
template <class T>
|
||||
class Queue
|
||||
{
|
||||
private:
|
||||
List<T> q;
|
||||
public:
|
||||
int size()
|
||||
{
|
||||
return q.size();
|
||||
}
|
||||
bool empty()
|
||||
{
|
||||
return size() ? false : true;
|
||||
}
|
||||
T enqueue(T e)
|
||||
{
|
||||
return q.firstInsert(e);
|
||||
}
|
||||
T dequeue()
|
||||
{
|
||||
return q.removeLast();
|
||||
}
|
||||
T front()
|
||||
{
|
||||
return q.last()->data;
|
||||
}
|
||||
|
||||
T back()
|
||||
{
|
||||
return q.first()->data;
|
||||
}
|
||||
|
||||
};
|
||||
#endif
|
Reference in a new issue