Tenho um exercício pra fazer em C em que tenho uma lista sequencial não ordenada e que pode ter chaves repetidas e preciso retornar quantas vezes um numero x aparece nessa lista.
acontece que acredito que meu código está lendo somente a primeira posição e retornando o resultado. O metodo ocorrrencias precisa funcionar
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include<stdbool.h>
#define MAX 50
typedef struct{
int chave;
} REGISTRO;
typedef struct {
REGISTRO A[MAX];
int nroElem;
}LISTA;
void inicializarListaSequencial(LISTA * lista) {
lista->nroElem = 0;
}
bool inserirElemListaSeq(int ch, int i, LISTA* l)
{
int j;
if((l->nroElem>=MAX)||(i<0)||(i>(l->nroElem)))
return false;
if((l->nroElem>0)&&(i<l->nroElem))
for(j=l->nroElem;j>=(i+1);++j){
l->A[j]=l->A[j-1];
}
l->A[i].chave=ch;
l->nroElem++;
return true;
}
void exibirLista(LISTA l) {
int i;
for (i=0; i < l.nroElem; i++)
printf("%d ", l.A[i].chave);
}
int ocorrencias (LISTA* l, int x){
int i;
int count=0;
for (i=0;i< l->nroElem; i++){
if(l->A[i].chave = x){
count++;
}
else count--;
}
if (count > 0){
return count;
}
else return -1;
}
int tamanho(LISTA*l) {
return(l->nroElem);
}
int main()
{
LISTA lista;
inicializarListaSequencial(&lista);
inserirElemListaSeq(5,0,&lista);
inserirElemListaSeq(5,1,&lista);
inserirElemListaSeq(6,2,&lista);
inserirElemListaSeq(5,3,&lista);
inserirElemListaSeq(4,4,&lista);
inserirElemListaSeq(5,5,&lista);
inserirElemListaSeq(3,6,&lista);
printf("Tamanho da Lista: %i\n",tamanho(&lista));
exibirLista(lista);
printf("Ocorrencias do número no vetor: %i\tEsperado: 4\n\n",ocorrencias(&lista, 5));}