华为机试时第三题由于自己构造链表时间过长,未能按时完成,回去之后弄了出来,如有更为简洁的方法,欢迎大家指教
来源:互联网 发布:软件操作手册模板 编辑:程序博客网 时间:2024/06/04 08:11
#include<stdlib.h>#include<stdio.h>#include<string.h>#define MAX 100struct Timer{int ID;int time;int status;};struct node{struct Timer timer;struct node * next;};struct List{struct node * head;struct node * rear;};void Init(struct List * plist){plist->head = plist->rear = NULL;}struct node * searchtimer(struct List * plist,int id){if(plist->head == NULL)return NULL;struct node * sech = plist->head;while(sech->timer.ID != id && sech->next != NULL)sech = sech->next;if(sech->timer.ID == id)return sech;if(sech->next == NULL)return NULL;}void starttimer(struct List * plist,int ID,int time){struct node * cur;if(plist->head == NULL)//条件成立表示计时器链表中无任何计时器,新建计时器节点{cur = (struct node *)malloc(sizeof(struct node));cur->next = NULL;cur->timer.ID = ID;cur->timer.status = 1;cur->timer.time = time;plist->head = plist->rear = cur;return;}else//计时器链表中存在计时器,需要判断start的计时器是否是被停止的计时器,是的话无需添加,否则新建计时器{struct node * pcur;if((pcur = searchtimer(plist,ID)) == NULL)//条件成立表示没找到既有节点,故要新建计时器节点{cur = (struct node *)malloc(sizeof(struct node));cur->next = NULL;cur->timer.ID = ID;cur->timer.status = 1;cur->timer.time = time;plist->rear->next = cur;plist->rear = cur;return;}else//无需新建节点,将既有计时器的status项置1{pcur->timer.status = 1;return;}}}void stoptimer(struct List * plist,int id){struct node * pcur;if((pcur = searchtimer(plist,id)) == NULL)//没找到符合ID要求的计时器,无效命令return;elsepcur->timer.status = 0;//时间启动有效位置0}void elapse(struct List * plist,int time){if(plist->head == NULL)return;struct node * cur = plist->head;while(cur->next != NULL){if(cur->timer.status == 1){cur->timer.time -= time;if(cur->timer.time < 0)cur->timer.time = 0;}cur = cur->next;}//处理最后一个计时器if(cur->timer.status == 1){cur->timer.time -= time;if(cur->timer.time < 0)cur->timer.time = 0;}}void print(struct List * plist){if(plist->head == NULL)return;struct node * cur = plist->head;while(cur->next != NULL){if(cur->timer.time > 0)printf("timer:%d,%d\n",cur->timer.ID,cur->timer.time);cur = cur->next;}//last nodeif(cur->timer.time > 0)printf("timer:%d,%d\n",cur->timer.ID,cur->timer.time);}int main(){char command[MAX];char * str;char com1[MAX];int com2;int com3;struct List list;Init(&list);while(gets(command) != NULL){str = command;if(strcmp(command,"end") == 0)//end命令结束循环读取命令操作,输出结果break;if(strchr(command,',') != NULL)//条件成立表示是starttimer命令 starttimer:1,1000{while(*str != ':')str++;*str = ' ';//处理掉':',命令变成 starttimer 1,1000while(*str != ',')str++;*str = ' ';//处理掉',',命令变成 starttimer 1 1000sscanf(command,"%s%d%d",com1,&com2,&com3);starttimer(&list,com2,com3);}else//可能是stoptimer::1命令或elapse:1000{while(*str != ':')str++;if(*str == ':' && *(str+1) == ':')//条件成立则表示有双冒号,为stoptimer::1命令 {*str = *(str + 1) = ' ';//stoptimer 1sscanf(command,"%s%d",com1,&com2);stoptimer(&list,com2);}else//为elapse:1000命令{*str = ' ';//elapse 1000sscanf(command,"%s%d",com1,&com2);elapse(&list,com2);}}}print(&list);return 0;}
<img src="http://img.blog.csdn.net/20140911211044843?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWmJ0cmlr/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
对于stoptimer命令可能不同的人有不同的理解,我的理解是被stop的计时器还是可以被重新start的,但新的starttimer命令所带的时间数据不能覆盖旧有的时间数据。
0 0
- 华为机试时第三题由于自己构造链表时间过长,未能按时完成,回去之后弄了出来,如有更为简洁的方法,欢迎大家指教
- SNS算法比赛--搞错时间了,没交上就贴出来玩玩,希望大家指教
- POI合并单元格边框显示问题,笨方法解决。如有更好的方法,欢迎留言,求指教告知
- 搬家了,欢迎大家有时间访问我的新博客 www.wuqiang-ns.cn
- 欢迎大家指教
- select有默认selected之后回去不到正确的值
- 开通自己的技术博客了,欢迎大家前来指正
- 我们公司接到了一个比较大的IT软件项目,由于项目时间紧急,我们想采用有非常手段、非常方法,不自己进行全部的开发工作。
- 今天去面试某公司的.net笔试题(答案自己做的,大家多指教)
- 蛙蛙推荐:我自己刚刚填写了一下那天的应聘测试题目,大家多多指教
- 自己写的java 2048,请大家指教
- 你是不是在思考这些呢?如有不正确的地方,欢迎大家斧正啊!
- 花了近两个月的时间设计一BLOG系统,准备开放源码,望大家批评指教
- 初来乍到,有啥不对的地方,请大家多多指教
- 最好的医生是自己:把吃出来的病吃回去
- 谢谢了... 大家好 一些C语言的题有时间能帮我做做吗
- 自己写的一个LINGO程序,欢迎指教
- 今天看完了钱能C++继承,最后一题感觉很有意思,顺便编了出来,欢迎大家指点
- UVa11553 - Grid Game
- 《Java程序员面试笔试宝典》终于在万众期待中出版啦~
- 笔记21 异常
- html严格模式和标准模式,怎么触发这两种模式
- java NIO
- 华为机试时第三题由于自己构造链表时间过长,未能按时完成,回去之后弄了出来,如有更为简洁的方法,欢迎大家指教
- 杭电4009 Transfer water(最小树形图)
- ++i 和 i++的输出
- NIO与IO的区别
- 卸载了本地的VMWare 和 centos!
- 积累一些厚度
- TIME_WAIT和CLOSE_WAIT状态区别
- tomcat catalina.out 日志分割
- SAP如何删除或合修改数据库表