优先队列插入、删除

 1 #include<stdio.h>
 2 #include<malloc.h>
 3 void shift_down(int a[], int low, int high)
 4 {
 5     int i = low, j = i*2;
 6     int tmp = a[i];
 7     while(j <= high){
 8         if(j < high && a[j] < a[j+1])
 9             j++;
10         if(tmp < a[j]){
11             a[i] = a[j];
12             i = j;
13             j = i*2;
14         }
15         else break;
16     }
17     a[i] = tmp;
18 } 
19 void shift_up(int a[], int low, int high)
20 {
21     int i = high/2, j = high;
22     int tmp = a[high];
23     while(i >= 1){
24         if(a[i] < tmp){
25             a[j] = a[i];
26             j = i;
27             i = j/2;
28         }
29         else break;
30     }
31     a[j] = tmp;
32 }
33 void print(int a[], int n)
34 {
35     int i;
36     for(i = 1; i <= n; i++){
37         printf("%d ", a[i]);
38     }
39     printf("\n");
40 }
41 int main()
42 {
43     int n, i, a[110];
44     scanf("%d", &n);
45     for(i = 1; i <= n; i++){
46         scanf("%d", &a[i]);
47     }
48     for(i = n/2; i >= 1; i--){
49         shift_down(a, i, n);
50     } //建立大顶堆 
51     print(a, n);
52     
53     printf("删除大顶堆顶:"); 
54     a[1] = a[n];//删除当前最大元素 
55     n--; 
56     shift_down(a, 1, n);
57     print(a, n); 
58     
59     printf("插入一个值:"); 
60     n++;
61     scanf("%d", &a[n]);
62     shift_up(a, 1, n);
63     print(a, n);
64     return 0;
65 } 
66 /*10
67 6 8 7 9 0 1 3 2 4 5*/

 

posted @ 2019-03-20 11:21  Surprisez  阅读(938)  评论(1编辑  收藏  举报