Para cada magnitude de uma amostra, para considerarmos elas um pico, basta que ela cumpra uma dessas duas condições:
A magnitude seja menor que seus dois vizinhos;
A magnitude seja maior que seus dois vizinhos.
Sendo que, como se trata de um loop, o vizinho à esquerda da primeira magnitude é a última e o vizinho à direita da última magnitude é a primeira. Confira a página Deslocar dentro de um intervalo [0, N - 1] para entender melhor porque as operações (i + 1) % N e ((i - 1) + N) % N funcionam para acessarmos os vizinhos da direita e da esquerda respectivamente.
#include <stdio.h>
int main(){
int amostras[10001];
int N, anterior, proximo, picos;
while(scanf("%d", &N)){
if(!N) break;
for(int i = 0; i < N; ++i){
scanf("%d", &amostras[i]);
}
picos = 0;
for(int i = 0; i < N; ++i){
anterior = amostras[((i - 1) + N) % N];
proximo = amostras[(i + 1) % N];
if((amostras[i] < anterior && amostras[i] < proximo) || (amostras[i] > anterior && amostras[i] > proximo)) ++picos;
}
printf("%d\n", picos);
}
return 0;
}