日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

poj 1250 解题(链表法)

發布時間:2024/7/5 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 1250 解题(链表法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://poj.org/problem?id=1250

題意大意

住宿床位有限,按順序入住,用ABC等代表單個人,第1次出現代表入住,第2次出現代表離開

輸入:
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) //輸入床位數,且不為0{cin.get(); //拿掉空格while(cin.get(ch) && ch != '\n') //輸入每個人{tempnode = beds.find(ch); //去床位隊列查找人if(tempnode) //找到了這個人,床位上這個人離店{beds.delNode(ch);}else //沒有在床位上找到該人,則該人需要住店{if(beds.listLength < numsofbed) //床位有空余{beds.push_front(ch); //這個人住下}else //床位滿了{if(waitlist.find(ch)) //這個人已經在等待隊列里{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; }

?

總結

以上是生活随笔為你收集整理的poj 1250 解题(链表法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。