Basicamente, uma matriz é um conjunto de objetos de dados semelhantes armazenados em locais de memória sequencial sob um título comum ou um nome de variável.
Enquanto uma lista encadeada é uma estrutura de dados que contém uma seqüência dos elementos onde cada elemento está vinculado ao seu próximo elemento. Existem dois campos em um elemento da lista vinculada. Um é o campo Dados e outro é o campo do link. O campo Dados contém o valor real a ser armazenado e processado. Além disso, o campo de link contém o endereço do próximo item de dados na lista vinculada. O endereço usado para acessar um determinado nó é conhecido como um ponteiro.
Outra diferença significativa entre uma matriz e uma lista vinculada é que a Matriz tem um tamanho fixo e precisa ser declarada antes, mas a Lista vinculada não está restrita ao tamanho e se expande e se contrai durante a execução.
Gráfico de comparação
Base para Comparação | Matriz | Lista vinculada |
---|---|---|
Basic | É um conjunto consistente de um número fixo de itens de dados. | É um conjunto ordenado que compreende um número variável de itens de dados. |
Tamanho | Especificado durante a declaração. | Não há necessidade de especificar; crescer e encolher durante a execução. |
Alocação de Armazenamento | A localização do elemento é alocada durante o tempo de compilação. | A posição do elemento é atribuída durante o tempo de execução. |
Ordem dos elementos | Armazenado consecutivamente | Armazenado aleatoriamente |
Acessando o elemento | Acesso direto ou aleatório, ou seja, Especifique o índice da matriz ou subscrito. | Acessado sequencialmente, ou seja, Traverse a partir do primeiro nó na lista pelo ponteiro. |
Inserção e exclusão de elemento | Lenta relativamente conforme a mudança é necessária. | Mais fácil, rápido e eficiente. |
Procurando | Pesquisa binária e pesquisa linear | pesquisa linear |
Memória necessária | Menos | Mais |
Utilização de memória | Ineficaz | Eficiente |
Definição de matriz
Uma matriz é definida como um conjunto de um número definido de elementos ou itens de dados homogêneos. Isso significa que uma matriz pode conter apenas um tipo de dados, seja todos os inteiros, todos os números de ponto flutuante ou todos os caracteres. A declaração de um array é a seguinte:
int a [10];
Onde int especifica os tipos de dados ou os armazenamentos de matriz de elementos de tipo. “A” é o nome de uma matriz, e o número especificado dentro dos colchetes é o número de elementos que uma matriz pode armazenar; isso também é chamado de tamanho ou comprimento da matriz.
Vamos ver alguns dos conceitos a serem lembrados sobre arrays:
- Os elementos individuais de uma matriz podem ser acessados descrevendo o nome da matriz, seguido por índice ou índice (determinando a localização do elemento na matriz) dentro dos colchetes. Por exemplo, para recuperar o quinto elemento da matriz, precisamos escrever uma declaração a [4].
- Em qualquer caso, os elementos de um array serão armazenados em um local de memória consecutivo.
- O primeiro elemento da matriz tem um índice zero [0]. Isso significa que o primeiro e último elemento será especificado como [0] e [9] respectivamente.
- O número de elementos que podem ser armazenados em uma matriz, isto é, o tamanho de uma matriz ou seu comprimento é dado pela seguinte equação:
(limite superior e inferior) + 1
Para o array acima, seria (9-0) + 1 = 10. Onde 0 é o limite inferior da matriz e 9 é o limite superior da matriz. - Arrays podem ser lidos ou escritos através do loop. Se lermos o array unidimensional, ele requer um loop para leitura e outro para escrever (imprimir) o array, por exemplo:
uma. Para ler uma matriz
para (i = 0; i <= 9; i ++)
{scanf ("% d” e & a [i]); }
b. Para escrever um array
para (i = 0; i <= 9; i ++)
{printf ("% d", a [i]); } - No caso de uma matriz 2-D, seriam necessários dois loops e, da mesma forma, o array n-dimensional precisaria de n loops.
Operações realizadas em matrizes são:
- Criação de array
- Atravessando uma matriz
- Inserção de novos elementos
- Exclusão de elementos obrigatórios.
- Modificação de um elemento.
- Fusão de matrizes
Exemplo
O programa a seguir ilustra a leitura e a escrita da matriz.
#include
#include
void main ()
{
int a[10], i;
printf("Enter the array");
for ( i= 0; i <= 9; i++)
{
scanf ( "%d", &a[ i ] ) ;
}
printf( "Enter the array" );
for (i = 0 ; i <= 9 ; i++)
{
printf ( "%d\n", a[ i ] ) ;
}
getch ();
}
Definição de lista vinculada
Lista vinculada é uma lista particular de alguns elementos de dados ligados uns aos outros. Neste, cada elemento aponta para o próximo elemento que representa a ordem lógica. Cada elemento é chamado de nó, que tem duas partes.
INFO parte que armazena a informação e POINTER que aponta para o próximo elemento. Como você sabe para armazenar endereços, temos estruturas de dados únicas em C chamadas ponteiros. Portanto, o segundo campo da lista deve ser um tipo de ponteiro.
Os tipos de listas vinculadas são Lista vinculada individualmente, Lista vinculada dupla, Lista vinculada circular, Lista vinculada dupla circular.
As operações realizadas na lista vinculada são:
- Criação
- Travessia
- Inserção
- Eliminação
- Procurando
- Concatenação
- Exibição
Exemplo
O snippet a seguir ilustra a criação de uma lista vinculada:
struct node
{
int num;
stuct node *next;
}
start = NULL;
void create()
{
typedef struct node NODE;
NODE *p, *q;
char choice;
first = NULL;
do
{
p = (NODE *) malloc (sizeof (NODE));
printf ("Enter the data item\n");
scanf ("%d", & p -> num);
if (p == NULL)
{
q = start;
while (q -> next ! = NULL)
{ q = q -> next
}
p -> next = q -> next;
q -> = p;
}
else
{
p -> next = start;
start = p;
}
printf ("Do you want to continue (type y or n) ? \n");
scanf ("%c", &choice) ;
}
while ((choice == 'y') || (choice == 'Y'));
}
Principais diferenças entre matriz e lista vinculada
- Uma matriz é a estrutura de dados que contém uma coleção de elementos de dados de tipo semelhante, enquanto a lista Vinculada é considerada como estrutura de dados não primitiva contém uma coleção de elementos vinculados desordenados conhecidos como nós.
- Na matriz, os elementos pertencem a índices, ou seja, se você deseja entrar no quarto elemento, é necessário escrever o nome da variável com seu índice ou localização dentro do colchete.
Em uma lista encadeada, você precisa começar da cabeça e trabalhar até chegar ao quarto elemento. - Enquanto o acesso a um array de elementos é rápido, enquanto a lista Linked leva tempo linear, é um pouco mais lento.
- Operações como inserção e exclusão em matrizes consomem muito tempo. Por outro lado, o desempenho dessas operações em listas vinculadas é rápido.
- Matrizes são de tamanho fixo. Em contraste, as listas vinculadas são dinâmicas e flexíveis e podem expandir e contrair seu tamanho.
- Em uma matriz, a memória é atribuída durante o tempo de compilação, enquanto em uma lista vinculada é alocada durante a execução ou o tempo de execução.
- Os elementos são armazenados consecutivamente em matrizes, enquanto armazenados aleatoriamente em listas vinculadas.
- O requisito de memória é menor devido aos dados reais que estão sendo armazenados no índice na matriz. Ao contrário, há uma necessidade de mais memória nas Listas Vinculadas devido ao armazenamento de elementos de referência adicionais próximos e anteriores.
- Além disso, a utilização de memória é ineficiente no array. Por outro lado, a utilização de memória é eficiente na matriz.
Conclusão
As listas Array e Linked são os tipos de estruturas de dados que diferem em sua estrutura, métodos de acesso e manipulação, requisito de memória e utilização. E tem vantagens e desvantagens particulares em relação à sua implementação. Consequentemente, qualquer um pode ser usado conforme a necessidade.