堆代码错误

时间:2018-02-19 13:54:55

标签: c heap

我在以下代码中收到错误消息。我正在构建一个堆,为此我使用buildupmove-up函数,而为了删除值,我使用move-downdeletion函数。为了插入值,我使用insert函数。

我的输出显示deletion部分的错误。

#include<stdio.h>
#include<stdlib.h>

int a[100];
int size;
void display();
void moveup(int);
void insert(int);
void buildup();
int deletion();
void movedown(int);
int h;
void main()
{
    size=5;
    int i,j;
    printf("enter the elements\n");
    for(i=1;i<=5;i++)
    {
       scanf("%d",&a[i]);
    }
    a[0]=32767;
    printf("\n");
    buildup();
    display();
    insert(9);
    display();
    printf("\n after deletion\n");
    deletion();
    display();
}

void buildup()
{
    int i;
    for(i=2;i<=size;i++)
        moveup(i);
}

void moveup(int i)
{
    int p,temp;
    temp=a[i];
    p=i/2;
    while(temp>a[p])
    {
        a[i]=a[p];
        i=p;
        p=i/2;
    }
    a[i]=temp;
 }

 void display()
{
    int i;
    for(i=1;i<=size;i++)
        printf("%3d\n",a[i]);
}

void insert(int t)
{
printf("\n after insertion\n");
    if(size==99)
printf("insertion not possible");
    a[++size]=t;
moveup(size);
}

int deletion()
{
    int t;
    t=a[1];
    h=a[size--];
    a[1]=h;
    movedown(1);
    return t;
}

void movedown(int i)
{
    int l;
    int r;
    i=2*i;
    r=l+1;
    while(r<=size)
    {
        if(h>a[l]&&h>a[r])
        {
            a[i]=h;
            return;
        }
        else
       {
            if(a[l]>a[r])
            {
                a[i]=a[l];
                i=l;
            }
            else
            {
                a[i]=a[r];
                i=r;
            }
       }
        l=2*i;
        r=l+1;
    }
    if(l<=size&&a[l]>h)
    {
        a[i]=a[l];
        i=l;
    }
    a[i]=h;
    }

0 个答案:

没有答案