資料結構與演算法分析——c語言描述 第六章
昨天參加個學校的程式設計大賽,被信電院和其他院的大一吊打。只有更努力才能看見別人的背影。
6a,複雜度是o(n+klogn)
main.c
#include"binheap.h"
#include#includeint randint(int i, int j)
void getrandomint(int *a, int n)
for (int i = 1; i < n; i++)
}int main()
for (int i = 0; i < k-1; i++)
printf("%d", deletemin(h));
destroy(h);
free(a);
}
6bbinheap.h
#ifndef _binheap_h
typedef int elementtype;
struct heapstruct;
typedef struct heapstruct *priorityqueue;
priorityqueue initialize(int maxelements);
priorityqueue buildheap(elementtype *arr,int n, int maxelements);
void destroy(priorityqueue h);
void makeempty(priorityqueue h);
void insert(elementtype x, priorityqueue h);
elementtype deletemin(priorityqueue h);
int isempty(priorityqueue h);
int isfull(priorityqueue h);
elementtype getmin(priorityqueue h);
void decreasekey(int pos, elementtype delta,priorityqueue h);
void increasekey(int pos, elementtype delta, priorityqueue h);
void delete(int pos, priorityqueue h);
#endif // !_binheap_h
binheap.c
#include"binheap.h"
#include"fatal.h"
#define minpqsize 5
#define mindata int_min
struct heapstruct ;
priorityqueue initialize(int maxelements)
static void percolatedown(int pos, priorityqueue h)
h->elements[i] = elem;
}priorityqueue buildheap(elementtype *arr, int n, int maxelements)
for (int i = n / 2; i > 0; i--)
return h;
}void destroy(priorityqueue h)
void makeempty(priorityqueue h)
void insert(elementtype x, priorityqueue h)
elementtype deletemin(priorityqueue h)
if (lastelement > h->elements[child])
h->elements[i] = h->elements[child];
else
break;
} h->elements[i] = lastelement;
return minelement;
}int isempty(priorityqueue h)
int isfull(priorityqueue h)
elementtype getmin(priorityqueue h)
void decreasekey(int pos, elementtype delta, priorityqueue h)
h->elements[i] = changedelem;
}void increasekey(int pos, elementtype delta, priorityqueue h)
h->elements[i] = changedelem;
}void delete(int pos, priorityqueue h)
deletemin(h);
}
main.c
#include"binheap.h"
#include#includeint randint(int i, int j)
void getrandomint(int *a, int n)
for (int i = 1; i < n; i++)
}int a[99999999];
int main()
} printf("%d", getmin(h));
destroy(h);
//free(a);
}
優先佇列的應用
思路分析 駕駛一輛卡車行駛l單位距離。最開始時,卡車上有p單位的汽油。卡車每開1單位距離需要消耗1單位的汽油。如果在途中車上的汽油耗盡,卡車就無法繼續前行,因而無法到達終點。在途中一共有n個加油站。第i個加油站在距離起點ai單位距離的地方,最多可以給卡車加油bi單位汽油。假設卡車的燃料箱的容量無限大...
優先佇列的應用
1.基本概念 2.關於優先佇列的優先順序 自部落格 priority queue,less 大的優先順序大 priority queuevector,greater 小的優先順序大 當然優先順序也可以自己寫比較函式自己定義 struct cmp1 struct cmp2 priority queue...
優先佇列 選擇優先度
非本人原版,出自鏈結當時忘記記了。這串 對博主我幫助很大 include include include includeusing namespace std 定義結構,使用運算子過載,自定義優先順序1 struct cmp1 struct cmp2 struct number2 for i 0 n...