poj 1250 解题(链表法)
生活随笔
收集整理的這篇文章主要介紹了
poj 1250 解题(链表法)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://poj.org/problem?id=1250
題意大意
住宿床位有限,按順序入住,用ABC等代表單個(gè)人,第1次出現(xiàn)代表入住,第2次出現(xiàn)代表離開(kāi)
輸入:
1 ABCBCA?
代表有1個(gè)床位,
A入住,
B入住,入住失敗
C入住,入住失敗
B離開(kāi),共1人離開(kāi)(未住店)
C離開(kāi),共2人離開(kāi)(未住店)
A離開(kāi)
計(jì)算有幾個(gè)人來(lái)了沒(méi)床位離開(kāi)了
思路
用2個(gè)鏈表存儲(chǔ)床位上的人,等待隊(duì)列的人
人如果在上述2個(gè)鏈表中就刪除,不在就插入隊(duì)列
代碼
#include <iostream> using namespace std; struct node {char data;node* next;node():data('\0'),next(NULL){}node(char ch):data(ch),next(NULL){}~node(){ } }; struct list {node* p_head;size_t listLength;list():p_head(NULL),listLength(0){}~list(){ eraseAll();}void eraseAll(){if(p_head){node *delnode = p_head, *tempnode = p_head;while(tempnode->next != NULL){tempnode = delnode->next;delete delnode;delnode = tempnode;}listLength = 0;}}void push_front(char &ch){node *tempNode = new node(ch);listLength++;tempNode->next = p_head;p_head = tempNode;}node* find(char& ch){node* temp = p_head;if(p_head){while(temp != NULL && temp->data != ch){temp = temp->next;}} else{temp = NULL;}return temp;}void delNode(char &ch){node* tempnode = p_head, *delnode;delnode = find(ch);if(delnode && delnode != p_head){while(tempnode->next != delnode){tempnode = tempnode->next;}tempnode->next = delnode->next;delete delnode;listLength--;}else{if(delnode == p_head && delnode){p_head = delnode->next;delete delnode;listLength--;}}} };int main() {list beds,waitlist; //床位隊(duì)列,等待隊(duì)列node *tempnode = NULL;size_t numsofbed, walkedaway = 0;char ch;while(cin >> numsofbed && numsofbed) //輸入床位數(shù),且不為0{cin.get(); //拿掉空格while(cin.get(ch) && ch != '\n') //輸入每個(gè)人{(lán)tempnode = beds.find(ch); //去床位隊(duì)列查找人if(tempnode) //找到了這個(gè)人,床位上這個(gè)人離店{beds.delNode(ch);}else //沒(méi)有在床位上找到該人,則該人需要住店{if(beds.listLength < numsofbed) //床位有空余{beds.push_front(ch); //這個(gè)人住下}else //床位滿了{(lán)if(waitlist.find(ch)) //這個(gè)人已經(jīng)在等待隊(duì)列里{waitlist.delNode(ch); //等不了了,離開(kāi)等待隊(duì)列walkedaway++;}else //這個(gè)人不在等待隊(duì)列里,可以等待{waitlist.push_front(ch);}}}}if(walkedaway == 0){cout << "All customers tanned successfully." << endl;}else{cout << walkedaway << " customer(s) walked away." << endl;}beds.eraseAll();waitlist.eraseAll();walkedaway = 0;numsofbed = 0;}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的poj 1250 解题(链表法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring手动回滚事务_Spring总
- 下一篇: LeetCode 807. 保持城市天际