铁路车厢调度问题。图 1 是一个铁道调车场的示意图,两侧铁道均为单向行驶
道,中间有一段用于调度的“栈道”,调车场的入口处有 n 节硬座和软座车厢(分
别用 H 和 S 表示),设计一个算法,把所有的软座车厢调度到硬座车厢前面来,
要求输出对这 n 节车厢进行调度的(车厢编号)结果序列。
Train=‘HSSSHSHHSSHSHSHSSHHH’
(hhh这个完全完全投机取巧)
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 20
typedef struct
{
char* base; //栈底指针
char* top; //栈顶指针
int stacksize; //当前已分配的存储空间
} SeqStack;
void InitStack(SeqStack* s)
{
s->base = (char*)malloc(STACK_INIT_SIZE * sizeof(char));//分配空间
if (!s->base) //分配失败则退出
{
exit(0);
}
s->top = s->base;//初始化
s->stacksize = STACK_INIT_SIZE;//栈的容量等于初始设的值
}
void Push(char c,SeqStack *s )
{
*(s->top) = c;
(s->top)++;
}
void Pop( SeqStack* s)
{
if (s->top == s->base)
return;
while (s->top != s->base)
{
(s->top)--;
printf("%c ", *(s->top));
}
return;
}
void Arrange(char T[])
{
SeqStack s;
InitStack(&s);
for (int i = 0; i < 25; i++)
{
if (T[i] == 'H')
{
Push(T[i], &s);
}
if (T[i] == 'S')
{
printf("%c ", T[i]);
}
}
Pop(&s);
}
int main()
{
char Train[25]= "HSSSHSHHSSHSHSHSSHHH";
Arrange(Train);
return 0;
}