スタック、配列実装、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