當前位置:首頁 » 編程語言 » 優先順序隊列c語言

優先順序隊列c語言

發布時間: 2023-04-17 06:15:00

⑴ 怎麼用c語言實現多級反饋隊列調度演算法

調度演算法的實施過程如下所述:(1)應設置多個就緒隊列,並為各個隊列賦予不同的優先順序。(2)當一個新進程進入內存後,首先將它放入第一隊列的末尾,按FCFS的原則排隊等待調度。當輪到該進程執行時,如他能在該時間片內完成,便可准備撤離系統;如果它在一個時間片結束時尚未完成,調度程序便將該進程轉入第二隊列的末尾,再同樣地按FCFS原則等待調度執行;如果它在第二隊列中運行一個時間片後仍未完成,再依次將它放入第三隊列……,如此下去,當一個長作業進程從第一隊列依次降到第N隊列後,在第N隊列中便採取時間片輪轉的方式運行

⑵ C語言實現一個優先隊列

#include <stdio.h>
#include <stdlib.h>

//數據列表結點結構體
typedef struct ListNode
{
int ndata;
int npriority;
struct ListNode *pNext;
};
//數據列表結構體
typedef struct DataList
{
ListNode *pHead;
ListNode *pLast;
int arPriorityInfoStore[11];
};

//生成鏈表變初始化,使用數據隊列首先調用
DataList *CreateList()
{
int i;

//內存申請
DataList *list = (DataList*)malloc(sizeof(DataList));

//結構體初始化
list->pHead = list->pLast = 0;
for(i=0;i<11;i++)
{
list->arPriorityInfoStore[i] = 0;
}

return list;
}

/*!數據入隊
* 參數list:數據隊列鏈表
* 參數data:待入隊的數據
* 參數prt :待入隊數據的優先順序
* 返回值:布爾型,true為入隊成功,false失敗
*/
bool Insert(DataList *list,int data, int prt)
{
//內存申請
ListNode *pNewNode = (ListNode *)malloc(sizeof(ListNode));
//內在申請失敗,無法入隊
if(pNewNode = 0)
return false;

//新結點初始化
pNewNode->ndata = data;
pNewNode->npriority = prt;
pNewNode->pNext = 0;

list->arPriorityInfoStore[prt]++;

//區別對待第一個結點
if(list->pHead == 0)
{
list->pHead = list->pLast = pNewNode;
}
else
{
list->pLast->pNext = pNewNode;
list->pLast = pNewNode;
}
}

/*! 數據出隊
* 參數list:數據隊列鏈表
* 返回值:整型,優先最大的數據
*/
int Pop(DataList *list)
{
int nMaxPriority;
ListNode *pCursortNode;

//找出隊列中的最大優先順序
for(nMaxPriority = 10; nMaxPriority >= 0; nMaxPriority--)
{
if(list->arPriorityInfoStore[nMaxPriority]>0)
break;
}

//由於數據有效范圍為0到100,故取-1作為無效值表示此時列表為空
if(nMaxPriority < 0)
return -1;

//找到優先順序最大的點,取值返回
for(pCursortNode = list->pHead; pCursortNode->pNext!=0; pCursortNode = pCursortNode->pNext)
{
if(pCursortNode->npriority != nMaxPriority)
continue;
else
break;
}

return pCursortNode->ndata;
}

未進行測試,也未寫主函數。功能函數已經寫出,可能中間會有小問題,你調一下即能使用。

⑶ c語言中優先順序隊列如何實現優先順序相同的元素先進先出

每次插入的時候進行排序
比較的時候,相同情況下,把後進的放在後面
然後從前面出隊就可以了

⑷ c語言中有沒有優先隊列的頭文件,如果有,請寫出來

C標准庫中沒有優先隊列呀,優先隊列的C實現請參考博文:
《優先隊列(priority_queue)的C語言實現(原創)》
http://hi..com/gropefor/blog/item/7d958eb68359cbe230add14e.html

