poj 1250 解题(链表法)
生活随笔
收集整理的這篇文章主要介紹了
poj 1250 解题(链表法)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
http://poj.org/problem?id=1250
題意大意
住宿床位有限,按順序入住,用ABC等代表單個人,第1次出現(xiàn)代表入住,第2次出現(xiàn)代表離開
輸入:
1 ABCBCA?
代表有1個床位,
A入住,
B入住,入住失敗
C入住,入住失敗
B離開,共1人離開(未住店)
C離開,共2人離開(未住店)
A離開
計算有幾個人來了沒床位離開了
思路
用2個鏈表存儲床位上的人,等待隊列的人
人如果在上述2個鏈表中就刪除,不在就插入隊列
代碼
#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; //床位隊列,等待隊列node *tempnode = NULL;size_t numsofbed, walkedaway = 0;char ch;while(cin >> numsofbed && numsofbed) //輸入床位數(shù),且不為0{cin.get(); //拿掉空格while(cin.get(ch) && ch != '\n') //輸入每個人{(lán)tempnode = beds.find(ch); //去床位隊列查找人if(tempnode) //找到了這個人,床位上這個人離店{beds.delNode(ch);}else //沒有在床位上找到該人,則該人需要住店{if(beds.listLength < numsofbed) //床位有空余{beds.push_front(ch); //這個人住下}else //床位滿了{(lán)if(waitlist.find(ch)) //這個人已經(jīng)在等待隊列里{waitlist.delNode(ch); //等不了了,離開等待隊列walkedaway++;}else //這個人不在等待隊列里,可以等待{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 解题(链表法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring手动回滚事务_Spring总
- 下一篇: LeetCode 807. 保持城市天际