Вы находитесь на странице: 1из 3

1) #include <stdio.h> #include <stdlib.

h> typedef struct agenda { char nome[100]; int numero; struct agenda * prox; } t_agenda; int main() { int i; t_agenda * pessoa; pessoa= (t_agenda*) malloc(sizeof(t_agenda)*10); for (i=0; i<2; i++) { printf("Digite o nome: \n"); scanf("%[ -~]", &pessoa[i].nome); getchar(); printf("Digite o numero telefonico: \n"); scanf("%d", &pessoa[i].numero); getchar(); } for (i=0; i<2; i++) { printf("O nome e: %s\n", pessoa[i].nome); printf("O numero telefonico e: %d\n", pessoa[i].numero); } free(pessoa); getchar(); getchar(); } 2) As listas so formadas por um conjunto de dados de forma a preservar a relao de ordem linear entre eles e esses dados so conhecidos como ns e eles podem ser seqenciais ou encadeadas. 3)A lista seqencial explora a seqencialidade da memria do computador e os ns so armazenados em posies consecutivas. Sua vantagem o acesso direto a qualquer elemento da lista, em tempo constante e sua desvantagem a movimentao na hora de inserir ou retirar um elemento e tem tamanho mximo prestimado. 4) A lista encadeada tem seqencia de elementos encadeados por ponteiros e cada n possui um ponteiro para o prximo elemento. Suas vantagens so: no precisa deslocar elementos nas operaes de inserir e remover; permite o crescimento da lista em tempo de execuo; no tem tamanho mximo, o limite a memria do computador. Sua desvantagem que para acessar qualquer elemento necessrio percorrer a lista, at ach-lo. 5)a. int inserir(t_lista * lista, int pos, t_elemento el){ if(isCheia(lista)) || (pos<0) || (pos> lista->N+1) return 0; deslocaDireita(lista, pos); lista->vetor[pos] = el; (lista -> N)++; } b. int inserir(t_lista *lista, int pos, t_elemento dado){

t_no*p, *novo; if(pos == 0){ novo =criaNo(); if(novo == NULL) return 0; novo->dado = dado; novo->prox = *lista; *lista = novo; return 1; } p = getNo(*lista, pos-1); if (p == NULL) return 0; novo = criaNo(); if (novo == NULL) return 0; novo->dado = dado; novo->prox = p->prox; p->prox = novo; return 1; } 6)a. int remover(t_lista *lista, int pos){ if((pos > lista->n) || (pos < 0)) return 0; deslocaEsquerda(lista, pos); (lista->n)--; return 1; } b. int remover(t_lista *lista, int pos){ t_no *anterior, p; if(isVazia(*lista)) return 0; if (pos == 0){ p = *lista; *lista = p-> prox; }else{ anterior = getNo(*lista, pos-1); if (anterior == NULL) return 0; p = anterior -> prox; if(p == NULL) return 0; anterior->prox = p-> prox; } free(p); return 1; } 7)a. int getPosicao(t_lista*lista, t_elemento dado){ int i; for (i=0; i<=lista->n; lista++) if (compara(lista->vetor[i], dado)==0); return i; return -1; }

int compara(t_elemento dado1, t_elemento dado2){ return strcmp(dado1.nome, dado2.nome); } b. int getPosicao(t_lista lista, t_elemento dado){ int n = 0; while(lista != NULL){ if(compara(lista->dado, dado)==0) return n; lista = lista->prox; n++; } return -1; } int compara(t_elemento dado1, t_elemento dado2) return strcmp(dado1.nome, dado2.nome); } 8) Lista Circular: ltimo elemento aponta para o primeiro, e no mais para NULL. possvel atingir qualquer elemento da lista estando em qualquer n. No h mais o primeiro e o ltimo n. Tem-se um crculo. Convencionalmente utiliza-se como ponteiro para a lista um ponteiro para o ltimo elemento. Tem-se acesso direto ao ltimo e primeiro elemento. As mesmas desvantagens das listas encadeadas sendo que essa gasta mais memria.

9) Lista Duplamente encadeada: possvel percorrer a lista em ordem inversa; O n atual enxerga o antecessor e o sucessor; Remoo mais simples; Se tiver no n a ser removido, direta; ltimo e primeiro ns so equivalentes; Quando circular, engloba todas as vantagens da circular; Desvantagem: Mais memria com o ponteiro extra;

10) Lista seqencial: chip de celular, relgio digital. Lista encadeada: sistemas de cadastro tais como o sistema acadmico do UNIPE, sistema de locao de DVD.

Вам также может понравиться