国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現調度算法代碼詳解

2020-02-16 10:54:22
字體:
來源:轉載
供稿:網友

調度算法

操作系統管理了系統的有限資源,當有多個進程(或多個進程發出的請求)要使用這些資源時,因為資源的有限性,必須按照一定的原則選擇進程(請求)來占用資源。這就是調度。目的是控制資源使用者的數量,選取資源使用者許可占用資源或占用資源。

在操作系統中調度是指一種資源分配,因而調度算法是指:根據系統的資源分配策略所規定的資源分配算法。對于不同的的系統和系統目標,通常采用不同的調度算法,例如,在批處理系統中,為了照顧為數眾多的段作業,應采用短作業優先的調度算法;又如在分時系統中,為了保證系統具有合理的響應時間,應當采用輪轉法進行調度。目前存在的多種調度算法中,有的算法適用于作業調度,有的算法適用于進程調度;但也有些調度算法既可以用于作業調度,也可以用于進程調度。

目標闡述:

將中綴表達式轉換為后綴表達式(Reverse Polish Notation:RPN 逆波蘭式)
參與運算的數據的正則表示為:[0-9]{1,}形式的十進制數

運算符優先級:(從高到低)————————————————————————( )   括號/ * %  除乘余+ -   加減————————————————————————

解:

第一步:使用正則詞法分析器flex生成一個詞法分析器,以處理輸入的中綴表達式。
從stdin接收輸入,檢測非法字符,并將處理后的中綴表達式輸出到stdout。

%option noyywrap%{#include<stdio.h>#include<stdlib.h>%}%%[0-9]+ { printf("%s ",yytext); }[()*/%+-] { printf("%s ",yytext); }[[:space:]] {}. { printf("/nError/n");exit(1); }%%int main(){ yylex(); printf("/n"); return 0;}

第二步:使用Python進行轉換。

從stdin接收一定格式的中綴表達式字符流,檢測是否在詞法分析器處理過程中出錯,然后使用調度場算法處理數據,得到rpn列表。

import sysline=sys.stdin.readline()line2=sys.stdin.readline()if len(line2)>0: sys.stderr.write("Syntax Error after : ") sys.stderr.write(line) sys.stderr.write("/n") exit(1)lis=line.split(' ')lis.pop()lis_old=lis[:]lis.reverse()oplis=[]rpnlis=[]str=''arith_op="+-*/%" # '(' ')' [0-9]+prior={ '/':1,'*':1,'%':1, '+':2,'-':2 }while len(lis)>0:  str=lis.pop()  if str=='(':    oplis.append('(')  elif str.isdigit():    rpnlis.append(str)  elif len(str)==1 and arith_op.find(str[0])!=-1:    if len(oplis)==0 or oplis[len(oplis)-1]=='(':      oplis.append(str)    else:      while len(oplis)>0 and oplis[len(oplis)-1]!='(' /               and prior[oplis[len(oplis)-1]]<=prior[str]:        rpnlis.append(oplis.pop())      oplis.append(str)  elif str==')':    while len(oplis)>0 and oplis[len(oplis)-1]!='(':      rpnlis.append(oplis.pop())    if len(oplis)>0:         oplis.pop()        else:         sys.stderr.write("Syntax Error while translating : Expected '('")         sys.stderr.write("/n")         exit(2)    else:     sys.stderr.write("Syntax Error : unkown notation -->")     sys.stderr.write(str)     sys.stderr.write("/n")     exit(3)while len(oplis)>0 :  if oplis[len(oplis)-1]!='(':     rpnlis.append(oplis.pop())    else:     sys.stderr.write("Syntax Error while translating : Unexpected '('")     sys.stderr.write("/n")     exit(1)print lis_oldfor i in lis_old:  sys.stdout.write(i)print ''print rpnlisfor i in rpnlis:  print i,print ''exit(0)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 磐安县| 牟定县| 祁东县| 安化县| 潞城市| 洪泽县| 余干县| 顺义区| 漠河县| 洪洞县| 富锦市| 巴彦淖尔市| 锡林郭勒盟| 阳西县| 闽侯县| 社会| 左权县| 隆子县| 德清县| 武山县| 田东县| 房山区| 承德市| 茌平县| 上林县| 会东县| 庐江县| 蒙城县| 太仆寺旗| 汉川市| 荣昌县| 类乌齐县| 璧山县| 武宁县| 福州市| 建水县| 含山县| 兴山县| 攀枝花市| 达尔| 枣阳市|