HEAPDATA deleteHeap(HEAP *H){ HEAPDATA item, tmp; int root, child, rchild; if (H->size == 0) terminateProgram("Cannot delete from an empty heap"); item = H->data[0]; H->size -= 1; H->data[0] = H->data[H->size]; root = 0; child = 2 * root + 1; while (child < H->size){ rchild = child + 1; if (rchild < H->size){ if ((H->typ == MAXHEAP) && (H->data[rchild].key > H->data[child].key)) child = rchild; if ((H->typ == MINHEAP) && (H->data[rchild].key < H->data[child].key)) child = rchild; } if ((H->typ == MAXHEAP) && (H->data[root].key > H->data[child].key)) break; if ((H->typ == MINHEAP) && (H->data[root].key < H->data[child].key)) break; tmp = H->data[root]; H->data[root] = H->data[child]; H->data[child] = tmp; root = child; child = 2 * root + 1; } return item; }
void insertHeap(HEAP *H, double key, int cx, int cy, int label){ int place, parent; HEAPDATA tmp; if (H->size >= H->maxSize) terminateProgram("Cannot insert to a full heap"); H->data[H->size].key = key; H->data[H->size].cx = cx; H->data[H->size].cy = cy; H->data[H->size].label = label; place = H->size; parent = (place - 1) / 2; while (place > 0){ if ((H->typ == MAXHEAP) && (H->data[place].key < H->data[parent].key)) break; if ((H->typ == MINHEAP) && (H->data[place].key > H->data[parent].key)) break; tmp = H->data[place]; H->data[place] = H->data[parent]; H->data[parent] = tmp; place = parent; parent = (place - 1) / 2; } H->size += 1; }
int minMatrixColumn(MATRIX M, int columnNo){ int minCol, i; if (columnNo >= M.column) terminateProgram("Error in maxMatrixColumn (matrix.c)"); minCol = M.data[0][columnNo]; for (i = 0; i < M.row; i++) if (M.data[i][columnNo] < minCol) minCol = M.data[i][columnNo]; return minCol; }
void handleInterrupt21(int ax, int bx, int cx, int dx) { if(ax == 0) printString(bx); else if(ax == 1) readString(bx); else if(ax == 2) readSector(bx, cx); else if(ax == 3) readFile(bx,cx); else if(ax == 4) executeProgram(bx, cx); else if(ax == 5) terminateProgram(); else if (ax == 6) writeSector(bx,cx); else if (ax == 7) deleteFile(bx); else if(ax == 8) writeFile(bx,cx,dx); else printString("error\0"); }
int main(int argc, char** argv) { // main2(argc, argv); int info_fd; int log_fd; unsigned int speep_time_microseconds = 500*1000; options* opt = initProgram(argc, argv); prepareFiles(info_fd, log_fd, opt); int i = 1; while (do_work) // until sigint won't interrupt { work(info_fd, log_fd); usleep(speep_time_microseconds); printf("Appended %d entries\n", i++); } terminateProgram(info_fd, log_fd, opt); return 0; }