Você está na página 1de 58

Linguagem de Programação

Listas Lineares
● Dados homogêneos (Vetores)

● Dados heterogêneos (structs)

● Definição e operações aplicáveis de Listas Lineares.

● Tipos de Listas Lineares

● Pilhas

● Implementação utilizando vetor.

2
Dados Homogêneos:

● Uma estrutura de dados, que utiliza somente um tipo de dado,


em sua definição é conhecida como dados homogêneos.

● Variáveis compostas homogêneas correspondem a posições de


memória, identificadas por um mesmo nome, individualizado por
índices e cujo conteúdo é composto do mesmo tipo.

● Sendo os vetores (também conhecidos como estruturas de


dados unidimensionais) e as matrizes (estruturas de dados
bidimensionais) os representantes dos dados homogêneos.

3
Vetor:

● O vetor é uma estrutura de dados linear que necessita de somente um índice


para que seus elementos sejam endereçados. É utilizado para armazenar uma
lista de valores do mesmo tipo, ou seja, o tipo vetor permite armazenar mais de
um valor em uma mesma variável.

● Um dado vetor é definido como tendo um número fixo de células idênticas (seu
conteúdo é dividido em posições).

● Cada célula armazena um e somente um dos valores de dados do vetor.

● 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.

● Normalmente, este tipo de dado é chamado de registro.


● Um registro é uma estrutura de dados que agrupa dados de tipos
distintos ou, mais raramente, do mesmo tipo. Um registro de dados
é composto por certo número de campos de dados, que são itens
de dados individuais. Registros são conjuntos de dados
logicamente relacionados, mas de tipos diferentes (numéricos,
lógicos, caractere etc)


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;

 Itens em estoque em uma empresa;

 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).

– pop - retira uma informação da pilha (desempilha).


– size - retorna o tamanho da pilha.
– stacktop - retorna o elemento superior da pilha sem removê-
lo (equivalente às operações de pop e um push).
– empty - verifica se a pilha está vazia.

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;

void push(int valor);


int pop(void);
int size(void);
int stacktop(void);
int pilha[10];
int pos=0;

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

void push(int valor)


{
pilha[pos]=valor; /* Empilha um novo elemento. */
pos++;

}
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

struct pilha { /* Estrutura que irá conter a pilha de informações */


int topo;
int itens[TAMANHO_PILHA];
};

int empty(struct pilha *p);//empty - verifica se a pilha está vazia


int pop(struct pilha *p);//pop - retira uma informação da pilha (desempilha)
void push(struct pilha *p, int e);//push: coloca uma informação na pilha
(empilha).
int size(struct pilha *p); // retorna o tamanho da pilha
int stacktop(struct pilha *p);//stacktop - retorna o elemento superior da pilha
sem removê-lo

18
int main()
{
struct pilha x;
x.topo = -1;
push(&x,10);push(&x,20);push(&x,30);push(&x,36);

for (int k=0;k<=(x.topo);k++)


cout<<x.itens[k]<<endl;

cout<<"Tamanho da pilha: "<<size(&x)<<endl;


cout<<"Elemento do topo da fila: "<<stacktop(&x)<<endl;
cout<<"Elementos da pilha: "<<endl<< pop(&x)<<endl;
cout<<pop(&x)<<endl;
cout<<pop(&x)<<endl;
cout<<pop(&x)<<endl;

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

int size(struct pilha *p) {


/* sempre lembrando que na linguagem C o índice de um vetor começa na posição 0
*/
return p->topo+1;
}
//stackpop - retorna o elemento superior da pilha sem removê-lo (equivalente às
operações de pop e um push).
int stacktop(struct pilha *p)
{
return p->itens[p->topo];
}

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;

Mecanismo de desfazer/refazer dos editores de texto;

Navegação entre páginas Web;

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.

Esta função vai tirar o último nó da pilha, e retirá-lo de lá.


Exemplo
#include <iostream>
#include <string>
#include <stack>

using namespace std;

