Escolar Documentos
Profissional Documentos
Cultura Documentos
Estrutura base
const int max = 50;
typedef char vetor[max+1];
struct lista {
vetor Elementos;
int Ultimo;
};
lista L1, L2, L3;
Programa Principal
void main () {
lista L1;
L1 = criarLista ();
}
Impressão da lista
void escreverLista (lista L) {
int i;
if (L.Ultimo < 1) printf("Lista vazia");
else
for (i = 1; i <= L.Ultimo; i++)
printf("%c",L.Elementos[i]);
}
void main () {
lista L1;
- - - - -
escreverLista (L1);
}
Inserção na Lista
void inserirElemento (char x, int p, lista *L) {
int q;
if (L->Ultimo >= max)
printf ("Lista cheia: insercao impossivel");
else if (p < 1 || p > L->Ultimo + 1)
printf("A posicao de insercao nao existe");
else {
L->Ultimo++;
for (q = L->Ultimo - 1; q >= p; q--)
L->Elementos[q+1] = L->Elementos[q];
L->Elementos[p] = x;
}
}
Estrutura
#include <stdio.h>
#include <malloc.h>
#include<stdlib.h>
struct no{
int val;
struct no *prox;
} *plista=NULL, *ant=NULL, *loc=NULL, *t=NULL, *v=NULL, *z=NULL;
Programa Principal
int main()
{
int i, n, m, chv1, chv2;
char insere, exclui;
printf("Digite o numero de elementos da lista:");
scanf("%d",&n);
Criação da Lista
Imprime a Lista
}
Busca na Lista
while (loc!=NULL){
if (loc->val!=chv1){
ant=loc;
loc=loc->prox;
}
else{
t=loc;
loc=NULL;
printf("val encontrada!");
}
}
Inserção na lista
if(t==NULL ){
printf("val nao encontrada!");
printf("\n Deseja inserir esta val? (S/N):");
scanf("%s", &insere);
if (insere=='S'|| insere=='s'){
ant=(struct no *) malloc(sizeof (struct no));
ant->val=chv1;
ant->prox=plista;
plista=ant;
}
}
if (t!=NULL)
{
printf("\nDeseja excluir esta val? (S/N):");
scanf("%s", &exclui);
if (exclui=='S'|| exclui=='s'){
ant->prox=t->prox;
chv2=t->val;
free(t);
}
}
Inversão da lista
invert.c
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
struct no {
int val;
struct no* prox;
};
struct no* L;
void preencheComDados(){
int n;
for(n=0; n < 5; n++){
atual->prox = criaUm();
atual = atual->prox;
}
}
void inverte(){
/*
* preserva o link do proximo elemento na sequencia
* a->b->c
* temp = c, porque vamos mudar o prox de b para a (a<-b)
* e precisamos saber como caminhar com o atual na lista encadeada
*/
struct no* temp = L->prox;
void print(){
struct no *atual = L->prox;
while(atual != NULL ){
printf( "%d ", atual->val );
atual = atual->prox;
}
}
int main() {
srand(time(NULL));
preencheComDados();
printf("original\n");
print();
inverte();
printf("\ninvertida \n");
print();
printf( "\n");
}