读书人

停车场管理代码(帮忙加个注释!)解决

发布时间: 2012-04-09 13:41:25 作者: rapoo

停车场管理代码(帮忙加个注释!)
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define SMAX 2 /*车库容量*/
#define QMAX 10 /*每辆车每时刻的费用*/

typedef struct{
char ad;
int num;
int time;
} ElemType; /*元素类型*/

typedef struct{
ElemType *data;
int top;
} SeqStack; /*顺序栈类型*/

typedef struct{
ElemType *data;
int front,rear;
} SeqQueue; /*顺序队类型*/

typedef struct node{
ElemType data;
struct node *link;
} NodeQueue; /*链队结点类型*/

typedef struct{
NodeQueue *front,*rear;
} LinkQueue; /*链队类型*/

void InitStack(SeqStack *S) /*初始化栈*/
{
S->data=(ElemType*)malloc(SMAX*sizeof(ElemType));
S->top=-1;
}

int SEmpty(SeqStack *S)
{
if(S->top==-1) return 1;
else return 0;
}

int SFull(SeqStack *S)
{
if(S->top==SMAX-1) return 1;
else return 0;
}

int Push(SeqStack *S,ElemType e)
{
if(S->top==SMAX-1) return 0;
S->data[++S->top]=e;
return 1;
}

int Pop(SeqStack *S,ElemType *e)
{
if(S->top==-1) return 0;
*e=S->data[S->top--];
return 1;
}

void InitQueue(SeqQueue *Q)
{
Q->data=(ElemType*)malloc(QMAX*sizeof(ElemType));
Q->front=Q->rear=0;
}

int QEmpty(SeqQueue *Q)
{
if(Q->front==Q->rear) return 1;
else return 0;
}

int EnQueue(SeqQueue *Q,ElemType e)
{
if((Q->rear+1)%QMAX==Q->front) return 0;
Q->data[Q->rear]=e;
Q->rear=(Q->rear+1)%QMAX;
return 1;
}

int DeQueue(SeqQueue *Q,ElemType *e)
{
if(Q->front==Q->rear) return 0;
*e=Q->data[Q->front];
Q->front=(Q->front+1)%QMAX;
return 1;
}

void InitLQueue(LinkQueue *Q) /*初始化便道*/
{
Q->front=Q->rear=NULL;
}

int LQEmpty(LinkQueue *Q)
{
if(Q->front==NULL) return 1;
return 0;
}

int EnLQueue(LinkQueue *Q,ElemType e)
{
NodeQueue *p;
p=(NodeQueue*)malloc(sizeof(NodeQueue));
if(p==NULL) return 0;
p->data=e;
p->link=NULL;
if(Q->front==NULL)
{
Q->front=Q->rear=p;
}
else
{
Q->rear->link=p;
Q->rear=p;
}
return 1;
}

int DeLQueue(LinkQueue *Q,ElemType *e)
{
NodeQueue *p;
if(Q->front==NULL) return 0;
p=Q->front;
Q->front=p->link;
*e=p->data;
free(p);
return 1;
}

void main()
{
SeqStack ST,temp;
LinkQueue Q;
NodeQueue *p,*q;
ElemType x,y;

InitStack(&ST);InitStack(&temp);
InitLQueue(&Q);

scanf("%c %d %d",&x.ad,&x.num,&x.time);
while(x.ad=='A'||x.ad=='D')
{
printf("%c %d %d\n",x.ad,x.num,x.time);
if(x.ad=='A')
{
if(!SFull(&ST))
{
Push(&ST,x);
printf("Arrive in the park:%d\n",ST.top);


}
else
{
EnLQueue(&Q,x);
printf("Arrive in the roadedge:\n");
}
}
else
{
while(!SEmpty(&ST)&&ST.data[ST.top].num!=x.num)
{
Pop(&ST,&y);
Push(&temp,y);
}
if(!SEmpty(&ST))
{
Pop(&ST,&y);
printf("Stop time:%d\n",x.time-y.time);
while(!SEmpty(&temp))
{
Pop(&temp,&y);
Push(&ST,y);
}
}
else
{
if(!LQEmpty(&Q))
{
p=Q.front;
while(p->data.num!=x.num)
{
q=p;
p=p->link;
}
if(p==Q.front)
{
Q.front=p->link;
}
else
{
q->link=p->link;
}
free(p);
}
}
}
scanf("%*c%c %d %d",&x.ad,&x.num,&x.time);
}
}


[解决办法]

C/C++ code
int SEmpty(SeqStack *S)/*判断栈是否为空*/    {  if(S->top==-1) return 1;  else return 0;}int SFull(SeqStack *S)/*判断栈是否已满*/   {  if(S->top==SMAX-1) return 1;  else return 0;}int Push(SeqStack *S,ElemType e) /*进栈*/{  if(S->top==SMAX-1) return 0;  S->data[++S->top]=e;  return 1;}int Pop(SeqStack *S,ElemType *e) /*出栈*/{  if(S->top==-1) return 0;  *e=S->data[S->top--];  return 1;}void InitQueue(SeqQueue *Q)/*初始化队列*/{  Q->data=(ElemType*)malloc(QMAX*sizeof(ElemType));  Q->front=Q->rear=0;}int QEmpty(SeqQueue *Q)/*判断队列是否为空*/  {  if(Q->front==Q->rear) return 1;  else return 0;}int EnQueue(SeqQueue *Q,ElemType e)/*判断队列是否已满*/  {  if((Q->rear+1)%QMAX==Q->front) return 0;  Q->data[Q->rear]=e;  Q->rear=(Q->rear+1)%QMAX;  return 1;}int DeQueue(SeqQueue *Q,ElemType *e)/*删除队列中的元素*/  {  if(Q->front==Q->rear) return 0;  *e=Q->data[Q->front];  Q->front=(Q->front+1)%QMAX;  return 1;}void InitLQueue(LinkQueue *Q) /*初始化便道*/{  Q->front=Q->rear=NULL;}int LQEmpty(LinkQueue *Q)/*判断便道是否为空*/{  if(Q->front==NULL) return 1;  return 0;}int EnLQueue(LinkQueue *Q,ElemType e)/*增加便道中的元素*/{  NodeQueue *p;  p=(NodeQueue*)malloc(sizeof(NodeQueue));  if(p==NULL) return 0;  p->data=e;  p->link=NULL;  if(Q->front==NULL)  {  Q->front=Q->rear=p;  }  else  {  Q->rear->link=p;  Q->rear=p;  }  return 1;}int DeLQueue(LinkQueue *Q,ElemType *e)/*删除便道中的元素*/{  NodeQueue *p;  if(Q->front==NULL) return 0;  p=Q->front;  Q->front=p->link;  *e=p->data;  free(p);  return 1;}
[解决办法]
能看出来干啥就可以了

读书人网 >C语言

热点推荐