生活随笔
收集整理的這篇文章主要介紹了
数据结构实验之栈与队列十一:refresh的停车场
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
refresh最近發了一筆橫財,開了一家停車場。由于土地有限,停車場內停車數量有限,但是要求進停車場的車輛過多。當停車場滿時,要進入的車輛會進入便道等待,最先進入便道的車輛會優先
進入停車場,而且停車場的結構要求只出去的車輛必須是停車場中最后進去的車輛。現告訴你停車場容量N以及命令數M,以及一些命令(Add num 表示車牌號為num的車輛要進入停車場或便道,
Del 表示停車場中出去了一輛車,Out 表示便道最前面的車輛不再等待,放棄進入停車場)。假設便道內的車輛不超過1000000.
Input
輸入為多組數據,每組數據首先輸入N和M(0< n,m <200000),接下來輸入M條命令。
Output
輸入結束后,如果出現停車場內無車輛而出現Del或者便道內無車輛而出現Out,則輸出Error,否則輸出停車場內的車輛,最后進入的最先輸出,無車輛不輸出。
Sample
Input
2 6
Add 18353364208
Add 18353365550
Add 18353365558
Add 18353365559
Del
Out
Output
18353365558
18353364208
#include<bits/stdc++.h>using namespace std
;#define intsize 10000
#define addsize 10000
typedef long long int selemtype
;
typedef long long int qelemtype
;typedef struct
{selemtype
*base
;selemtype
*top
;int stacksize
;
} Sqstack
;typedef struct Queue
{qelemtype data
;struct Queue
*next
;
} Queue
, *queueptr
;typedef struct
{queueptr fron
;queueptr rear
;
} linkqueue
;int initstack(Sqstack
&s
, int n
)
{s
.base
= (selemtype
*)malloc(n
* sizeof(selemtype
));if(!s
.base
)return -1;s
.top
= s
.base
;return 1;
}int push(Sqstack
&s
, selemtype e
)
{if(s
.top
- s
.base
>= s
.stacksize
){s
.base
= (selemtype
*)realloc(s
.base
, (s
.stacksize
+ addsize
) * sizeof(selemtype
));if(!s
.base
)return -1;s
.top
= s
.base
+ s
.stacksize
;s
.stacksize
+= addsize
;}*s
.top
++ = e
;return 1;
}
int pop(Sqstack
&s
, selemtype
&e
)
{if(s
.base
== s
.top
)return 0;e
= *--s
.top
;return 1;
}
int isempty(Sqstack s
)
{if(s
.base
== s
.top
)return 1;elsereturn 0;
}int initqueue(linkqueue
&q
)
{q
.fron
= q
.rear
= new Queue
;if(!q
.fron
)return -1;q
.fron
->next
= NULL;return 1;
}
int enqueue(linkqueue
&q
, qelemtype e
)
{queueptr p
= new Queue
;if(!p
)return -1;p
->data
= e
;p
->next
= NULL;q
.rear
->next
= p
;q
.rear
= p
;return 1;
}
int dequeue(linkqueue
&q
, qelemtype
&e
)
{if(q
.fron
== q
.rear
)return 0;queueptr p
= q
.fron
->next
;e
= p
->data
;q
.fron
->next
= p
->next
;if(q
.rear
== p
)q
.rear
= q
.fron
;free(p
);return 1;
}
int qempty(linkqueue q
)
{if(q
.rear
== q
.fron
)return 1;elsereturn 0;
}
int main()
{int m
, n
;while(~scanf("%d%d", &n
, &m
)){Sqstack s
;initstack(s
, n
);linkqueue q
;initqueue(q
);int flag
= 0;selemtype e
;char c
[10];long long int num
;while(m
--){scanf("%s", c
);if(strcmp(c
, "Add") == 0){scanf("%lld" ,&num
);if(s
.top
- s
.base
< n
){push(s
, num
);}else{enqueue(q
, num
);}} else if(strcmp(c
, "Del") == 0){if(isempty(s
)){flag
= 1;}else{pop(s
, e
);if(!qempty(q
)){qelemtype temp
;dequeue(q
, temp
);push(s
, temp
);}}} else if(strcmp(c
, "Out") == 0){if(qempty(q
)){flag
= 1;}qelemtype temp
;dequeue(q
, temp
);}}if(flag
)printf("Error\n");else{while(!isempty(s
)){pop(s
, e
);printf("%lld\n", e
);}}}
}
總結
以上是生活随笔為你收集整理的数据结构实验之栈与队列十一:refresh的停车场的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。