UVa 210 Concurrency Simulator(双端队列)

思路:模拟运行,根据提议有两个队列,其中等待队列是双向队列

这道题关键是变量的定义,使用index来代表程序,再使用一个数组来存储每个程序执行到第几条

而每个程序就用vector来存储每条语句,每个程序又存储在一个vector里面

package test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Vector;



public class Test{	
	static boolean lock = false;//共用锁
	static int N = 1005;//程序最大数目  
	static LinkedList<Integer> qr;//执行队列  
	static LinkedList<Integer> qb;//等待队列  
	static Vector<Vector<String>> prg = new Vector<Vector<String>>();  
	static int T[] = new int[5];//5条命令的执行时间
	static int var[] = new int[26];//变量
	static int p[] = new int[N];//每个程序执行到那条  
	static int lim;//时间片
	
	public static void main(String[] args) {
				
		
		Scanner sc = new Scanner(System.in);
		String line = null;
		System.out.println("input:");
		while(!"".equals((line=sc.nextLine().toLowerCase()))){
			/*输入略*/		
		}	
		sc.close();		
		
		while(qr.size()>0||qb.size()>0){
			int index = qr.poll();//准备执行的程序号
			int rt = lim;//分配时间片
			Vector<String> now = prg.get(index);			
		
			while(rt>0){
				String s = now.get(p[index]);//当前程序的当前命令				
				if(!lock&&s.contains("=")){					
					int i = s.substring(0,s.indexOf("=")).charAt(0)-'a';
					var[i] = Integer.valueOf(s.substring(s.indexOf("=")));
					rt -= T[0];
				}else if(!lock&&s.contains("print")){
					int i = s.substring(0,s.indexOf(" ")).charAt(0)-'a';
					System.out.println(var[i]);
					rt -= T[1];
				}else if(!lock&&s.contains("lock")){
					rt -= T[2];
					lock = true;
				}else if(!lock&&s.contains("end")){
					rt -= T[4];					
				}else if(s.contains("unlock")){
					qr.addFirst(qb.poll());
					lock = false;
					break;
				}else{
					break;
				}		
				p[index]++;
			}
			qr.add(index);//每次都将程序放到队尾
		}			
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值