Como criar uma lista ligada em C Programming

Na programação C, se você quiser adicionar uma segunda estrutura de código que você já criou, crie uma lista ligada - uma série de estruturas que contêm ponteiros para o outro. Juntamente com os dados de base de uma estrutura, a estrutura contém um ponteiro, o qual contém o endereço da próxima estrutura na lista.

Com alguns malabarismos inteligente de nomes ponteiro, além de um nulo para coroar o final da lista, você pode acabar com algo parecido com o código-fonte em um exemplo lista vinculada primitivo.

UM EXEMPLO lista ligada PRIMITIVA

#include #include #include int main () {estoque struct {símbolo char [5] -int quantidade-float estoque preço-struct * próxima -} - Stock struct * primeira struct Estoque * estoque atual-struct * novo - / * Criar estrutura na memória * / first = (estoque struct *) malloc (sizeof (struct estoque)) - se (primeira == null) {puts ( "Algum tipo de malloc () de erro") - exit (1) -} / * Os dados de estrutura Assign */current=first-strcpy(current->symbol,"GOOG")-current->quantity=100-current->price=801.19-current->next=NULL-new=(struct Estoque *) malloc (sizeof (struct estoque)) - se (nova == null) {puts ( "Outra malloc () error")-exit(1)-}current->next=new-current=new-strcpy(current->symbol,"MSFT")-current->quantity=100-current->price=28.77-current->next=NULL-/* banco de dados de exibição * / puts ( "Investimento Portfolio")-printf("SymboltSharestPricetValuen")-current=first-printf("%-6st%5dt%.2ft%.2fn",current->symbol,current->quantity,current->price,current->quantity*current->price)-current=current->next-printf("%-6st%5dt%.2ft%.2fn",current->symbol,current->quantity,current->price,current->quantity*current->price)-return(0)-}

Este código-fonte é bastante longo, mas ele simplesmente cria uma segunda estrutura, ligada à primeira. Não deixe que o comprimento do código-fonte intimidá-lo.

As linhas 13 a 15 declaram os ponteiros de três estrutura padrão que são necessários para uma lista ligada dança. Tradicionalmente, eles são pela primeira vez chamado, atuais e novos. Eles desempenham no quarto membro da estrutura, próxima, encontrado em linha 11, que é uma estrutura de ponteiro.

Não utilize typedef para definir uma nova variável de estrutura durante a criação de uma lista ligada. não um primitivo Linked-List Exemplo não usar typedef, por isso não é um problema com o código, mas muitos programadores C usar typedef com as estruturas. Seja cuidadoso!

O nome da variável novo, usado na linha 15, é uma palavra reservada em C ++, por isso, se você quer ser bilíngüe, mudar o nome da variável para new_struct ou para algo que não seja a palavra nova.

Quando a primeira estrutura é preenchida, linha 30 atribui um ponteiro NULL para o próximo elemento. Esse valor NULL tampa o fim da lista ligada.

Linha 32 cria uma estrutura, colocando o seu endereço na nova variável ponteiro. O endereço é salvo na primeira estrutura na linha 38. É assim que a localização da segunda estrutura é mantida.

Linhas 40 a 43 preencher as informações para o segundo ponteiro, atribuindo um valor NULL para o próximo elemento na Linha 43.

A ligação tem lugar como o conteúdo das estruturas são exibidos. Linha 48 capta o endereço da primeira estrutura. Então Linha 54 capta o endereço da próxima estrutura a partir da primeira estrutura.

Exercício 1: Digite o código-fonte de um exemplo lista vinculada Primitive em seu editor. Mesmo que seja longa, digite-o porque você vai precisar para editá-lo novamente mais tarde (se você não está acostumado a isso por agora). Construir e executar.

image0.jpg

Ao contrário de matrizes, estruturas em uma lista vinculada não são numeradas. Em vez disso, cada estrutura é ligada à seguinte estrutura na lista. Contanto que você sabe o endereço da primeira estrutura, você pode trabalhar através da lista até o fim, que é marcado por um NULL.

A Primitive Exemplo lista ligada mostra algum código-fonte desleixado com lotes de código repetido. Quando você vê várias declarações como essa em seu código, você deve pensar imediatamente nº 147-funções # 148;.

UM EXEMPLO lista ligada MELHOR

#include #include #include #define ITENS 5struct estoque {símbolo char [5] -int quantidade-float estoque preço-struct * próxima -} - Stock struct * primeira struct Estoque * estoque atual-struct * estoque nova-struct * make_structure (void) fill_structure -void (estoque struct * a, int c) show_structure -void (estoque struct * a) -INT main () {int x-for (x = 0-xnext = new-current = recém-} fill_structure ( atual, x + 1) -} observação de correntes> next = NULL - / * banco de dados de exibição * / puts ( "investimento de carteira") - printf ( "Símbolo tShares tPrice tvalor n") - atual = first-while ( atual) {show_structure (atual) -current = observação de correntes> NEXT-} return (0) -} estoque struct * make_structure (void) {struct Estoque * aa = (estoque struct *) malloc (sizeof (struct estoque)) - se (a == null) {puts ( "Algum tipo de malloc () de erro") - exit (1) -} return (a) -} fill_structure void (estoque struct * a, int c) {printf ( "item #% d /% d: n ", c, PONTOS) -printf (" símbolo de Stock: ") -scanf ("% s ", a-> símbolo) -printf (" Número de ações: ") -scanf ("% d ", a-> quantidade) -printf (" preço das ações: ") -scanf ("% f ", a-> preço) -} show_structure void (estoque struct * a) {printf ("% - 6s t% 5d ​​t% .2f t% .2f n ", a-> símbolo, a-> quantidade, a-> preço, a-> quantidade * a-> preço) -}

listas mais vinculados são criados como mostrado em uma melhor Linked-List Exemplo. A chave é usar três variáveis ​​de estrutura, mostrado nas linhas 13 a 15:

  • primeiro contém sempre o endereço da primeira estrutura na lista. Sempre.

  • corrente contém o endereço da estrutura a ser trabalhado, preenchido com dados, ou exibido.

  • novo é o endereço de uma nova estrutura criada usando a função malloc ().

A linha 7 declara a estrutura de ações como global. Dessa forma, ele pode ser acessado de várias funções.

O laço entre as linhas 25 e 39 cria novas estruturas, ligando-os juntos. A estrutura inicial é especial, por isso, seu endereço é guardado na Linha 30. Caso contrário, uma nova estrutura é alocada, graças à função make_structure ().

Na Linha 35, a estrutura anterior é updated- o valor atual não é alterado até Linha 36. Antes que isso aconteça, o ponteiro na estrutura atual é atualizado com o endereço da próxima estrutura, novo.

Na linha 40, o fim da lista ligada é marcado, redefinindo o novo ponteiro na última estrutura de um nulo.

O loop while na linha 46 exibe todas as estruturas na lista ligada. A condição do circuito é o valor do ponteiro actual. Quando o NULL é encontrado, o ciclo pára.

O resto do código mostrado em A Exemplo lista ligada Melhor consiste de funções que são bastante auto-explicativo.

exercício 2: Copie o código a partir de um exemplo melhor-lista vinculada no editor. Construir e executar.

Tome nota das declarações scanf () na função fill_structure (). Lembre-se que a -> é o # 147 Peeker # 148- notação para um ponteiro. Para obter o endereço, você deve prefixar a variável com um na função scanf ().

menu