int main()
{
stack <string> livros;

livros.push("Linguagem de Programacao");
livros.push("Calculo");
livros.push("Circuitos eletricos");
livros.push("Resistencia dos Materiais");

cout<<"Tamanho da Pilha: " << livros.size() <<endl;


cout<< "Livro do topo: " << livros.top() <<endl;

livros.pop();
livros.pop();

cout<< "Tamanho da Pilha: " << livros.size() <<"\n";


cout<< "Novo livro do topo: " << livros.top() <<"\n";

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.

3. Utilizando pilhas faça um programa para 5 cursos diferentes e os imprima em


ordem alfabética.
#include <iostream>
#include <stack> Exemplo
using namespace std;

int main()
{
stack <int>numeros;

numeros.push(1);
numeros.push(2);
numeros.push(3);
numeros.push(4);

if(numeros.empty()) cout<<"Pilha vazia"<<endl;


else cout<<"Pilha com numeros"<<endl;

cout<<"Tamanho da Pilha: " << numeros.size() <<endl;


cout<< "Numero do topo: " << numeros.top() <<endl;

//while(!numeros.empty()) numeros.pop();//esvazia a pilha

numeros.pop();

cout<<"Tamanho da Pilha: " << numeros.size() <<endl;


cout<< "Novo numero do topo: " << numeros.top() <<endl;

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

A estrutura de fila é análoga ao conceito que temos de filas em geral. O


primeiro a chegar é sempre o primeiro a sair, e a entrada de novos
elementos sempre se dá no fim da fila.

Em computação vemos este conceito sendo implementado em filas de


impressão.

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:

criar uma fila vazia;


inserir um elemento no fim;
retirar um elemento do início;
verificar se a fila está vazia;
liberar a estrutura fila;
mostrar a fila (*).
Exercício
1. Crie uma fila para 5 alunos, onde deve mostrar inicialmente o tamanho dessa fila e
depois retirar 3 alunos e mostrar novamente o tamanho da fila.

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.

3. Utilizando fila faça um programa para 5 cursos diferentes e os imprima em ordem


alfabética.
Exercício

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.

As operações mais frequentes em listas são a busca, inserção e remoção de um


determinado elemento. Outras operações que costumam ocorrer são a alteração de
um elemento particular da lista, ordenação dos elementos da lista, procura do último
ou do primeiro elemento da lista, etc.
Lista
Lista
Lista
Lista
Lista- Inserir elementos em diferentes posições
Lista- Inserir elementos em diferentes posições
Lista- Função Sort
Lista- Função Sort
Lista- Função Sort
Lista- Função Sort
Lista- Função Reverse
Lista- Função Reverse
Exercício
1. Crie uma lista para 5 alunos, onde deve mostrar inicialmente o tamanho dessa lista
e depois inserir 3 alunos e mostrar novamente o tamanho da lista.

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

1. Usando a função erase remova os 2 primeiros elementos de uma lista que


contenha 5 elementos no total.

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.

6 – Crie uma lista de 5 cursos e coloque o curso 1 na posição 4 e o curso 4 na posição 1.


Bibliografia:
● DEITEL, H. M.; DEITEL, P. J. C++:Como Programar. 3. Ed.
Porto Alegre (RS): Bookman, 2001. 1098p
● SOUZA, M. A. F., GOMES, M. M.,SOARES, M. V., CONCILIO,
R., Algoritmos e Lógica de Programação, Editora Cengage
Learning, São Paulo, 2008.

Sergio Barbosa Villas-Boas, C / C++ e Orientação a Objetos
em Ambiente Multiplataforma

Apostila LINGUAGEM C/C++ UNIPAN - Faculdade de Ciências
Aplicadas de Cascavel – FACIAP Curso de Ciência da
Computação, Cascavel - PR, 2004

Estrutura de Dados com Algoritmos e C, Marcos
Laureano, Editora: Brasport Livros e Multimídia Ltda,
2008.
58

Você também pode gostar