程序的優先排程演算法的c語言實現
在程序中實現優先順序演算法可以使用最小堆排列來實現。
一般在優先順序排程演算法中要實現的操作
1.從後備作業佇列中選擇一個優先順序最高的作業將他們調入記憶體,分配必要的資源。此處的優先順序越高關鍵字越小
2.建立程序並且放入到後備作業佇列中
3,。改變一個程序的優先順序重新排列後備作業佇列的順序
此處的c語言實現僅僅使用一個數組代表關鍵字,
若再真實的作業系統中,真可以使用結構體陣列來代替示例中的簡單陣列。
struct Process
{
int key;
int* pointer;//指向程序的入口程式碼
//更多的其他資訊
}process
#include<stdio.h> #define HEAP_SIZE 5//定義堆的大小,記住此時的大小不包含堆陣列的0號元素,0號元素儲存的是 堆的大小; //================Min_heapify================== /* 此函式的作用是使以i為根的堆成為最小堆; */ void Min_heapify(int *array,int i){ int heap_size=array[0]; int l=0; int r=0; int least=0; //此處不使用遞迴節約時間; while(i>0){ l=2*i; r=2*i+1; if(l<=heap_size&&array[l]<array[i]) least=l; else least=i; if(r<=heap_size&&array[r]<array[least]) least=r; if(least!=i){ int temp; temp=array[i]; array[i]=array[least]; array[least]=temp;} i/=2; } } //=================Build_min_heap=============== /* 此函式是建立以陣列array的最小堆; */ void Build_min_heap(int* array){ int heap_size=array[0]; for(int i=(heap_size/2);i>0;i--) Min_heapify(array,i); } //============= Heap_extract_min============= /* 此函式是返回最小堆的最小的關鍵字 */ int Heap_extract_min(int*array){ int min; int heap_size=array[0]; if(heap_size<1) printf("heap underflow\n"); min=array[1]; array[1]=array[heap_size]; array[0]-=1; Min_heapify(array,1); return min; } //=========== Heap_prior_increase=============== /* 此函式的作用是增加堆中某個元素的優先值,優先順序高的關鍵字小; */ void Heap_prior_increase(int*array,int i,int key){ if(key>array[i]&&key<0){ printf("the prior you want to increse cann't be relize\n"); return ;} array[i]=key; while(i>1&&array[i/2]>array[i]){ int temp; temp=array[i]; array[i]=array[i/2]; array[i/2]=temp; i/=2;} } //=========== Min_heap_insert===================== /* 此函式的作用是插入元素; */ void Min_heap_insert(int*array,int key){ int heap_size; array[0]+=1; heap_size=array[0]; array[heap_size]=-2; Heap_prior_increase(array,heap_size,key); } int main(){ printf("\n ^_^welcome to wuhan university^_^\n\n"); int test; int heap_array[HEAP_SIZE+1]={3,2,1,4,-1,-1};//此處的第一個元素是堆的大小; Build_min_heap(heap_array); Heap_prior_increase(heap_array,3,3); printf("\nheap_array:"); for(int i=0;i<6;i++) printf(" %d ",heap_array[i]); Min_heap_insert(heap_array,6); printf("\nheap_array:"); for(int i=0;i<6;i++) printf(" %d ",heap_array[i]); Min_heap_insert(heap_array,2); printf("\nheap_array:"); for(int i=0;i<6;i++) printf(" %d ",heap_array[i]); test=Heap_extract_min(heap_array); printf("\nHeap_extract_min=%d \n",test) ; printf("\n ^_^welcome to wuhan university^_^\n\n"); getchar(); }
相關推薦
先來先服務和高響應比優先排程演算法C語言實現
#include <stdio.h> #include <stdlib.h> #include <string.h> #define WAIT "Wait"//就緒狀態 #define RUN "Run"//執行狀態 #define FINISH "Finish"//完
磁碟排程演算法C語言實現
最短尋道時間優先(SSTF)演算法。要求訪問的磁軌,與當前磁頭所在的磁軌距離最近,以使每次的尋道時間最短。掃描排程(SCAN)演算法。該演算法不僅考慮到欲訪問的磁軌與當前磁軌間的距離,更優先考慮的是磁頭當前的移動方向。例如,當磁頭正在自裡向外移動時,SCAN演算法所考慮的下一
處理機排程演算法C語言實現(註釋得當!!)
/* created by herbert on 10 Nov */ #include <iostream> #include <queue> #include <algorithm> #include <c
作業排程之先來先服務演算法C語言實現
程式碼如下 /* @author WellsLiu @url liuyanzhao.com*/#include"stdio.h"#include"stdlib.h"typedef st
SHA-1演算法C語言實現
> 程式碼轉載自:https://blog.csdn.net/testcs_dn/article/details/25771377?locationNum=13&fps=1 > 感謝博主分享 #include<stdio.h> void creat_w(uns
頁面置換演算法——最近最久未使用演算法(c語言實現)
作業系統實驗:用C語言程式設計實現最近最久未使用置換演算法(LRU) 最近最久未使用置換演算法(LRU),全稱Least Recently Used,是一種頁面置換演算法。 對於在記憶體中但又不用的資料塊(記憶體塊)叫做LRU,作業系統會根據哪些資料屬於LRU而將其移出記憶體而騰出空間來載入另外
建立雙向連結串列的演算法——C語言實現
建立雙向連結串列的演算法——C語言實現 雙向連結串列也叫雙鏈表,是連結串列的一種,它的每個節點包含兩個指標,分別指向直接後繼和直接前驅(頭節點的前驅指空,尾節點的後繼指空)。所以,從雙向連結串列中的任意一個非前驅非後繼節點開始,都能很方便地訪問它的前驅和後繼節點。 實際上如果熟練掌握了單向連
差分進化演算法 C語言實現
之前的一篇中貼出了自己研究生期間C實現的基本粒子群演算法,執行速度顯然要比其他的高階語言快,這也是各個程式語言之間的差別,現在對於曾經輝煌過的差分進化演算法進行C語言實現。變異策略採用DE/rand/1,這個是最常見的。有錯誤之處請之處。 /***************D
氣泡排序演算法C語言實現
第一部分 排序方法介紹 常用的排序方法:氣泡排序,選擇排序,插入排序及希爾排序等。 氣泡排序是常用的一種排序方法,其基本方法就是逐次比較。即一次比較兩個數,若它們的順序錯誤,則交換;重複進行,知道沒有需要交換為止。 以升序排序為例: 1.
MD5加密演算法C語言實現
md5.h #ifndef MD5_H #define MD5_H typedef struct { unsigned int count[2]; unsigned int state[4]; unsigned char buffe
10個重要的演算法C語言實現原始碼:拉格朗日,牛頓插值,高斯,龍貝格,牛頓迭代,牛頓-科特斯,雅克比,秦九昭,冪法,高斯塞德爾
(一)拉格朗日插值多項式 #include <stdio.h> #include <conio.h> #include <alloc.h> &n
【作業系統】磁碟排程演算法 C++具體實現 (FCFS&SSFT&SCAN&C-SCAN&LOOK&C-LOOK)
先宣告一下全域性變數int initPosition,maxSize,numTrack;//磁頭所在位置,磁碟所能盛放的最大磁軌數目,要訪問的磁軌數 int cost;//磁頭總移動距離 vector<int> Track;//要訪問的磁軌們 vector<
非常值得一看—九種濾波演算法C語言實現
關注“嵌入式軟體開發學習圈”免費獲取更多學習教程 今天帶著大家學習濾波演算法c語言(九種濾波演算法)實現,以及程式碼,大家可以學習瞭解下。。。。 1.限幅濾波演算法(程式判斷濾波演算法) 方法解析: 根據經驗判斷,確定兩次取樣允許的最
CPU排程演算法C++模擬實現——(FCFS,SJF,RR)
FisrtComeFirstServe——先到先服務演算法按照程序進入就緒佇列的順序,來執行程序。用一個佇列維護即可。ShortestJobFirst——短作業優先演算法我實現的是非搶佔式SJF,可以通過優先佇列來判斷已ready且cpu burst最短的程序,但我不太熟,就
最短路徑之Dijkstra演算法 C語言實現
Dijkstra演算法(單源點路徑演算法,要求:圖中不存在負權值邊): 步驟: a. 初始時,S只包含源點,即S={v},v的距離為0。U包含除v外的其他頂點,即: U={其餘頂點},若v與U中頂點u有邊,則u的距離設定為相應的權值,若u v之間不存在邊,則
SHA-256演算法 C語言實現
#include <stdio.h> #include <stdlib.h> #define SHA256_ROTL(a,b) (((a>>(32-b))&(0x7fffffff>>(31-b)))|(a<<
哈夫曼壓縮演算法C語言實現——步驟,詳細註釋原始碼
哈夫曼壓縮演算法的詳細實現步驟: 1、定義哈夫曼樹節點,用結構體。 2、利用C語言檔案讀寫,統計字元個數。 3、根據字元個數建立哈夫曼樹(不懂haffman資料結構的自己查下資料,我這裡就不再重複了) 4、根據哈夫曼樹為每個出現的字元編碼 5、壓縮:這裡涉及到位操作,用ch
爐石傳說爆牌魚斬殺演算法C語言實現
#include <stdio.h> int main() { printf("請輸入敵方血量:\n"); int difangxue; scanf("%d",&difangxue); printf("請輸入自己血量:
九大排序演算法-C語言實現及詳解
概述 排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。 我們這裡說說八大排序就是內部排序。 當n較大,則應採用時間複雜度為O(nlog2n)的排序方法:快
Dijkstra演算法 c語言實現
Dijkstra(迪傑斯特拉)演算法是典型的最短路徑路由演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。Dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。 Dijk