A lista double-linked

Video: Популярные Video – Связный список и Doubly linked list

listas ligadas pode ser bastante útil, por uma série de razões - embora eles levar algum tempo para envolver sua mente em torno do conceito. O que é pior? A lista double-ligados.

Video: Python: Doubly Linked Lists

Ao invés de simplesmente ligar para a frente para a próxima estrutura, uma Lista de double-linked também liga para trás, para a estrutura anterior.



O código a seguir demonstra um programa lista interativa, double-ligados. É enorme. Compará-lo com o código-lista ligada neste livro para ver os passos adicionais tomadas para manter ambos os ponteiros dianteira e traseira dentro da estrutura.

Video: Singly-Linked Lists

/ * Um DUPLO interativo programa de lista ligada * // * Dan Gookin, começando Programação com C For Dummies * / # include #include #include struct típico {int valor struct típico * next-estrutura típica * anterior -} - struct típico * primeira-estrutura típica * atual-estrutura típica * novo menu-int (void) -void adicionar (void) mostram -void (void) -void delete (void) despejo -void (void) -struct típico * criar (void) - / * a principal função funciona com entrada only.Everything o resto é tratado por uma função * / int main) {escolha (int = `` - / * obter o loop while para girar * / first = NULL-while (escolha =` Q `) {escolha = menu () - switch (escolha) {case `S`: show () - break-caso `A`: add () - break-caso `R`: delete () - break-case` D `: dump () - break-caso `Q`: break-default: break -}} return (0) -} / * exibir o menu principal e recolher entrada * menu / int (void) {int ch-printf ("S) como, A) dd, R) emova, D) UMP, Q) uit: ") CH = getchar () - enquanto (getchar () = `n`) / * remover o excesso de entrada * / - retorno (toupper (ch)) -} / * Adicionar um item ao final da lista * ligado / Void Adicionar (void) {if (primeira == null) / * caso especial para o primeiro item * / {first = create () - atual = primeiro-corrente gt; previous = nulo} else / * encontrar o último item * / {current = primeiro-while (corrente gt; seguinte) / * último item == NULL * / corrente = corrente gt; next-novos = create () - corrente gt; next = novo - / * link de atualização * / nova gt; = anterior corrente circulante = novo-} printf ("Digite um valor: ") -scanf ("% d",&! Corrente gt; valor) -current-gt; next = NULL-while (getchar () = `n`) / * remover o excesso de entrada * / -} / * Apresentar todas as estruturas na lista ligada * / void show (vazio ) {int count = 1-se (primeiro == NULL) / * esta lista está vazia * / {coloca ("Nada para mostrar") -return-} puts ("Mostrando todos os registros:") -current = primeiro-while (atual) / * último registro == NULL * / {printf ("Registro% d:% dn", Contagem, corrente gt; valor) -current = corrente gt; da próxima contagem ++ -}} / * Remover um registro da lista * / void delete (void) {int r, c-se (primeiro == NULL) / * verificar se há lista vazia * / {puts ("Não há registros para remover") -return-} puts ("Escolha um registro para remover:") -show () - printf ("Registro: ") -scanf ("% d",&r) -Ao (getchar () = `n`) / * remover o excesso de entrada * / -!! c = 1-corrente = primeira enquanto (c = r) {if (== corrente NULL) / * assegurar que ` r` é na gama / * {coloca ("Registro não encontrado") -return-} corrente = corrente gt; próxima-c ++ -} se (corrente gt; == anterior NULL) / * caso especial para a primeira ficha * / {= primeira corrente gt; próxima-primeiro-gt; precedente = nulo} else / * ponto de registo anterior na seguinte * / {corrente gt;-próxima gt; = anterior corrente gt; prévio-corrente gt;-anterior gt; = próxima corrente gt; NEXT-} printf ("Registro% d removed.n", R) -livre (atual) - / * memória liberação * /} / * referências ponteiro exibir na lista ligada * // * Copiado principalmente a partir do show () função * / void despejo (void) {int count = 1- if (primeira == null) / * esta lista está vazia * / {puts ("Nada para despejar") -return-} puts ("referências de ponteiro") = -current primeira printf ("registro #tPrevioustCurrenttNextn") -enquanto (atual) / * último registro == NULL * / {printf ("Registro% d: t% pt% pt% pn", Contar, corrente gt; anterior, corrente, corrente gt; próxima) -current = corrente gt;-contagem seguinte ++ -}} / * construir uma estrutura vazia e voltar a sua endereço * / struct típico * criar (void) { struct típico * aa = (* struct típico) malloc (sizeof (struct típico)) - if (a == null) {puts ("Algum tipo de malloc () erro") -exit (1) -} return (a) -}

Publicações relacionadas