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 解题(链表法)相关推荐

  1. 开放寻址法VS链表法

    开放寻址法 只用数组一种数据结构存储,继承了数组的优点,对CPU缓冲友好,易于序列化.但是对内存的利⽤率并不如链表法,且冲突的代价更高.当数据量⽐较⼩.装载因⼦⼩的时候,适合采⽤开放寻址法.这也是Ja ...

  2. [ZJOI2007]报表统计(链表法+set)

    problem 洛谷链接 solution 纯纯不理解要搬用平衡树的那些做法,使我们可可爱爱的链表不香不好写吗?? 众所周知,链表法是可以进行删除和增加的,只需要维护每个点的前驱和后继. 相邻两个的差 ...

  3. pytorch统计矩阵非0的个数_矩阵的三种存储方式---三元组法 行逻辑链接法 十字链表法...

    在介绍矩阵的压缩存储前,我们需要明确一个概念:对于特殊矩阵,比如对称矩阵,稀疏矩阵,上(下)三角矩阵,在数据结构中相同的数据元素只存储一个. @[TOC] 三元组顺序表 稀疏矩阵由于其自身的稀疏特性, ...

  4. 数据结构之图的存储结构:十字链表法

    图的存储结构:十字链表法 思维导图: 产生条件: 十字链表法的定义: 十字链表法的代码定义: 性能分析: 思维导图: 产生条件: 当用邻接矩阵存储时:空间复杂度为O(|v|^2),太大 当用邻接表法存 ...

  5. 操作系统之文件系统:4、文件存储空间管理(空闲表法、空闲链表法、位示图法、成组链接法)

    4.文件存储空间管理 思维导图 文件的初始化和划分 文件存储空间管理方法 1.存储空间管理--空闲表法 2.存储空间管理--空闲链表法 3.存储空间管理--位示图法 4.存储空间管理--成组链接法 思 ...

  6. 重排链表-c语言链表法解决

    重排链表-c语言链表法解决 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → - → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → L ...

  7. 散列表(离散链表法)

    散列表(离散链表法) 1.相关介绍 散列表也叫哈希表,英文名字Hash Table,有具体的哈希函数,将值映射到具体的表下标中.这样查找起来就十分方便. 散列表的注意点: (1)散列函数要具有一致性, ...

  8. POJ 1002 解题分析

    Technorati 标签: ACM,POJ 题目描述 题目链接 POJ 1002 487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Sub ...

  9. POJ 1003 解题报告

    1.问题描述: http://poj.org/problem?id=1003 2.解题思路: 最直观的的想法是看能不能够直接求出一个通项式,然后直接算就好了, 但是这样好水的样子,而且也不知道这个通项 ...

最新文章

  1. CSS选择器(转载)
  2. java鼠标监听事件_JAVA 鼠标事件监听ACTIONLISTENER
  3. 国内常见的电子地图坐标介绍
  4. MongoDB Shell和Robo3T使用以及与SQL语法比较
  5. Android 自定义下拉刷新
  6. iPhone至少还要三年才能使用苹果自研5G调制解调器
  7. P1640 [SCOI2010]连续攻击游戏
  8. VTK(二)vs2010第一个VTK程序。
  9. 用Hexo制作自己的静态博客
  10. 管理手记:和上司相处不要太“学生气”
  11. 一首关于桃花与桃花仙的故事
  12. 小米手机混淆升级崩溃记录与解决
  13. linux下的go富集分析,GO富集分析示例【华为云技术分享】
  14. 【Android Broadcast】BroadcastReceiver
  15. STM32中断优先级、FreeRTOS中断优先级,任务优先级
  16. Born-Again Neural Networks论文初读
  17. icloud邮箱添加发件服务器地址,怎么设置iCloud电子邮件地址别名 怎么在iPhone上管理电子邮箱...
  18. 百度EasyDL试用示例
  19. 51单片机汇编学习例程(16)——AT24C02篇
  20. 幼儿园计算机游戏,幼儿园游戏活动教案10篇

热门文章

  1. 交通警察手势信号(动画演示)
  2. Linux设备驱动模型2——总线式设备驱动组织方式
  3. NFS方式挂载rootfs的设置方法
  4. 执行jar包,输出信息到文件
  5. shell 替换字符串的几种方法,变量替换${},sed,awk
  6. poj 2096 , zoj 3329 , hdu 4035 —— 期望DP
  7. iOS: 属性声明strong和retain竟然不一样
  8. 1006实验一实验报告
  9. 截取AVI格式的视频C语言代码
  10. socket-select函数