スタック、配列実装、c言語手書き
6420 ワード
int heap[MAX_N];
int sz = 0;
void push(int x)
{
//
int i = sz++;
while(i > 0)
{
int p = (i - 1) / 2; //
// , ;
if(heap[p] <= heap[i]) break;
//
heap[i] = heap[p]; // ,
// i
i = p;
}
// 。
heap[i] = x;
}
int pop()
{
//
int ret = heap[0];
//
int x = heap[sz--];
//
int i = 0;
while(i * 2 + 1 < sz)
{
//
int a = i * 2 + 1;
int b = i * 2 + 2;
// , a ,
if(b < sz && heap[b] < heap[a]) a = b;
// ,
if(heap[a] >= x) break;
//
heap[i] = heap[a];
i = a;
}
heap[i] = x;
return ret;
}
ただし、手書きスタックc++の優先順位キューSTLのpriority_は一般的に必要ありません.queue