| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 357 人关注过本帖
标题:火车调度问题
只看楼主 加入收藏
听阳光洒下
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2013-11-10
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:1 
火车调度问题
#define MAXSIZE 100
                      /* 栈、队列的最大容量,设为100 */
#include <stdio.h>
#include <malloc.h>

typedef char datatype;
typedef struct {
   datatype stack[MAXSIZE];    /* 装载栈的向量 */
   int top;          /* 栈顶指针 */
  } seqstack;    /* 顺序栈类型定义*/
typedef struct
 { datatype queue[MAXSIZE];
                        /* MAXSIZE为队列的最大长度 */
   int front;
   int rear;
  } sequeue;     /* 顺序队列类型定义*/
  void setstacknull(seqstack *s )  /* 置空栈 */
 { s->top=-1; }

datatype pop(seqstack *s )   /* 出栈 */
 { if (s->top<0 )
     { printf( "stack empty!\n" );
       return('\0');
      }
   else
     { s->top--;                     /* 产生新栈顶指针 */
       return(s->stack[s->top+1]);   /* 返回原栈顶元素值 */
      }
  }

 int empty(seqstack *s)    /* 判断是否为空栈 */
 {
   if (s->top<0 ) return(1);
   else  return(0);
  }

void push(seqstack *s,datatype x)   /* 入栈 */
  { if ( s->top>=MAXSIZE-1 )        /* 上溢 */
      printf( "stack overflow!\n" );
    else
     { s->top=s->top+1;     /* 1.栈顶指针加1 */
       s->stack[s->top]=x;  /* 2.新元素入栈 */
      }
   }
   void setseqnull(sequeue *sq)   /* 置空队列 */
  {
    sq->front=-1;     sq->rear=-1;
   }

void encyque(sequeue *sq,datatype x)   /* 入队 */
  {
    if((sq->rear+1)%MAXSIZE==sq->front)
       printf( "queue overflow!\n" );
    else
       { sq->rear=(sq->rear+1)%MAXSIZE;
         sq->queue[sq->rear]=x;
        }
   }
datatype delcyque(sequeue *sq)   /* 出队 */
  {
    if(sq->front==sq->rear)
      return(NULL);
    else
      { sq->front=(sq->front+1)%MAXSIZE;
        return(sq->queue[sq->front]);
       }
   }
  void main( )
{
   seqstack *st;
   sequeue *trainsq;
   char ch, trains[MAXSIZE],*p=trains;

   st=(seqstack *)malloc(sizeof(seqstack));
   trainsq=(sequeue *)malloc(sizeof(sequeue));
   setstacknull(st);
   setseqnull(trainsq);
   printf("enter train serious:\n");
gets(trains);
   putchar('\n');
    while (ch=*p ) {
     if (ch=='L')
     { push(st,ch);
           ch=pop(st);
           encyque(trainsq,ch);}
     else
   { push(st,ch);}
   p=p+1;}
 while(!empty(st)) {
    ch=pop(st);
    ch=trains[MAXSIZE];
    printf("rest train serious:\n");
    gets(trains);
    putchar('\n');
     while (ch=*p ) {
     if (ch=='H')  push(st,ch);
     else
     { /* ch=='Q'*/
     push(st,ch);
     ch=pop(st);
     encyque(trainsq,ch);}
    p=p+1;}
    while (!empty(st)) {
     ch=pop(st);
     encyque(trainsq,ch);
    } }
     printf("new train serious:\n");
   while (ch=delcyque(trainsq)) putchar(ch);
   putchar('\n');
}
想达到 输入QHLHQLHLQQLHHQLQH  结果输出LLLLLQQQQQQHHHHHH 这样的效果。
可是不知道为什么这个程序的运行输出的结果 LLLLLQQHHQQHQHHQ.
求指点!
搜索更多相关主题的帖子: include 
2013-11-29 22:38
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
这个主函数,思路不清晰吧

如果只想解决问题,建议百度 三色旗算法


[fly]存在即是合理[/fly]
2013-11-30 18:24
快速回复:火车调度问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027125 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved