#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define max_ 100
#define count 20
#define k 4
typedef struct lastin_firstout {
int data[max_];
int top;
} lifo;
int getlast(lifo *p) {
if (p->top < 0)
return 0;
return p->data[p->top];
}
void in(lifo* p, int value) {
++p->top;
p->data[p->top] = value;
};
int out(lifo* p) {
if (p->top < 0) return 0;
return p->data[p->top--];
}
void print(lifo* p) {
for (int i = p->top; i >= 0; i--) {
printf("%d ", p->data[i]);
}
printf("\n");
}
lifo* cp,*kp;
void init_lifo() {
cp = (lifo*)malloc(sizeof(lifo));
kp = (lifo*)calloc(sizeof(lifo), k);
for (int i = 0; i < k; i++) {
(kp+i)->top = -1;
}
for (int i = 0; i < count; i++) {
cp->data[i] = i + 1;
cp->top = count - 1;
}
print(cp);
srand((unsigned)time);
int tmp, j;
for (int i = 0; i < count; i++) {
j = rand() % count;
tmp = cp->data[i];
cp->data[i] = cp->data[j];
cp->data[j] = tmp;
}
print(cp);
}
void _in() {
for (int i = count; i > 0; i--) {
for (int j = 0; j < k; j++) {
if (getlast(kp + j) == i) {
out(kp + j);
in(cp, i);
}
}
}
print(cp);
}
void _do() {
int n;
while ((n = out(cp)) > 0) {
int tmpd = 20;
int tmpi = -1;
int d;
for (int i = 0; i < k; i++) {
d = n - getlast(kp + i);
if (d > 0 && d < tmpd) {
tmpd = d;
tmpi = i;
}
}
if (tmpi == -1) {
for (int i = 0; i < k; i++) {
print(kp + i);
}
printf("异常退出!\n");
return ;
}
in(kp + tmpi, n);
}
_in();
}
//火车车厢在缓冲轨道重排
void sort() {
init_lifo();
_do();
}
c语言-火车车厢在缓冲轨道重排
最新推荐文章于 2022-10-07 19:09:33 发布