⑸ )用C語言(或其它語言,如Java)編程實現對N個進程採用某種進程調度演算法(如動態優先權調度

公眾:類PrivilegeProcess {
公共靜態無效的主要(字串[] args){

MyQueue的MyQueue的新MyQueue的();/ /聲明隊列

印刷電路板[PCB = {新的PCB(001 ,8,1),新的PCB(002,7,9),新的PCB(003,3,8),新的PCB(004,1,7),新的PCB(005,7,4)};
> PCB段=新的PCB();

(INT I = 0; <pcb.length; + +){/ /初始化先進行排序,選擇排序這里使用的是高優先順序的一線隊

(J =我; <pcb.length; J + +){

(PCB [I]。特權<PCB [J]。特權){

段= PCB [1];

PCB [I] = PCB [J];

PCB [J] =段;

}

}

}

體系。通過out.println(「入隊後第一時間的進程的順序:」);

(INT I = 0; <pcb.length; + +){

的System.out調用println(第一次入隊#程序名稱:「+ PCB [我]。名稱+ totaltime:」+ PCB [I]。totaltime +「的」特權「+ PCB [我]。特權); }

();

myqueue.start(PCB);

}

}

類MyQueue的{

INT指數= 0;

PCB [] PC =新的PCB [5];

PCB [] PC1 =新的PCB [4];

PCB溫度=新的PCB() BR />公共無效排隊(PCB工藝){/ /排隊演算法

(指數== 5){

(「出界!」);

返回

}

PC [索引] =進程;

指數+ +;

}

公共:PCB DEQUEUE(){/ /出隊演算法(索引== 0)

返回空;

(INT I = 0; <pc1.length; + +){

PC1 [I] = PC [ +1];

}

指數 -

溫度= PC [0];

(INT I = 0; <pc1.length; + +){ BR /> PC [I] = PC1 [I];

}

回報條件;

}

公共無效啟動(PCB [] PC){/ /進程表演算法

(PC [0]。isNotFinish ==真| | PC [1 isNotFinish ==真| | PC [2 isNotFinish ==真| | PC [3]。時isNotFinish ==真| | PC [4]。isNotFinish ==){

/ / *註:| |運算符都是假的,所有的表達式結果為假,否則真

(INT I = 0; <PC長度; + +){

PC [I]。運行(這一點); />} 的System.out.println();

(INT I = 0; <pc.length; + +){/ /處理每個運行一次運行的時間片的長度重新排序優先一旦

(J =我; <pc.length; J + +){

如果(PC [I]特權<PC [J]。特權){

溫度= PC [I];

PC [I] = PC [J];

PC [J] =溫度;

}

}

}

}

}

}

類PCB {/ /聲明過程級

和int名,totaltime ,運行時特權;

布爾isNotFinish的;

公眾PCB(){

}

公開PCB(名稱,詮釋totaltime特權){

this.name =的名稱;/ /進程名

this.totaltime = totaltime ;/ /

this.privilege =特權;/ /總時間優先 this.runtime = 2 ;/ /時間片值是2

this.isNotFinish =真;/ /是否執行完成

(「初始值:程序名稱:」+名+「totaltime:」+ totaltime +「特權」+特權);

System.out的。調用println();

}

MyQueue的MQ公共無效的run(){/ /處理的基礎上實施的時間片演算法

(totalTime> 1){ totaltime =運行;/ /總時間大於1,總時間=總時間 - 時間片

特權 -

(「程序名稱:」+姓名+「 remaintime:「+ +」特權「+特權); totaltime

的} else if(totaltime == 1){

totaltime - ;/ /總時間為1時,執行時間為1
>特權 -

(「程序名稱:」+姓名+「remaintime:」+ totaltime +「特權」+特權);

}其他{

isNotFinish =假;/ / 0,將isNotFinish標志設置為假

}

如果(isNotFinish ==真){br mq.deQueue();

mq.enQueue(本);

}

}
}

熱點內容
androidcursor遍歷 發布:2024-11-02 00:27:40 瀏覽:767
網易我的世界地皮伺服器大全 發布:2024-11-02 00:24:20 瀏覽:964
光宇國際服怎麼安卓轉ios 發布:2024-11-02 00:14:23 瀏覽:170
魔獸世界單機資料庫 發布:2024-11-01 23:37:11 瀏覽:698
配置vlan後如何配置電腦ip 發布:2024-11-01 23:21:16 瀏覽:546
中鐵盾構機密碼是多少 發布:2024-11-01 23:07:21 瀏覽:708
工規存儲 發布:2024-11-01 22:59:33 瀏覽:802
無法識別加密狗 發布:2024-11-01 22:47:03 瀏覽:599
手機怎麼給wifi改密碼怎麼辦啊 發布:2024-11-01 22:46:03 瀏覽:858
抖音賬號的密碼是由什麼組成 發布:2024-11-01 22:45:27 瀏覽:449