Lista Simples em C
Publicado por Ivan Rocha 04/05/2007
[ Hits: 16.995 ]
Homepage: http://homes.dcc.ufba.br/~ivan062/bahia
Lista encadeada simples em C, com funções de inserir, remover, consultar, e imprimir valores da lista.
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
# include<ncurses.h>
# include<curses.h>
# include<ctype.h>
//#define MALLOC(x) ((x *) malloc (sizeof(x)))
typedef struct ElemListaint{
int chave;
struct ElemListaint *ant, *prox;
}Listaint;
void inicializa(Listaint **l){
*l = NULL;
};
int consulta(Listaint *l, int x){
Listaint *p;
int achou = 0;
p = l;
while((p != NULL) && (!achou)){
if( p -> chave == x)
achou = 1;
else
p = p -> prox;
}
return (achou);
};
int insere(Listaint **l, int x){
Listaint *p;
int inserido;
if(!consulta(*l, x)){
p = ((Listaint *) malloc (sizeof(Listaint)));
p -> chave = x;
p -> prox = *l;
*l = p;
}
inserido = 1;
return (inserido);
};
int remover(Listaint **l, int x){
Listaint *p, *q; int achou = 0;
p = *l;
q = (*l) -> prox;
if((*l) -> chave == x){
(*l) = (*l) -> prox;
free(p);
//free(q);
//printf("\nElemento Removido com Sucesso! ");
achou = 1;
}else{
while(q){
if(q -> chave == x){
p -> prox = q -> prox;
//p = NULL;
free(q);
//q = NULL;
achou = 1;
}else
p = p -> prox;
q = q -> prox;
}
}
return (achou);
}
void imprime(Listaint *l){
Listaint *p;
p = l;
printf("\nLista de Inteiros: ");
while(p){
printf("%d ", p -> chave);
p = p -> prox;
}
getchar();
}
int main(){
char op[1];
Listaint *l;
int a;
inicializa(&l);
for(;;){//do{
printf("\n\n");
system("clear");
printf("Programa Lista Duplamente Encadeada!\n\n");
printf("a. Insere na Lista;\n");
printf("b. Remove da Lista;\n");
printf("c. Consulta na Lista;\n");
printf("d. Imprime Lista;\n");
printf("s. SAIR.\n\n");
printf("OPCAO: "); //printf("{FONTE}3310;25H[");
//printf("{FONTE}33[8;8H");
gets(op);
switch(toupper(op[0])){
case 'A':{
fflush(stdin);
//system("clear");
printf("\nDigite o Elemento a Inserir: ");
scanf("%d", &a);
a = insere(&l, a); //****************************************88
if(a)
printf("\nElemento Inserido com Sucesso!\n");
else
printf("\nElemento nao Inserido!\n");
usleep(1000000);
}break;
case 'B':{
fflush(stdin);
//system("clear");
if (l == NULL){
printf("\nLista Vazia!!!");
getchar();
}else{
printf("\nDigite o Elemento a Remover: ");
scanf("%d", &a);
a = remover(&l, a);
if (a)
printf("\nElemento Removido com Sucesso!\n");
else
printf("\nNao existe este Elemento!\n");
}
usleep(1000000);
}break;
case 'C':{
fflush(stdin);
if (l == NULL){
printf("\nLista Vazia!!!");
getchar();
}else{
printf("\nDigite o Elemento a Consultar: ");
scanf("%d", &a);
a = consulta(l, a); //*******************************************
//printf("{FONTE}33[x;yH");
if(a)
printf("\nValor encontrado na lista!!!\n");
else
printf("\nValor nao encontrado na lista!!!\n");
usleep(1000000);
}
}break;
case 'D':{
fflush(stdin);
if(l == NULL){
printf("\nLista Vazia!!!");
getchar();
}else
imprime(l);
}break;
case 'S':{
fflush(stdin);
printf("\nTem certeza? (S/N) ");
gets(op);
if(toupper(op[0]) == 'S'){
system("clear");
exit(0);
}
}break;
default:{
fflush(stdin);
if(toupper(op[0]) != 'S')
printf("Opcao incorreta, digite novamente!");
//usleep(1000000);
}break;
}
}//while(toupper(op[0]) != 'S');
return (0);
}
Aplicações em listas dinâmicas
Classe para manipulação de números complexos
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (38)
\Boot sem espaço em disco (Fedora KDE Plasma 42) (1)
Mint Xfce não mantém a conexão no wi-fi (2)









