1.求用vbnet 实现先进先出即队列得源代码
2.LinkedBlockingQueue
3.python有多少个模块(python常用的模块有哪些?)
4.JDK源码分析-Queue, Deque
5.å¦ä½å¨Androidä¸å®ç°FrameBufferåOverlayçblend
6.Cè¯è¨å车åºç®¡çç³»ç»
求用vbnet 实现先进先出即队列得源代码
VB.Net中的队列类在System.Collections.Generic命名空间中,名字叫Queue,是一个泛型类。
实例化该类:
Dim myQueue As Queue<Int>
myQueue = new Queue<Int>();
然后可以通过Queue中的Enqueue和Dequeue函数进行入队出队操作:
With myQueue
.Enqueue(1)
.Enqueue(2)
.Enqueue(3)
.Enqueue(4)
.Enqueue(5)
End With
For i = 0 To 5 Step 1
Console.WriteLine(myQueue.Dequeue())
Next i
显示结果:
1
2
3
4
5
LinkedBlockingQueue
LinkedBlockingDequeå¨ç»æä¸æå«äºä¹å讲解è¿çé»å¡éåï¼å®ä¸æ¯Queueèæ¯Dequeï¼ä¸æç¿»è¯æå端éåï¼å端éåæå¯ä»¥ä»ä»»æä¸ç«¯å ¥éæè åºéå ç´ çéåï¼å®ç°äºå¨éå头åéåå°¾çé«ææå ¥å移é¤LinkedBlockingDequeæ¯é¾è¡¨å®ç°ç线ç¨å®å ¨çæ ççåæ¶æ¯æFIFOãLIFOçå端é»å¡éåï¼å¯ä»¥å顾ä¸ä¹åçLinkedBlockingQueueé»å¡éåç¹ç¹ï¼æ¬è´¨ä¸æ¯ç±»ä¼¼çï¼ä½æ¯åæäºä¸åï¼
QueueåDequeçå ³ç³»æç¹ç±»ä¼¼äºåé¾è¡¨åååé¾è¡¨ï¼LinkedBlockingQueueåLinkedBlockingDequeçå é¨ç»ç¹å®ç°å°±æ¯åé¾è¡¨åååé¾è¡¨çåºå«ï¼å ·ä½å¯åèæºç ã
å¨ç¬¬äºç¹ä¸å¯è½æäºäººæäºçé®ï¼ä¸¤ä¸ªäºæ¥éåä¸ä¸ªäºæ¥éçåºå«å¨åªéï¼æ们å¯ä»¥èè以ä¸åºæ¯ï¼
A线ç¨å è¿è¡å ¥éæä½ï¼B线ç¨éåè¿è¡åºéæä½ï¼å¦ææ¯LinkedBlockingQueueï¼A线ç¨å ¥éè¿ç¨è¿æªç»æï¼å·²è·å¾éè¿æªéæ¾ï¼ï¼B线ç¨åºéæä½ä¸ä¼è¢«é»å¡çå¾ ï¼éä¸åï¼ï¼å¦ææ¯LinkedBlockingDequeåB线ç¨ä¼è¢«é»å¡çå¾ ï¼åä¸æéï¼A线ç¨å®ææä½æ继ç»æ§è¡
LinkedBlockingQueueä¸è¬çæä½æ¯è·åä¸æéå°±å¯ä»¥ï¼ä½æäºæä½ä¾å¦removeæä½ï¼åéè¦åæ¶è·å两æéï¼ä¹åçLinkedBlockingQueue讲解æ¾ç»è¯´æè¿
LinkedBlockingQueue ç±äºæ¯åé¾è¡¨ç»æï¼åªè½ä¸ç«¯æä½ï¼è¯»åªè½å¨å¤´ï¼ååªè½å¨å°¾ï¼å æ¤ä¸¤æéæçæ´é«ãLinkedBlockingDeque ç±äºæ¯åé¾è¡¨ç»æï¼ä¸¤ç«¯å¤´å°¾é½è½è¯»åï¼å æ¤åªè½ç¨ä¸æéä¿è¯ååæ§ã å½ç¶æçä¹å°±æ´ä½
ArrayBlockingQueue
LinkedBlockingQueue
é®é¢ï¼ä¸ºä»ä¹ArrayBlockingQueue ä¸è½ç¨ä¸¤æé
å 为ååºåï¼ArrayBlockingQueue çå ç´ éè¦åå移å¨ã
LinkedBlockingQueueå é¨ç±åé¾è¡¨å®ç°ï¼åªè½ä»headåå ç´ ï¼ä»tailæ·»å å ç´ ãæ·»å å ç´ åè·åå ç´ é½æç¬ç«çéï¼ä¹å°±æ¯è¯´LinkedBlockingQueueæ¯è¯»åå离çï¼è¯»åæä½å¯ä»¥å¹¶è¡æ§è¡ãLinkedBlockingQueueéç¨å¯éå ¥é(ReentrantLock)æ¥ä¿è¯å¨å¹¶åæ åµä¸ç线ç¨å®å ¨ã
LinkedBlockingQueueä¸å ±æä¸ä¸ªæé å¨ï¼åå«æ¯æ åæé å¨ãå¯ä»¥æå®å®¹éçæé å¨ãå¯ä»¥ç©¿å ¥ä¸ä¸ªå®¹å¨çæé å¨ãå¦æå¨å建å®ä¾çæ¶åè°ç¨çæ¯æ åæé å¨ï¼LinkedBlockingQueueçé»è®¤å®¹éæ¯Integer.MAX_VALUEï¼è¿æ ·åå¾å¯è½ä¼å¯¼è´éåè¿æ²¡æ满ï¼ä½æ¯å åå´å·²ç»æ»¡äºçæ åµï¼å å溢åºï¼ã
size()æ¹æ³ä¼éåæ´ä¸ªéåï¼æ¶é´å¤æ度为O(n),æ以æ好éç¨isEmtpy
1.å¤æå ç´ æ¯å¦ä¸ºnullï¼ä¸ºnullæåºå¼å¸¸
2.å é(å¯ä¸æé)
3.å¤æéåé¿åº¦æ¯å¦å°è¾¾å®¹éï¼å¦æå°è¾¾ä¸ç´çå¾
4.å¦æ没æé满ï¼enqueue()å¨éå°¾å å ¥å ç´
5.éåé¿åº¦å 1ï¼æ¤æ¶å¦æéåè¿æ²¡æ满ï¼è°ç¨signalå¤éå ¶ä»å µå¡éå
1.å é(ä¾æ§æ¯ReentrantLock)ï¼æ³¨æè¿éçéååå ¥æ¯ä¸åç两æé
2.å¤æéåæ¯å¦ä¸ºç©ºï¼å¦æ为空就ä¸ç´çå¾
3.éè¿dequeueæ¹æ³åå¾æ°æ®
3.åèµ°å ç´ åéåæ¯å¦ä¸ºç©ºï¼å¦æä¸ä¸ºç©ºå¤éå ¶ä»çå¾ ä¸çéå
åçï¼å¨éå°¾æå ¥ä¸ä¸ªå ç´ ï¼ å¦æéå没满ï¼ç«å³è¿åtrueï¼ å¦æéå满äºï¼ç«å³è¿åfalseã
åçï¼å¦æ没æå ç´ ï¼ç´æ¥è¿ånullï¼å¦ææå ç´ ï¼åºé
1ãå ·ä½å ¥éä¸åºéçåçå¾ï¼
å¾ä¸æ¯ä¸ä¸ªèç¹ååé¨å表示å°è£ çæ°æ®xï¼åè¾¹ç表示æåçä¸ä¸ä¸ªå¼ç¨ã
1.1ãåå§å
åå§åä¹åï¼åå§åä¸ä¸ªæ°æ®ä¸ºnullï¼ä¸headålastèç¹é½æ¯è¿ä¸ªèç¹ã
1.2ãå ¥é两个å ç´ è¿å
1.3ãåºéä¸ä¸ªå ç´ å
表é¢ä¸çï¼åªæ¯å°å¤´èç¹çnextæéæåäºè¦å é¤çx1.nextï¼äºå®ä¸è¿æ ·æè§çå°±å®å ¨å¯ä»¥ï¼ä½æ¯jdkå®é ä¸æ¯å°åæ¥çheadèç¹å é¤äºï¼èä¸è¾¹çå°çè¿ä¸ªheadèç¹ï¼æ£æ¯åååºéçx1èç¹ï¼åªæ¯å ¶å¼è¢«ç½®ç©ºäºã
2ãä¸ç§å ¥é对æ¯ï¼
3ãä¸ç§åºé对æ¯ï¼
python有多少个模块(python常用的模块有哪些?)
今天给各位分享python有多少个模块的知识,其中也会对python常用的模块有哪些?进行解释,如果能碰巧解决你现在面临的html5源码怎么用问题,别忘了关注本站,现在开始吧!本文目录一览:1、Python开发中常用的模块有哪些2、python目前三方提供的可用编程模块函数库组件规模有多大3、python中都有哪些模块呢4、Python中的模块5、Python模块的flvparser源码几种类型简介Python开发中常用的模块有哪些一、导入模块
importmodule
frommodule.xximportxx
frommodule.xximportxxasrename
frommodule.xximport
*二、开源模块
yum、pip、apt-get
源码编译安装:Pythonsetup.pybuildPythonsetupinstall
三、常用模块
os模块#用作系统级别的工作
sys模块#提供解释器相关操作
hashlib模块#用于加密相关的操作
json和pickle模块#用于序列化数据
subprocess模块
shuit模块#文件的复制移动
logging模块#格式化记录日志
random模块用于取随机数
timedatetime模块时间模块
re模块正则匹配
python目前三方提供的可用编程模块函数库组件规模有多大
C++,Java和Python是竞争性编程的三种最常见的语言。在本文中,我们将从竞争性编程和面试准备的角度重点介绍最重要的Python模块。
list:动态大小的数组,允许在不关心数组大小的情况下进行插入和删除。它还具有普通数组的优点,例如随机访问和缓存友好性。list也可以用作队列和堆栈。zf源码
deque:Dequeue支持在O(1)时间内在两端进行插入和删除。由于它是使用数组实现的,因此它也允许随机访问。我们可以使用dequeue来实现队列和堆栈。关于Deque的示例问题是,访问所有的汽油泵和所有大小为k的子阵列的最大值。
请注意,Python中没有用于队列(Queue)和堆栈(Stack)的模块。我们可以使用列表(list)或双端队列(deque)来实现这些。首选双端队列(deque)实现,尤其是对于队列,因为在列表前面进行插入/删除很慢。
在我们希望具有FIFO项目顺序的源码之前情况下,队列(Queue)很有用。问题示例包括:用给定的数字生成数字,流中的第一个非重复字符,树及其变体的级序遍历,图的BFS及其变体。
set和dict:它们都实现了哈希。当我们有键的集合时,我们使用set。当我们有键值对时,我们使用字典(dictionary)。当我们希望快速搜索、插入和删除时非常有用(这三个操作都是O(1))。这是garray源码业界使用最多的数据结构之一,也是学术界最低估的数据结构之一。常见的问题有:离散元素的计数、数组项的频率、零和子阵、两个未排序数组的并集、交集等。
heapq:默认情况下实现MinHeap。我们也可以创建最小堆。只要我们希望有效地找到最小或最大元素,就使用它。它用于实现流行的算法,例如Prim算法,Dijkstra最短路径,霍夫曼编码,K个最大元素,购买和合并K个排序数组的最大玩具,流的中位数。
sorted:对列表等序列进行排序。基于排序的示例问题包括:合并重叠间隔,所需的最小平台。第K个最小元素,求给定和的三元组。
bisect:用于二进制搜索。基于二进制搜索的示例问题有:查找第一次出现的索引、计数出现次数、峰值元素、两个排序数组的中值。
注意:与C++STL和Java集合(Collections)不同。Python标准库包含自平衡BST的实现。在Python中,我们可以使用bisect模块来保留一组排序后的数据。我们还可以使用PyPi模块,例如rbtree(红黑树的实现)和pyavl(AVL树的实现)。
python中都有哪些模块呢os模块
os.getcwd()#获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")#改变当前脚本工作目录;相当于shell下cd
os.curdir#返回当前目录:('.')
os.pardir#获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')#可生成多层递归目录
os.removedirs('dirname1')#若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')#生成单级目录;相当于shell中mkdirdirname
os.rmdir('dirname')##删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdirdirname
os.listdir('dirname')#列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()#删除一个文件
os.rename("oldname","newname")#重命名文件/目录
os.stat('path/filename')#获取文件/目录信息
os.sep#输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep#输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep#输出用于分割文件路径的字符串win下为;,Linux下为:
os.name#输出字符串指示当前使用平台。win-'nt';Linux-'posix'
os.system("bashcommand")#运行shell命令,直接显示
os.environ#获取系统环境变量
os.path.abspath(path)#返回path规范化的绝对路径
os.path.split(path)#将path分割成目录和文件名二元组返回
os.path.dirname(path)#返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)#
返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)#如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)#如果path是绝对路径,返回True
os.path.isfile(path)#如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)#如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[,path2[,...]])#将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)#返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)#返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path)#返回path的大小
sys模块
sys.argv#命令行参数List,第一个元素是程序本身路径
sys.exit(n)#退出程序,正常退出时exit(0)
sys.version#获取Python解释程序的版本信息
sys.maxint#最大的Int值
sys.path#返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform#返回操作系统平台名称
datetime模块
datetime.today()返回一个表示当前本期日期时间的datetime对象
datetime.now([tz])返回指定时区日期时间的datetime对象,如果不指定tz参数则结果同上
datetime.utcnow()返回当前utc日期时间的datetime对象
datetime.fromtimestamp(timestamp[,tz])根据指定的时间戳创建一个datetime对象
datetime.utcfromtimestamp(timestamp)根据指定的时间戳创建一个datetime对象
datetime.strptime(date_str,format)将时间字符串转换为datetime对象
Python中的模块importos
print(os.name)?#操作系统名称?Windowsnt非Windowsposix
print(os.sep)?#路径分隔符?Windows\?其他/
importos
#使用os.path方法获取文件的路径
#.获取文件的绝对路径使用abspath方法
print(os.path.abspath("_模块导入.py"))
#?运行结果:D:\mypycharm\pythonProject\千峰培训\daymodule1\_模块导入.py
#判断是否是文件False
print(os.path.isdir(""))?
#运行结果:False
#.判断文件是否存在如果存在返回True否则返回False
print(os.path.exists("mydir"))
#True
importos
files="...test.py"
print(files.rpartition(".")[-1])?
print(os.path.splitext(files)[-1])
#运行结果:
#获取文件的后缀名?py
#获取文件的后缀名.py
importos
print(os.getcwd())
#运行结果:
#D:\mypycharm\pythonProject\培训\daymodule1
importos
os.chdir("mydir")
print(os.getcwd())
#D:\mypycharm\pythonProject\培训\daymodule1\mydir
importos
os.rename(".py","../.py")
importos
#.删除文件
os.remove("../.py")
#.删除空文件夹
os.rmdir("../mydir")
os.removedirs("mydir")
importos
os.mkdir("mydir")
importos
#.列出指定目录里所有的子目录和文件
print(os.listdir("D:\mypycharm\pythonProject"))
#.默认当前目录里的子目录和文件
print(os.listdir())
#运行结果:
#['.idea','千峰培训','学校实习']
#['_module.py','_模块导入.py','_os.py','...tests.py','a_module1.py','a_module2.py','__pycache__']
importos
print(os.environ)
print(os.environ["PATH"])
importos
importstring?#字符串模块
importrandom
files="test.jpg"
#?.获取文件的后缀
surffix=os.path.splitext(files)[-1]
#print(surffix)?#.jpg
#.生成所有大小写字母的列表
res=list(string.ascii_letters)
#print(string.ascii_letters)
#运行结果;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
#?.将0-9添加到res中
foriinrange(0,):
res.append(str(i))#.随机生成文件名:
mystr="".join(random.sample(res,))?#?sample随机生成个字符
#print(mystr)
#bJpED6dj2Y
#.将文件名和后缀拼接
print(mystr+surffix)
importsys
print(sys.path)
res=sys.stdin
print(res)
importmath
#print(math.pi)?#3.
print(math.factorial(5))?#
#幂运算第一个参数是底数第二个参数是幂
print(math.pow(2,3))?#8.0
#向上取整和向下取整
print(math.floor(.))?#
print(math.ceil(.))?#
#四舍五入
print(round(.,1))?#.5
#三角函数
print(math.sin(math.pi/6))?#sin(pi/6)0.
print(math.cos(math.pi/3))?#sin(pi/3)0.
print(math.tan(math.pi/4))?#sin(pi/6)0.
#开方
a=9
b=
print(math.sqrt(a+b))?#5.0
#以e为底的指数函数
print(math.exp(a))
#?.
importrandom
#.random()?随机生成[0,1)之间的数?前闭后开
print(random.random())?#生成[0,1)之间的小数
#.randint()生成范围内的随机整数全闭
print(random.randint(,))?#生成[,]之间的整数
#.randrange()生成范围内的随机整数前闭后开
print(random.randrange(,))?#生成[,)之间的整数
#.choice?参数是列表?随机从列表中取一个?取一次
print(random.choice([1,2,3,4,5,6,,8,9]))
#.sample的第一个参数必须是一个可迭代对象
#?第二个参数代表着从可迭代对象从随机选取几个,选取的对象不能重复
print("".join(random.sample(["a","b","c","d"],3)))
importdatetimeasdt#引入datetime模块并将其命别名为dt
importtime
importcalendar?#引入日历模块
#.datetime模块
#.获取当前时间的具体信息
print(dt.datetime.now())?
#运行结果:
#--::.
#年?月日?时分秒?毫秒
#.创建日期
print(dt.date(,1,1))?
#年月日?--
#.创建时间
print(dt.time(,,))
#时分秒:?::
#.timedelta()括号中的默认参数是天
print(dt.datetime.now()+dt.timedelta(3))?#--::.
print(dt.datetime.now()+dt.timedelta(hours=3))?#--::.
print(dt.datetime.now()+dt.timedelta(minutes=))?#--::.
#.time
#.当前时间的时间戳
#时间戳是指从—-:0:0到现在的秒数utc时间也叫格林尼治时间?
print(time.time())
#.按照指定格式输出时间
#print(time.strftime("%Y-%m-%d%H:%M:%S"))?#--::
#时间格式:
#%Y?Yearwithcenturyasadecimalnumber.
#%m?Monthasadecimalnumber[,].
#%d?Dayofthemonthasadecimalnumber[,].
#%H?Hour(-hourclock)asadecimalnumber[,].
#%M?Minuteasadecimalnumber[,].
#%S?Secondasadecimalnumber[,].
#%z?TimezoneoffsetfromUTC.
#%a?Locale'sabbreviatedweekdayname.
#%A?Locale'sfullweekdayname.
#%b?Locale'sabbreviatedmonthname.
#%B?Locale'sfullmonthname.
#%c?Locale'sappropriatedateandtimerepresentation.
#%I?Hour(-hourclock)asadecimalnumber[,].
#%p?Locale'sequivalentofeitherAMorPM.
#.ctime和asctime时间格式?输出的时间格式一样,
#print(time.asctime())?#TueDec::
#print(time.ctime())?#TueDec::
#.sleep()?时间休眠
print("我负责浪")
print(time.sleep(3))
print("你负责漫")
#.calender生成日历
res=calendar.calendar()?#生成年的日历
print(res)
#.判断是否为闰年
print(calendar.isleap())?#True
#.从年到年有多少个闰年
print(calendar.leapdays(,))?#8
Python模块的几种类型简介1、系统内置模块
os模块:os模块包含普遍的操作系统功能
sys模块:提供了一系列有关Python运行环境的变量和函数
random模块:random模块用于生成随机数
time模块:主要包含各种提供日期、时间功能的类和函数
datetime模块:对time模块的一个高级封装
shutil模块:是一种高层次的文件操作工具
logging模块:将日志打印到了标准输出中
re模块:可以直接调用来实现正则匹配
pymysql模块:连接数据库,并实现简单的增删改查
threading模块:提供了更强大的多线程管理方案
queue模块:实现了多生产者,多消费者的队列
json模块:用于字符串和数据类型间进行转换json
2、开源(三方)模块
Requests:最富盛名的e(SeqStack &parking , LQueue *&sidewalk); //æ车å°æ¥æ¶çæä½
void Car_leave(SeqStack &parking , LQueue *&sidewalk); //æ车离å¼çæä½
void Display(SeqStack parking); //æ¾ç¤ºå车åºå çææä¿¡æ¯ è°è¯æ¶ç¨
void InitStack(SeqStack &parking); //åå§åæ
void InitList(LQueue *&sidewalk); //åå§åéå
void In_LQueue(LQueue *&sidewalk , char *license_plate); //è¿éæä½
void Input_Check(char *license_plate); ////æ£éªè¾å ¥ç车çæ¯å¦åæ³
void StackPush(SeqStack &parking , char *license_plate , int stop_time);//è¿æ æä½
void main()
{
//å®ä¹åé
SeqStack parking;
LQueue *sidewalk = NULL;
char *choice = new char;
int flag = 1; //å®ä¹ä¸ä¸ªåé å¤ææ¯å¦éåº
//åå§åä¸ä¸ªä¸ºç©ºçå车åº
InitStack(parking);
//åå§åä¸ä¸ªä¸ºç©ºç便é
InitList(sidewalk);
//è¿è¡çé¢ååè½éæ©
while(flag)
{
cout<<"\n\t å车åºæ¨¡æ管çç³»ç» \n\n";
cout<<"\t|--------------------------------------------------|\n\n";
cout<<"\t|æ¬ç¨åºä¸ºå车åºç模æ管çç³»ç»ï¼æ车å°æ¥æ¶è¯·æCé®ã|\n\n";
cout<<"\t|ç¶åæ ¹æ®å±å¹æ示è¿è¡ç¸å ³æä½ï¼æ车è¦èµ°æ¶è¯·ælé®ã|\n\n";
cout<<"\t|ç¶åæ ¹æ®å±å¹æ示è¿è¡ç¸å ³æä½ï¼æ¥çå车åºè¯·æDé®ã|\n\n";
cout<<"\t|ç¶åæ ¹æ®å±å¹æ示è¿è¡ç¸å ³æä½ï¼è¦éåºç³»ç»è¯·æQé®ã|\n\n";
cout<<"\t|--------------------------------------------------|\n\n";
cout<<"请éæ©æä½ï¼";
gets(choice);
if(1 != strlen(choice))
{
cout<<"请æ£ç¡®è¾å ¥é项!";
continue;
}
else
{
switch(*choice)
{
case 'c':
case 'C':
{
Car_come(parking,sidewalk);break;
}
case 'l':
case 'L':
{
Car_leave(parking,sidewalk);break;
}
case 'q':
case 'Q':
{
flag=0;break;
}
case 'd':
case 'D':
{
Display(parking);break;
}
default:
cout<<"éæ©ä¸æ£ç¡®ï¼è¯·éæ°éæ©ï¼\n";
}
}
}
}
//æ车å°æ¥æ¶çæä½
void Car_come(SeqStack &parking , LQueue *&sidewalk)
{
//å®ä¹åé
char license_plate[MAX_PLATE];
cout<<"请è¾å ¥è½¦è¾ç车çå·ç ï¼";
Input_Check(license_plate);
//å¤æå车åºæ¯å¦å·²æ»¡ï¼æ»¡åè¿å ¥ä¾¿éï¼ä¸æ»¡è¿å ¥å车åº
if(StackFull(parking))
{
In_LQueue(sidewalk , license_plate); //è¿å ¥ä¾¿é
cout<<"å车åºå·²æ»¡è¯·å¨ä¾¿éçå,æ¨çä½ç½®ä¸º"<<QueueLength(sidewalk)
<<endl;
}
else
{
StackPush(parking , license_plate , GetTickCount()); //è¿å ¥å车åº
cout<<"请è¿å ¥å车åºä¸ç"<<parking.top+1<<"å·å车ä½\n";
}
// Display(parking);
}
//æ车离å¼æ¶çæä½
void Car_leave(SeqStack &parking , LQueue *&sidewalk)
{
//å®ä¹åé
SeqStack tmpparking; //å®ä¹ä¸´æ¶å车åº
char leave_license_plate[MAX_PLATE]; //è¦ç¦»å¼ç车çå·
char license_plate[MAX_PLATE]; //åæ¾ä»å车åºä¸è¯»åºæ¥ç车çä¿¡æ¯
int time;
InitStack(tmpparking); //åå§å临æ¶å车åº
//å¤æå车åºä¸æ¯å¦æ车
if(StackEmpty(parking))
{
cout<<"å½åå车åºä¸æ²¡æ车\n";
return; //éåºåå½æ°
}
cout<<"请è¾å ¥è¦ç¦»å¼ç车çç §ï¼";
Input_Check(leave_license_plate);
cout<<"å½åå车åºä¸æ"<<parking.top+1<<"è¾è½¦\n";
if(LeaveCheck(parking , leave_license_plate)) //å¤æ车æ¯å¦å¨å车åºä¸
{
//车å¨å车åºä¸
cout<<"æ¨ç车å¨"<<LeaveCheck(parking , leave_license_plate)<<"å·è½¦ä½ä¸\n";
while(StackTop(parking , license_plate , time)
&& (strcmp(parking.STOP[parking.top].license_plate , leave_license_plate) != 0))
{
strcpy(parking.STOP[parking.top].license_plate , license_plate);
cout<<"çç §ä¸º"<<license_plate<<"ç车ææ¶éåºå车åº"<<parking.top+1<<"å·ä½\n";
StackPush(tmpparking , license_plate , time); //å车åºä¸ç车ææ¶éåº è¿å ¥ä¸´æ¶å车åº
StackPop(parking); //åºæ
}
cout<<"çç §ä¸º"<<license_plate<<"ç车离å¼å车åº"<<parking.top+1<<"å·ä½\n";
cout<<"æ¨å¨å车åºä¸åäº"<<(GetTickCount()-time)/TIME_MS_TO_CONUT<<TIME_COUNT<<endl; //è¾åºæåæ¶é´ä¿¡æ¯
cout<<"åºç¼´è´¹ç¨ä¸º"<<(GetTickCount()-time)/TIME_MS_TO_CONUT*UNIT_PRICE<<"å \n";; //è¾åºè´¹ç¨ä¿¡æ¯
StackPop(parking); //åºæ
//å°ä¸´æ¶å车åºä¸ç车ååå车åº
while(StackEmpty(tmpparking) != 1)
{
StackTop(tmpparking , license_plate , time);
StackPush(parking , license_plate , time);
cout<<"çç §ä¸º"<<license_plate<<"ç车è¿å ¥å车åº"<<parking.top+1<<"å·ä½\n";
license_plate[0] = '\0';
StackPop(tmpparking);
}
if(parking.top+1 == MAX_STOP-1) //å¤æ车离å¼åå车åºæ¯å¦å满
if(QueueLength(sidewalk)) //å¦æå满åå¤æ便éä¸æ¯å¦æ车
{
//便éä¸æ车 åä»ä¾¿éä¸åå ¥å车åº
Out_LQueue(sidewalk , license_plate); //åºé
StackPush(parking , license_plate , GetTickCount()); //å ¥æ
cout<<"å¨ä¾¿éä¸çç §ä¸º"<<license_plate<<"ç车è¿å ¥å车åº"<<parking.top+1<<"å·ä½\n";
}
}
else
//车ä¸å¨å车åºä¸
cout<<"æ¨ç车ä¸å¨å车åºä¸ï¼\n";
}
//åå§å顺åºæ
void InitStack(SeqStack &parking)
{
parking.top = -1;
}
//å¤æ 空
int StackEmpty(SeqStack parking)
{
if(parking.top == -1)
return 1;
else
return 0;
}
//å¤æ 满
int StackFull(SeqStack parking)
{
if(parking.top == MAX_STOP-1)
return 1;
else
return 0;
}
//å ¥æ
void StackPush(SeqStack &parking , char *license_plate , int stop_time)
{
parking.top++;
strcpy(parking.STOP[parking.top].license_plate , license_plate);
parking.STOP[parking.top].state = 'p';
parking.STOP[parking.top].time = stop_time;
}
//åºæ è¿åæ 顶æé
int StackPop(SeqStack &parking)
{
if(StackEmpty(parking))
return 0;
else
return parking.top--;
}
//åæ 顶å ç´
int StackTop(SeqStack parking , char *license_plate , int &time)
{
if(StackEmpty(parking))
return 0;
else
{
strcpy(license_plate , parking.STOP[parking.top].license_plate);
time = parking.STOP[parking.top].time;
return 1;
}
}
//æ¾ç¤ºææ
void Display(SeqStack parking)
{
if(parking.top == -1)
printf("å车åºä¸ºç©º\n");
else
{
while(parking.top != -1)
{
cout<<"车çå·ä¸ºï¼"<<parking.STOP[parking.top].license_plate;
cout<<"ï¼åå¨"<<parking.top + 1 <<"å·è½¦ä½ä¸";
cout<<"ï¼å·²å"<<(GetTickCount()-parking.STOP[parking.top].time)/TIME_MS_TO_CONUT<<TIME_COUNT<<endl;
parking.top--;
}
}
}
//åå§åéå
void InitList(LQueue *&sidewalk)
{
sidewalk = (LQueue *)malloc(sizeof(LQueue));
sidewalk->front=sidewalk->rear = NULL;
}
//å ¥é
void In_LQueue(LQueue *&sidewalk,char *license_plate)
{
QNode *car_on_sidewalk;
car_on_sidewalk = (QNode *)malloc(sizeof(QNode)); //为æ°èç¹å¼è¾æ°ç©ºé´
strcpy(car_on_sidewalk->WAIT.license_plate , license_plate); //å°æ°æ®åå ¥èç¹
car_on_sidewalk->WAIT.state = 's'; //åå ¥å车信æ¯
car_on_sidewalk->WAIT.time = GetTickCount(); //åå ¥å车æ¶é´
car_on_sidewalk->next = NULL;
if(Empty_LQueue(sidewalk)) //é空åå建第ä¸ä¸ªèç¹
sidewalk->front = sidewalk->rear = car_on_sidewalk;
else
{
//éé空æå ¥éå°¾
sidewalk->rear->next = car_on_sidewalk;
sidewalk->rear = car_on_sidewalk;
}
}
//å¤é空
int Empty_LQueue(LQueue *q)
{
if(q->front == NULL)
return 1;
else
return 0;
}
//å¤éé¿åº¦ è¿åéé¿
int QueueLength(LQueue *q)
{
QNode *p=q->front;
int i=0;
while(p != NULL)
{
i++;
p=p->next;
}
return i;
}
//åºé æåè¿å1 é空è¿å0
int Out_LQueue(LQueue *&sidewalk,char *license_plate)
{
QNode *car_on_sidewalk;
if(Empty_LQueue(sidewalk)) //å¦æé空è¿å0
return 0;
car_on_sidewalk = sidewalk->front;
strcpy(license_plate , car_on_sidewalk->WAIT.license_plate);//ååºé头å ç´
if(sidewalk->front == sidewalk->rear) //éä¸åªæä¸ä¸ªå ç´
sidewalk->front = sidewalk->rear=NULL; //å é¤å ç´
else
sidewalk->front = sidewalk->front->next; //é头æéå移
free(car_on_sidewalk); //éæ¾æé
return 1;
}
//æ£æ¥ç¦»å¼ç车æ¯å¦å¨å车åºä¸ è¿å车å¨å车åºä¸ä½ç½® ä¸å¨åè¿å0
int LeaveCheck(SeqStack parking,char *license_plate)
{
int flag = parking.top+1; //å®ä¹åéè®°å½å½å车å¨å车åºä¸ä½ç½®
if(StackEmpty(parking))
return 0;
else
{
//æ¥æ¾ç¦»å¼è½¦æå¨ä½ç½®
while(parking.top != -1 && strcmp(parking.STOP[parking.top].license_plate , license_plate) != 0)
{
flag--;
parking.top--;
}
return flag;
}
}
//æ£éªè¾å ¥ç车çæ¯å¦åæ³
void Input_Check(char *license_plate)
{
int flag = 1;
int i;
string tmpstr;
while(flag)
{
cin>>tmpstr;
getchar();
if(tmpstr.length()<MAX_PLATE)
{
for(i=0;i<;i++)
license_plate[i] = tmpstr.c_str()[i];
flag = 0;
}
else
cout<<"è¾å ¥æ误ï¼è¯·éæ°è¾å ¥ï¼";
}
}
以åç课设 ä½ ççå§ çº¯æå·¥ç~~