Escolar Documentos
Profissional Documentos
Cultura Documentos
Listas Lineares
● Dados homogêneos (Vetores)
● Pilhas
2
Dados Homogêneos:
3
Vetor:
● Um dado vetor é definido como tendo um número fixo de células idênticas (seu
conteúdo é dividido em posições).
● Cada uma das células de um vetor possui seu próprio endereço, ou índice,
através do qual pode ser referenciada.
● Nessa estrutura todos os elementos são do mesmo tipo, e cada um pode receber
um valor diferente.
4
Dados Heterogêneos
● Uma estrutura de dados é chamada de heterogênea quando envolve
a utilização de mais de um tipo básico de dado (inteiro ou caractere,
por exemplo) para representar uma estrutura de dados.
●
Em C utiliza-se o comando struct para criação de registros.
5
Lista Linear:
● Lista linear é uma estrutura de dados na qual elementos de um
mesmo tipo de dado estão organizados de maneira sequencial.
Não necessariamente, estes elementos estão fisicamente em
sequência, mas a idéia é que exista uma ordem lógica entre eles.
Um exemplo disto seria um consultório médico: as pessoas na
sala de espera estão sentadas em qualquer lugar, porém sabe-se
quem é o próximo a ser atendido, e o seguinte, e assim por
diante. Assim, é importante ressaltar que uma lista linear permite
representar um conjunto de dados afins (de um mesmo tipo) de
forma a preservar a relação de ordem entre seus elementos.
Cada elemento da lista é chamado de nó, ou nodo.
6
Lista Linear:
Definição:
Conjunto de N nós, onde N ≥ 0, x1, x2, ..., xn, organizados de forma a refletir a
posição relativa dos mesmos. Se N ≥ 0, então x1 é o primeiro nó. Para 1 < k <
n, o nó xk é precedido pelo nó xk-1 e seguido pelo nó xk+1 e xn é o último nó.
Quando N = 0, diz-se que a lista está vazia. Exemplos de listas lineares:
Pessoas na fila de um banco;
Letras em uma palavra;
Relação de notas dos alunos de uma turma;
Dias da semana;
Vagões de um trem;
Pilha de pratos;
Cartas de baralho.
7
Lista Linear:
Alocação de uma lista
Quanto a forma de alocar memória para armazenamento de seu elementos,
uma lista pode ser:
Sequencial ou Contígua
Numa lista linear contígua, os nós além de estarem em uma sequência
lógica, estão também fisicamente em sequência. A maneira mais simples
de acomodar uma lista linear em um computador é através da utilização
de um vetor.
A representação por vetor explora a sequencialidade da memória de tal
forma que os nós de uma lista sejam armazenados em endereços
contíguos.
Encadeada
Os elementos não estão necessariamente armazenados sequencialmente
na memória, porém a ordem lógica entre os elementos que compõem a
lista deve ser mantida.
8
Lista Linear:
Operações com Listas
As operações comumente realizadas com listas são:
Criação de uma lista
Remoção de uma lista
Inserção de um elemento da lista
Remoção de um elemento da lista
Acesso de um elemento da lista
Alteração de um elemento da lista
Combinação de duas ou mais listas
Classificação da lista
Cópia da lista
Localizar nodo através de info
9
Lista Linear:
Tipos de Listas Lineares
Os tipos mais comuns de listas lineares são as:
pilhas
Uma pilha é uma lista linear do tipo LIFO - Last In First Out, o último elemento que
entrou, é o primeiro a sair. Ela possui apenas uma entrada, chamada de topo, a partir
da qual os dados entram e saem dela. Exemplos de pilhas são: pilha de pratos, pilha
de livros, pilha de alocação de variáveis da memória, etc.
filas
Uma fila é uma lista linear do tipo FIFO - First In First Out, o primeiro elemento a
entrar será o primeiro a sair. Na fila os elementos entram por um lado (“por trás”) e
saem por outro (“pela frente”). Exemplos de filas são: a fila de caixa de banco, a fila
do INSS, etc.
deques
Um deque - Double-Ended QUEue) é uma lista linear na qual os elementos entram e
saem tanto pela “pela frente” quanto“por trás”. Pode ser considerada uma
generalização da fila.
Assim o que vai distinguir os diferentes tipos de listas são as operações que se podem
realizar sobre as mesmas, podendo tanto serem implementadas com alocação sequencial
quanto com alocação encadeada.
10
Pilhas
Uma pilha é uma estrutura de dados que admite remoção de elementos
e inserção de novos objetos. Mais especificamente, uma pilha(= stack) é uma
estrutura sujeita à seguinte regra de operação: sempre que houver uma
remoção, o elemento removido é o que está na estrutura há menos tempo.
Pilhas
● Uma pilha é um conjunto ordenado de itens, no qual novos itens
podem ser inseridos e a partir do qual podem ser eliminados
itens de uma extremidade, chamada topo da pilha. Também é
chamada de lista linear, onde todas as inserções e eliminações
são feitas em apenas uma das extremidades, chamada topo. A
figura abaixo mostra a representação de uma pilha.
12
Pilha:
● A estrutura de dados do tipo pilha tem como característica que a
última informação a entrar é a primeira a sair (LIFO - last in irst
out). A estrutura em pilha tem os seguintes métodos ou funções:
– push - coloca uma informação na pilha (empilha).
13
Pilhas em C:
● Antes de programar a solução de um problema que usa uma
pilha, é necessário determinar como representar uma pilha
usando as estruturas de dados existentes na linguagem de
programação.
●
Uma pilha é um conjunto ordenado de itens, e a linguagem C já
contém um tipo de dado que representa um conjunto ordenado
de itens: o vetor.
●
Então, sempre que for necessário utilizar a estrutura de pilhas
para resolver um problema pode-se utilizar o vetor para
armazenar esta pilha. Mas a pilha é uma estrutura dinâmica e
pode crescer infinitamente, enquanto um vetor na linguagem C
tem um tamanho fixo; contudo, pode-se definir este vetor com
um tamanho suficientemente grande para conter esta pilha.
14
Pilhas em C: Exemplo 1
/* programa_pilha_01.c */
#include <iostream>
using namespace std;
int main()
{
cout<<"Colocando dados na pilha"<<endl;
push(10);
push(20);
push(30);
cout<<"Tamanho da pilha: "<<size()<<endl;
cout<<"Pegando dado da pilha:"<<pop()<<endl ;
cout<<"Pegando dado da pilha:"<<pop()<<endl ;
cout<<"Pegando dado da pilha:"<<pop()<<endl ;
cout<<"Tamanho da pilha: "<<size()<<endl;
system("pause");
return 0; 15
}
Pilhas em C: Exemplo 1
}
int pop() {
return (pilha[--pos]); /* Retorna o elemento do topo da pilha.*/
}
int size() {
return pos; /* retorna o topo da pilha */
}
int stacktop(){
return pilha[pos]; /* retorna o topo da pilha sem desempilhar */
}
16
Pilhas em C:
● Uma pilha em C pode ser declarada como uma estrutura
contendo dois objetos: um vetor para armazenar os elementos
da pilha e um inteiro para indicar a posição atual do topo da
pilha
● Exemplo:
struct pilha {
int topo;
int itens[TAMANHO_PILHA];
};
17
#include<iostream>
using namespace std;
#define TAMANHO_PILHA 100
18
int main()
{
struct pilha x;
x.topo = -1;
push(&x,10);push(&x,20);push(&x,30);push(&x,36);
system("pause");
return 0;
}
19
int empty(struct pilha *p) //empty - verifica se a pilha está vazia
{
if( p->topo == -1) return 1;
return 0;
}
int pop(struct pilha *p)//pop - retira uma informação da pilha (desempilha)
{
if( empty(p) )
{
cout<<"Pilha vazia"<<endl;
exit(1);
}
/* retorna o item da pilha atual e diminui a posição da pilha */
return (p->itens[p->topo--]);
}
void push(struct pilha *p, int e)
{
//push: coloca uma informação na pilha (empilha).
if( p->topo == (TAMANHO_PILHA - 1))
{
cout<<"Estouro da pilha"<<endl;
exit(1);
} /* após verificar se não haveria estouro na capacidade da pilha,
é criada uma nova posição na pilha e o elemento é armazenado */
p->itens[++(p->topo)] = e;
return; 20
}
Pilhas em C: Exemplo 2
21
Pilhas em C: Exercícios
1.Dada uma pilha P, construir uma função que inverte a ordem dos elementos
dessa pilha, utilizando apenas uma estrutura auxiliar. Definir adequadamente a
estrutura auxiliar e prever a possibilidade da pilha estar vazia.
2.Implemente um programa que possui uma pilha em que cada elemento seja
um objeto ponto (x,y) implementado em aulas anteriores. Criar um menu que
possibilite as seguintes possibilidades:
● criação de um ponto novo;
● exibição dos pontos cadastrados;
● Exclusão de um ponto;
● Informar o numero de pontos cadastrados;
● Edição de um ponto cadastrado;
● Sair do programa
22
Pilhas
Em outras palavras, o primeiro objeto a ser inserido na pilha é o último a
ser removido. Essa política é conhecida pela sigla LIFO (= Last-In-First-Out), ou
seja, o último a entrar é o primeiro a sair da estrutura.
EX: Vamos imaginar uma pilha de pratos. Sempre que alguém termina de
comer, coloca o prato na pilha, sempre acima, ou seja, o último prato a entrar na
estrutura, esta sempre no topo.
Pilhas
São exemplos de uso de pilha em um sistema:
Funções recursivas em compiladores;
etc.
Pilhas
Função push()
Agora vamos a parte que mais interessa em se tratando de estrutura de
dados, e especificamente, sobre pilhas em C++: as funções push e pop.
Push em inglês é empurrar, vamos empurrar, colocar um elemento, um nó
na pilha.
Pilhas
Função pop()
Agora vamos para a função pop, o outro pilar da estrutura de dados
dinâmica que é a pilha.
int main()
{
stack <string> livros;
livros.push("Linguagem de Programacao");
livros.push("Calculo");
livros.push("Circuitos eletricos");
livros.push("Resistencia dos Materiais");
livros.pop();
livros.pop();
system("pause");
return 0;
}
Exercício
1. Crie uma pilha para 5 alunos, onde deve mostrar inicialmente o tamanho dessa
pilha e depois retirar 3 alunos e mostrar novamente o tamanho da pilha.
2. Crie uma pilha para 6 livros, onde deve mostrar inicialmente o tamanho dessa pilha
e depois retirar 4 livros e mostrar novamente o tamanho da pilha.
int main()
{
stack <int>numeros;
numeros.push(1);
numeros.push(2);
numeros.push(3);
numeros.push(4);
numeros.pop();
system("pause");
return 0;
}
Exercício
4. Como fica o estado de uma pilha inicialmente vazia após a execução dos comandos:
• Push (10);
• Push (5);
• Pop();
• Push (7);
• Top();
• Pop();
• Empty();
5. Suponha que uma pilha possua 4 valores na seguinte ordem: 1, 2, 3 e 4. Qual seria a
sequencia correta de operações de inserção e eliminação para se obter os registros na
ordem 2 4 3 1?
Exercício
6. Suponha que uma pilha possua 5 nomes na seguinte ordem: Funcionário, Empresa,
Salario, Setor e Função. Qual seria a sequencia correta de operações de inserção e
eliminação para se obter os registros na ordem Empresa, Função, Salario, Setor e
Funcionário?
Filas - Conceitos
Assim como as pilhas, uma fila também pode ser implementada por meio de
um vetor ou de uma lista encadeada.
Interface do tipo Fila
Operações básicas:
2. Crie uma fila para 6 livros, onde deve mostrar inicialmente o tamanho dessa fila e
depois retirar 4 livros e mostrar novamente o tamanho da fila.
04. Implemente a função reverso, que reposiciona os elementos na fila de tal forma
que o início da fila torna-se o fim, e vice-versa.
05. Considere uma lista contendo números inteiros. Escreva uma função para ordenar
essas fila em ordem crescente de seus valores.
06. Considere uma lista contendo números inteiros. Escreva uma função que calcule o
maior, o menor e a media aritmética dos seus elementos.
Lista
É uma estrutura de dados simples que armazena informações sobre dados que
apresentam uma relação entre seus elementos.
2. Crie uma lista para 6 numeros, onde deve mostrar inicialmente o tamanho dessa
lista e depois inserir o numero 2 na 4ª posição e mostrar novamente o tamanho da
lista e imprimir na ordem crescente.
3. Crie uma lista para 4 cursos e insira mais 2 cursos nessa lista e mostre seu tamanho.
Imprima todos os cursos e coloque em ordem alfabética.
Exercício
1. Crie uma lista para 7 cursos, onde deve mostrar inicialmente o tamanho dessa lista
e depois inserir 3 cursos de outra lista e mostrar novamente o tamanho da lista e
imprimir todos os cursos.
2. Crie uma lista para 6 números, onde deve mostrar inicialmente o tamanho dessa
lista e depois inserir o numero 2,5,8 de outra lista e mostrar novamente o tamanho
da lista e imprimir todos eles na ordem crescente.
3. Crie uma lista para 4 alunos e outra lista para 2 alunos e mostre seu tamanho total.
Imprima todos os alunos das duas listas e coloque em ordem alfabética.
Exercício
2. Considere uma lista contendo números inteiros positivos. Faça uma função que
retorne quantos números pares existem na lista.
3. Considere uma lista contendo números inteiros positivos. Faça uma função que
retorne a media da lista.
Exercício
4- Fazer uma lista de com 10 inteiros e depois crie uma função para inverter a lista.
5 - Considere uma lista contendo números inteiros positivos. Faça uma função que
retorne quantos números pares existem na lista. E depois use a função clear.