问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一计算机数据结构题解

发布网友 发布时间:2023-09-11 10:33

我来回答

2个回答

热心网友 时间:2023-09-17 16:49

以最大堆为例,给一个建堆的算法,
楼主要的保持堆的性质的算法,只要选取其中一段程序就行了~~~

//******************
// 6.3_1 建堆
// Date 2007.02.13
//******************

#include <iostream>
using namespace std;

const int maxn = 1000;

void max_heapify( int A[maxn], int i, int heap_size )
{
int l, r, largest, temp;

l = 2 * i;
r = 2 * i + 1;

if (( l <= heap_size ) && ( A[l] > A[i] ))
largest = l;
else
largest = i;
if (( r <= heap_size ) && ( A[r] > A[largest] ))
largest = r;
if ( largest != i ) {
temp = A[i];
A[i] = A[largest];
A[largest] = temp;

max_heapify( A, largest, heap_size );
}
}

void build_max_heap( int A[maxn], int n )
{
int i;

for (i = n / 2; i >= 1; i--)
max_heapify( A, i, n );
}

int main()
{
int i, n;
int A[maxn];

cin >> n;

for (i = 1; i <= n; i++)
cin >> A[i];

build_max_heap( A, n );

for (i = 1; i < n; i++)
cout << A[i] << ' ';

cout << A[n] << endl;

return 0;
}

热心网友 时间:2023-09-17 16:50

算法很简单阿,以最大堆为例:
1. top = n+1;
2. top = top/2; if(top == 0) return;
3. top_lchid = top*2, top_rchid=top*2+1;
取(top_lchid,top_rchid)大者,如果其大于k(top)则与k(top)交换;
4. 转到2。

//C代码:
#include <stdio.h>
#include <time.h>

static const int BUFLEN = 1024;

void getHeap(int heap[], int n)
{
if(n <= 0) return;
int top = (n-1)/2;
int left , right;
while(1)
{
left = top *2+1;
right = top *2+2;
if(right<=n && heap[right]>heap[left] )
{
if(heap[right]<=heap[top]) break;
heap[top] = heap[top] + heap[right];
heap[right] = heap[top] - heap[right];
heap[top] = heap[top] - heap[right];
}
else if(heap[left]>heap[top])
{
heap[top] = heap[top] + heap[left];
heap[left] = heap[top] - heap[left];
heap[top] = heap[top] - heap[left];
}
else break;
if(top == 0) break;
top = (top-1)/2;
}
}//12 35 46 25 32 1 5 64 58 48 125 478 254 365 123 456 458 456 -1

void main()
{
int heap[BUFLEN];
int data,n = -1;
printf("Input a numbers(end with -1):");
while(n<BUFLEN)
{
scanf("%d", &data);
if(data < 0) break;
heap[++n] = data;
getHeap(heap,n);
printf("Result Heap: ");
for(int i=0; i<n; ++i) printf("%d,",heap[i]);
printf("%d\n",heap[n]);
}
printf("Result Heap: ");
for(int i=0; i<n; ++i) printf("%d,",heap[i]);
printf("%d\n",heap[n]);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
"你是在哪看到我的照片?"怎么说英语 留恋地看着我的照片用英语怎么说? 高德iphone地图下载 苹果手机高德地图怎么下载地图 孕中期适合出游吗 哪些孕妇不适合长途旅行 孕妇坐长途车旅行的好处 孕妇出游的最佳时间 孕晚期适合出游吗 孕妇外出旅行禁忌 小米11烧wifi啥表现 从太原火车站到天天浴乐园坐几路车到那里下车就到了! 财经大学倒天天娱乐园怎么走 我在耐火宿舍住开车到太原天天浴乐园怎么走 在小店昌盛街到天天浴乐园怎么坐公交车 英文占几个字节 清明节佛前忘了供灯,第二天供灯可以吗? 如果我的信用卡被盗刷了怎么办? 虎皮鹦鹉下蛋后没共鸟会孵化小鸟吗? 私闯民宅包不包括院子 进入院子算不算私闯民宅? 安慰受灾的暖心句子 别克凯越2014款发动机参数 新买的电动车充电充了20个小时才充满正常吗? 电动车电量剩%20 需要充电多久, ? 一心一路的解释 有没有什么自由度很高的手机游戏?比如像》《战舰打造》之内的?_百度知 ... 怎样在安卓手机上下载战舰工艺和战舰打造 安卓有没有类似工艺战舰之类的建造游戏啊,尽量是单击的啊,我的世界就算... 英国插头与新加坡插头有何区别? 甲醇交割价格多好还是少好呢 梦见男朋友的爸爸是什么意思 纸婚新娘(番外完结)小说txt全集免费下载 详细,信用卡被盗刷了怎么办 推荐一些好看的小说,书荒啊!!! 广济寺可以供灯吗 台机和笔记本能用Realtek瑞昱RTL8191SU无线网卡上网吗? 韩国一男一女的组合有那些 ...今天我牡丹鹦鹉生了一个白蛋 不过没有公鹦鹉 就母的一只。不过被我... 我是合肥精英专升本八月一期财经校区的学员,什么时候准备过去,办理住宿... 永康飞龙山寺庙叫什么 江西财经大学宿舍条件 2020年6月广州番禺莲花山开放时间? 辽宁葫芦岛莲花山景区开放没 怎么安慰洁癖的朋友 750KV变电站 西安电力机械制造公司的建设发展 庆北750千伏输变电工程开工时间 宝鸡至汉中750千伏输电线路什么时间开工 ...港剧网在线观看2020,【免费高清】在线观看百度网盘资源 郫县旅游导游词