#include #include typedef struct No{ int dado; struct No* prox; } No; typedef struct No * p_no; p_no criar_lista(){ return NULL; } // O(1) p_no adicionar_elemento(p_no lista, int x){ p_no novo = (p_no) malloc(sizeof(No)); novo->dado = x; //equivalente a (*novo).dado = x; novo->prox = lista; return novo; } // O(n) void imprime_lista(p_no lista){ if(lista == NULL) return; printf("%d ", lista->dado); imprime_lista(lista->prox); } // n operações //O(n) void libera_lista(p_no lista){ if(lista == NULL) return; libera_lista(lista->prox); free(lista); } //O(n) int acessa(p_no lista, int k){ p_no atual = lista; int i = 0; while(lista != NULL){ if(i == k) return atual->dado; i++; atual = atual->prox; } return 0; } // 2 operações + 2k operações // interessado no PIOR CASO // 2 + 2n operações // Podemos ignorar termos de menor ordem // 2n // 4n vs 2n ... 1n² vs 500 * n // ignorar constantes // n // O(n) vs O(n^2) vs O(n^3) //constantes // O(1) int main(int argc, char * argv[]){ for (int i = 0; i < argc; i++){ printf("%s\n", argv[i]); } p_no lista = criar_lista(); lista = adicionar_elemento(lista, 11); lista = adicionar_elemento(lista, 12); lista = adicionar_elemento(lista, 13); imprime_lista(lista); printf("\n"); printf("%d\n", acessa(lista, 1)); libera_lista(lista); lista = NULL; return 0; }