072.火车车厢重排

简介: 072.火车车厢重排
#include "stdafx.h"
#include "stdio.h"
#include "iostream.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#define StackSize 100 //假定预分配的栈空间最多为100个元素 
#define MaxLength  100// 最大的字符串长度   
typedef int DataType;//假定栈元素的数据类型为整数  
typedef struct{
  DataType data[StackSize];
  int top;
}SeqStack;   
// 置栈空
void Initial(SeqStack *S)
{//将顺序栈置空
  S->top=-1;
} 
//判栈空
int IsEmpty(SeqStack *S)
{
  return S->top==-1;
}
//判栈满
int IsFull(SeqStack *S)
{
  return S->top==StackSize-1;
}
//进栈
void Push(SeqStack *S,DataType x)
{
  if (IsFull(S))
  {
    printf("栈上溢"); //上溢,退出运行
    exit(1);
  }
  S->data[++S->top]=x;//栈顶指针加1后将x入栈
}
//出栈
DataType Pop(SeqStack *S)
{
  if(IsEmpty(S))
  {
    printf("栈为空"); //下溢,退出运行
    return -1;
  }
  return S->data[S->top--];//栈顶元素返回后将栈顶指针减1
}
// 取栈顶元素
DataType Top(SeqStack *S)
{
  if(IsEmpty(S))
  {
    printf("栈为空"); //下溢,退出运行
    exit(1);
  }
  return S->data[S->top];
}
int  Hold(int c,int *minH, int *minS,SeqStack H[],int k, int n)
{// 在一个缓冲铁轨中放入车厢c
  // 如果没有可用的缓冲铁轨,则返回0
  // 如果空间不足,则引发异常N o M e m
  // 否则返回1
  // 为车厢c寻找最优的缓冲铁轨
  // 初始化
  int BestTrack = 0,i; // 目前最优的铁轨
  int BestTop = n + 1;// 最优铁轨上的头辆车厢
  int x;// 车厢索引
  //扫描缓冲铁轨
  for (i = 1; i <= k; i++)
    if (IsEmpty(&H[i])) 
    {// 铁轨i 不空
      x = Top (&H[i]) ;
      if (c<x && x < BestTop)
      {//铁轨i 顶部的车厢编号最小
        BestTop = x;
        BestTrack = i;
      }
    }
    else // 铁轨i 为空
      if (!BestTrack) 
        BestTrack = i;
      if (!BestTrack) 
        return 0; //没有可用的铁轨
      //把车厢c 送入缓冲铁轨
      Push(&H[BestTrack],c);
      printf("Move car %d  from input to holding track %d\n" ,c, BestTrack);
      //必要时修改minH 和minS
      if (c<*minH) {
        *minH = c; 
        *minS = BestTrack; 
      }
      return 1;
}
void Output(int* minH, int* minS, SeqStack H[ ], int k, int n)
{ //把车厢从缓冲铁轨送至出轨处,同时修改m i n S和m i n H
  int c,i; // 车厢索引
  // 从堆栈m i n S中删除编号最小的车厢minH
  c=Pop(&H[*minS]) ;
  printf("Move car %d from holding track %d to output\n",*minH,*minS);
  // 通过检查所有的栈顶,搜索新的m i n H和m i n S
  *minH=n+2;
  for (i = 1; i <= k; i++)
    if (!IsEmpty(&H[i]) && (c=Top(&H[i])) < *minH) {
      *minH = c;
      *minS = i;
    }
}
int Railroad(int p[], int n, int k)
{// k个缓冲铁轨,车厢初始排序为p [1:n]
  // 如果重排成功,返回1,否则返回0
  // 如果内存不足,则引发异常NoMem 。
  //创建与缓冲铁轨对应的堆栈
  SeqStack *H;
  int NowOut = 1; //下一次要输出的车厢
  int minH =n+1; //缓冲铁轨中编号最小的车厢
  int minS,i; //minH号车厢对应的缓冲铁轨
  H=(SeqStack*)calloc((k+1),sizeof(SeqStack)*(k+1));
  //车厢重排
  for (i = 1; i<= n; i++)
    if (p[i] == NowOut) {// 直接输出t
      printf("移动车厢%d从出口到入口",p[i]);
      NowOut++;
      //从缓冲铁轨中输出
      while (minH == NowOut) {
        Output(&minH, &minS, H, k, n);
        NowOut++;
      }
    }
    else {// 将p[i] 送入某个缓冲铁轨
      if (!Hold(p[i], &minH, &minS, H, k, n))
        return 0;
    }
    return 1;
}
void main(void)
{
  int p[8]={2,4,1,6,5,3,8,7};
  Railroad(p,8,4);
}
相关文章
|
Ubuntu Docker 容器
如何在Ubuntu上安装Docker?
【2月更文挑战第10天】
1074 0
|
4月前
|
数据采集 运维 DataWorks
DataWorks 千万级任务调度与全链路集成开发治理赋能智能驾驶技术突破
智能驾驶数据预处理面临数据孤岛、任务爆炸与开发运维一体化三大挑战。DataWorks提供一站式的解决方案,支持千万级任务调度、多源数据集成及全链路数据开发,助力智能驾驶模型数据处理与模型训练高效落地。
|
4月前
|
人工智能 运维 数据挖掘
瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
阿里云瑶池数据库重磅推出“Data+AI能力家族”,包括DTS AI数据准备、Data Agent系列智能体及DMS MCP统一数据访问服务,重构数据与AI协同边界。通过智能化工具链,覆盖数据全生命周期,提升企业数据开发、分析、治理与运维效率,降低技术门槛,激活数据资产价值,助力企业迈向全栈智能新时代。
|
4月前
|
人工智能 Cloud Native 数据管理
海外上新|阿里云瑶池全新发布AI数据准备能力,显著降低AI开发门槛
2025阿里云国际峰会在新加坡举行,宣布设立首个AI全球能力中心,并推出多款云与AI产品,加速技术国际化。会上展示瑶池数据库全面升级,集成Data+AI能力,助力企业智能转型。
|
4月前
|
消息中间件 人工智能 监控
【云故事探索】NO.15:阿里云云原生加速鸣鸣很忙数字化
鸣鸣很忙集团作为中国最大休闲食品饮料连锁零售商,通过数字化与云原生技术实现快速扩张,4年完成其他企业10年的数字化进程。其采用阿里云全栈云原生方案,实现弹性扩容、智能补货、模块化开店等创新实践,支撑日均超430万交易数据稳定运行。未来将深化AI应用,推动供应链智能化与业务全面升级。
|
8月前
|
弹性计算 运维 Cloud Native
认证故事|阿里云新版ACE全球第一人考试经历回顾
认证故事|阿里云新版ACE全球第一人考试经历回顾
|
8月前
|
存储 弹性计算 容灾
阿里云基础设施高可用最佳实践沙龙北京站圆满举办!
2025年3月19日,阿里云在北京举办高可用最佳实践沙龙,探讨云端业务连续性与架构设计。活动涵盖数据备份、故障切换、多活架构等主题,结合电商、金融等行业案例,分享高可用建设经验。专家强调,高可用不仅是技术命题,更是业务战略,助力企业实现“永不宕机”目标。系列沙龙将持续全国落地,推动企业云上容灾体系建设。
阿里云基础设施高可用最佳实践沙龙北京站圆满举办!
|
安全 物联网 物联网安全
物联网安全风险分析
### 物联网安全概览 #### 背景 物联网设备因其默认安全设置薄弱,成为黑客攻击目标。随着OT网络中物联网角色增多,这些设备临近关键系统,攻击者利用其发起攻击。 #### 物联网定义 物联网(IoT)是通过信息传感设备连接物品与互联网,实现智能化识别、定位、跟踪的网络。涵盖智能家居、可穿戴设备到复杂工业系统。 #### 攻击者偏好 物联网设备易受攻击,2022年针对物联网的网络攻击大幅增长,如DDoS攻击和恶意软件事件。物联网端点的安全疏忽使其成为恶意软件传播途径。 #### 制造业面临风险 制造业因物联网设备被攻击,导致勒索软件攻击增加,因生产中断造成的损失更大。
物联网安全风险分析
|
8月前
|
人工智能 智能设计 安全
2024云栖大会《设计的未来&未来的设计》全记录
2024云栖大会《设计的未来&未来的设计》全记录