C语言中的堆和栈的定义?

时间:2015.10.14 发布人:物雨霏霏

C语言中的堆和栈的定义?

已解决问题

谷歌物雨霏霏用户在2015.10.14提交了关于“暴力摩托C语言中的堆和栈的定义?”的提问,欢迎大家涌跃发表自己的观点。目前共有2个回答,最后更新于2025-02-14T04:32:05。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,你无异于雪中送炭,让我感激涕零 !

希望以下的回答,能够帮助你。

第1个回答

用户名:来自Cool熊  

在**结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种**结构:堆和栈。

堆和栈都是一种**项按序排列的数问答据结构。

栈就像装**的桶或箱子

我们先从大家比较食来社十超蒸呢熟悉的栈说起吧,它是一老责做种具有后进先出性质的**结构,也就是说后存放的先取,先存放的后取。

这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比假单装较晚的物体)。

堆像一棵倒过来的树

而堆就不同了,堆是一种经过排序的树形**结构,每个结点都有一个值。


通常我们所说的堆的**结于快令染晶围游构,是指二叉堆。

堆的考机步杆病斯目机举端爱特点是根结点的值最小(或最大),且根结点的两个子讨般笔增树也是一个堆。

由于堆的这个特性,常用来实现优先划亲黑队列,堆的存取是随意,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取出我们想要的书。


第2个回答

用户名:飞机上来吧  

堆算

#include<stdio.h>

//heapsort
voidheapSort(inta[],intn);

//print
v义构训面京冷酸oidprint(inta[],intn);

卫衣石体举intmain()
{
局随及守坚识血intn;
inta[]={2,64,42础毛秋煤,5,67,8,79,0,90,8,7,8,7,6,45,34,21,2,43,645,7,9,9,8,6,7,546,4};
n=sizeof(a)/sizeof(int);
//sort
heapSort(a,n);
//print
print(a,n);
}

voidchange(inta[],inti,intj)
{
inttemp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
voidshi拉ftDown(inta[],intleft,intright)
{
inti,j;
i=left;
j=i*2+1;
while(j<=right)
{
if(j+1<=right&&a[j]<a[j+1])j++;
if(a[j]>a[i])
{
change(a,i,j);
i=j;
j=j*2+1;
}
else
bre**;

}

}
voidcreateh**eap(inta[],intn)
{
inti=0;
for(i=(n-2)/2;i>=0;i--)
?shiftDown(a,i,n-1);
}
voidheapSort(inta[],intn)
{
inti;
inttemp;
createh**eap(a,n);
for(i=n-1;i>0;)
{
temp=a[0];
a[0]=a[i];
a[i]=temp;
shiftDown(a,0,--i);

}
}

//printthesortedarray
voidprint(inta[],intn)
{
inti;
for(i=0;i<n;i++)
printf("%d",a[i]);
}