- 论坛徽章:
- 0
|
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#define stksize 5
typedef struct stkode
{
int num;
long tm;
}snode;
typedef struct stk
{
snode *s;
int top;
}stack;
typedef struct quenode
{
int num;
long tm;
struct quenode *next;
}qnode;
typedef struct qu
{
qnode *front;
qnode *rear;
}queue;
void initstack(stack *st)
{
st->s=(snode*)malloc(stksize*sizeof(snode));
//if(!st->s) exit(OVERFLOW);
st->top=-1;
}
int sfull(stack st)
{
if(st.top==stksize-1) return 1;
else return 0;
}
int sempty(stack st)
{
if(st.top==-1) return 1;
else return 0;
}
int push(stack st,snode e)
{
st.top++;
st.s[st.top].num=e.num;
st.s[st.top].tm=e.tm;
return 1;
}
int pop(stack *st,snode *e)
{
e->num=st->s[st->top].num;
e->tm=st->s[st->top].tm;
st->top--;
return 1;
}
void initqueue(queue *q)
{
q->front=q->rear=(qnode*)malloc(sizeof(qnode));
//if(!q->front) exit (OVERFLOW);
q->front->next=NULL;
}
int qempty(queue q)
{
if(q.front==q.rear) return 1;
else return 0;
}
void ing(queue q,snode e)
{
qnode *s;
s->num=e.num;
s->tm=e.tm;
q.rear->next=s;
s->next=NULL;
q.rear=s;
}
void deq(queue *q,qnode *e)
{
e->num=q->front->num;
e->tm=q->front->tm;
q->front=q->front->next;
}
int sfound(stack st,snode e)
{
int i,cnt;
cnt=st.top;
for(i=cnt;i>=0;i--)
{
if(st.s.num==e.num)
{
break;
}
}
return i;
}
int qfound(queue q,qnode e)
{
int i=0;
qnode *a,*b;
a=q.front;b=q.rear;
while(a!=b)
{
if(a->num==e.num)
{
i=1;
break;
}
}
return i;
}
int main()
{
stack s1,s2;
snode e,e1;
queue q;
qnode q1;
int num;
double t1,t2;
char ad;
initstack(&s1);
initqueue(&q);
initstack(&s2);
long biostime(int cmd,long newtime);
while(1)
{
printf("enter A or D or E('E' is quit):");
ad=getche();
if(ad=='E') break;
if(ad=='A')
{
int a,b;
printf("enter num:");
scanf("%d",&num);
t1=biostime(0,0)/18.2;
e.num=num;
//e.tm=t1;
a=sfound(s1,e);b=qfound(q,q1);
if(a<0&&b==0)
{
if(sfull(s1)==0)
{
push(s1,e);
printf("num: %d is NO:%d in park\n",num,s1.top);
}
else
{
ing(q,e);
printf("num: %d is NO:%d int shortcut\n",num,q.rear-q.front);
}
}
else printf("The car is exist\n");
}
if(ad=='D')
{
printf("enter num:");
scanf("%d",&num);
e.num=num;
if(sfound(s1,e)<0)
{
printf("The car is not found\n");
}
else
{
int i;
i=sfound(s1,e);
for(int j=s1.top;j>i;j--)
{
e1.num=s1.s[j].num;
pop(&s1,&e1);
push(s2,e1);
}
t2=biostime(0,0)/18.2;
pop(&s1,&s1.s[s1.top]);
for(int p=s2.top;p>=0;p--)
{
push(s1,s2.s[p]);
pop(&s2,&s2.s[p]);
}
if(qempty(q)!=1)
{
e.num=q.front->num;
q1.num=q.front->num;
push(s1,e);
deq(&q,&q1);
}
printf("The car %lf(s) and $%lf is needed\n",t2-t1,(t2-t1)*0.2);
}
}
}
return 0;
}
这个序在biostime方面有点问题,我不知道怎么用? |
|