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 解题(链表法)相关推荐
- 开放寻址法VS链表法
开放寻址法 只用数组一种数据结构存储,继承了数组的优点,对CPU缓冲友好,易于序列化.但是对内存的利⽤率并不如链表法,且冲突的代价更高.当数据量⽐较⼩.装载因⼦⼩的时候,适合采⽤开放寻址法.这也是Ja ...
- [ZJOI2007]报表统计(链表法+set)
problem 洛谷链接 solution 纯纯不理解要搬用平衡树的那些做法,使我们可可爱爱的链表不香不好写吗?? 众所周知,链表法是可以进行删除和增加的,只需要维护每个点的前驱和后继. 相邻两个的差 ...
- pytorch统计矩阵非0的个数_矩阵的三种存储方式---三元组法 行逻辑链接法 十字链表法...
在介绍矩阵的压缩存储前,我们需要明确一个概念:对于特殊矩阵,比如对称矩阵,稀疏矩阵,上(下)三角矩阵,在数据结构中相同的数据元素只存储一个. @[TOC] 三元组顺序表 稀疏矩阵由于其自身的稀疏特性, ...
- 数据结构之图的存储结构:十字链表法
图的存储结构:十字链表法 思维导图: 产生条件: 十字链表法的定义: 十字链表法的代码定义: 性能分析: 思维导图: 产生条件: 当用邻接矩阵存储时:空间复杂度为O(|v|^2),太大 当用邻接表法存 ...
- 操作系统之文件系统:4、文件存储空间管理(空闲表法、空闲链表法、位示图法、成组链接法)
4.文件存储空间管理 思维导图 文件的初始化和划分 文件存储空间管理方法 1.存储空间管理--空闲表法 2.存储空间管理--空闲链表法 3.存储空间管理--位示图法 4.存储空间管理--成组链接法 思 ...
- 重排链表-c语言链表法解决
重排链表-c语言链表法解决 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → - → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → L ...
- 散列表(离散链表法)
散列表(离散链表法) 1.相关介绍 散列表也叫哈希表,英文名字Hash Table,有具体的哈希函数,将值映射到具体的表下标中.这样查找起来就十分方便. 散列表的注意点: (1)散列函数要具有一致性, ...
- POJ 1002 解题分析
Technorati 标签: ACM,POJ 题目描述 题目链接 POJ 1002 487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Sub ...
- POJ 1003 解题报告
1.问题描述: http://poj.org/problem?id=1003 2.解题思路: 最直观的的想法是看能不能够直接求出一个通项式,然后直接算就好了, 但是这样好水的样子,而且也不知道这个通项 ...
最新文章
- CSS选择器(转载)
- java鼠标监听事件_JAVA 鼠标事件监听ACTIONLISTENER
- 国内常见的电子地图坐标介绍
- MongoDB Shell和Robo3T使用以及与SQL语法比较
- Android 自定义下拉刷新
- iPhone至少还要三年才能使用苹果自研5G调制解调器
- P1640 [SCOI2010]连续攻击游戏
- VTK(二)vs2010第一个VTK程序。
- 用Hexo制作自己的静态博客
- 管理手记:和上司相处不要太“学生气”
- 一首关于桃花与桃花仙的故事
- 小米手机混淆升级崩溃记录与解决
- linux下的go富集分析,GO富集分析示例【华为云技术分享】
- 【Android Broadcast】BroadcastReceiver
- STM32中断优先级、FreeRTOS中断优先级,任务优先级
- Born-Again Neural Networks论文初读
- icloud邮箱添加发件服务器地址,怎么设置iCloud电子邮件地址别名 怎么在iPhone上管理电子邮箱...
- 百度EasyDL试用示例
- 51单片机汇编学习例程(16)——AT24C02篇
- 幼儿园计算机游戏,幼儿园游戏活动教案10篇