www.gsyw.net > C语言 数组存储最小堆 删除堆顶元素

C语言 数组存储最小堆 删除堆顶元素

D0删除之后,7放到堆顶 然后经行堆调整7和1交换7再和5交换 所以序列就是125439786

先找到最大元素和最小元素下标. 然后把后续的依次前移即可. 比如 int del_max_min(int *a, int n ) { int maxi, mini,i,j; maxi=mini=0; for(i = 1;i<n; i++) if(a[maxi]<a[i]) maxi=i; else if(a[mini]>a[i])mini=i; for(i=j=0;i<n;i++) if(i!=maxi&&i!=mini) a[j++]=a[i]; return j; }返回的是删除后 a中元素个数.

#include#defineARR_SIZE5intDelete(int*a,intn,intx);voidmain(){inta[ARR_SIZE-1],x,i,n;printf("Pleaseenterarraynumbers:\n");scanf("%d",&n);printf("Pleaseenterarray:\n");for(i=0;i

#include "stdio.h" void del(int d[],int i,int n) { for(;i<n-1;i++) { d[i]=d[i+1]; } } int main() { int d[]={2,4,0,9,1,3,6,7,8,5}; int max,min; int i,j; max=0; min=0; for(i=1;i<10;i++) { if(d[i]>d[max]) max=i; if(d[i]<d[min]) min=i; } /* //若不删除最大和最小直接输出

/*我写了两种方法!!!方法一*/#include int main() { int a[10]={1,3,3,2,5,1,1,5,6,6}; int i,j,k,x=10;/*x为数组中无重复有效元素的个数*/ for(i=0;i { for(j=i+1;j { if(a[i]==a[j]) { x--;//发现重复时减1 for(k=j;k { a[k]=a[k+1]; } j--; } } } for(i=0;i printf("\n"); return

一个for loop来一个个调 里面加一个for loop用当前的和前面的一个个比~~一样就删掉~~然后n--;

不需要清楚,你记录一下数组的实际存储长度,每次操作的时候别越界就可以了,即是你不往那些不保存数据的位置存储值,系统也是会存放一个随机值的.

将最后一个元素和堆顶元素对换,然后自定向下sift down,如果现在顶端的元素比下方两个子节点的元素大,那么将他和其中小的那个对换,把对调的那个元素看做堆顶,重复刚才的过程,知道达到底部或者中间哪一层发现不需要交换 其实堆的操作网上应该会查到很多吧,而且可能会有图示,比我在这里描述要好多了啊

for (int i = 0 ; i < ary.count - 1 ; i ++) { for (int j = 0 ; j < ary.count - i - 1; j ++) { if (ary[j] > ary[j + 1] ) { int temp = ary[j]; ary[j] = ary[j + 1]; ary[j + 1] = temp; } } }以上是对数组 从小到大排序 之后删除第一个元素的值

同地大18?静态数组的存储空间是固定的,删除元素的话,只要把后面的元素往前移就行了 void del(int a[];int x) { int len = sizeof(a)/sizeof(a[0]); x=n-1; for(int i=x;i<len-1;i++) { a[i]=a[i+1]; } }

相关搜索:

网站地图

All rights reserved Powered by www.gsyw.net

copyright ©right 2010-2021。
www.gsyw.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com