Untitled
unknown
plain_text
2 years ago
2.6 kB
3
Indexable
#include <stdio.h> int search(int key, int frame_items[], int frame_occupied) { for (int i = 0; i < frame_occupied; i++) if (frame_items[i] == key) return 1; return 0; } void printOuterStructure(int max_frames){ printf("Stream "); for(int i = 0; i < max_frames; i++) printf("\t\tFrame%d ", i+1); } void printCurrFrames(int item, int frame_items[], int frame_occupied, int max_frames){ printf("\n%d \t\t", item); for(int i = 0; i < max_frames; i++){ if(i < frame_occupied) printf("%d \t\t", frame_items[i]); else printf("- \t\t"); } } int predict(int ref_str[], int frame_items[], int refStrLen, int index, int frame_occupied) { int result = -1, farthest = index; for (int i = 0; i < frame_occupied; i++) { int j; for (j = index; j < refStrLen; j++) { if (frame_items[i] == ref_str[j]) { if (j > farthest) { farthest = j; result = i; } break; } } if (j == refStrLen) return i; } return (result == -1) ? 0 : result; } void optimalPage(int ref_str[], int refStrLen, int frame_items[], int max_frames) { int frame_occupied = 0; printOuterStructure(max_frames); int hits=0; for (int i = 0; i < refStrLen; i++) { if (search(ref_str[i], frame_items, frame_occupied)) { hits++; printCurrFrames(ref_str[i], frame_items, frame_occupied, max_frames); continue; } if (frame_occupied < max_frames){ frame_items[frame_occupied] = ref_str[i]; frame_occupied++; printCurrFrames(ref_str[i], frame_items, frame_occupied, max_frames); } else { int pos = predict(ref_str, frame_items, refStrLen, i + 1, frame_occupied); frame_items[pos] = ref_str[i]; printCurrFrames(ref_str[i], frame_items, frame_occupied, max_frames); } } printf("\n\nHits: %d\n", hits); printf("Misses: %d\n", refStrLen - hits); //printf("\n\n"); } int main() { int nn; printf("Enter the size of the input stream:\t"); scanf("%d",&nn); int ref_str[nn]; for(int i=0;i<nn;i++) { scanf("%d",&ref_str[i]); } int refStrLen = sizeof(ref_str) / sizeof(ref_str[0]); int max_frames = 3; int frame_items[max_frames]; optimalPage(ref_str, refStrLen, frame_items, max_frames); return 0; }
Editor is loading...