优先队列插入、删除

 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*/

 

转载于:https://www.cnblogs.com/Surprisezang/p/10563780.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值