A lista linear é uma estrutura de dados em que todos os elementos são armazenados de forma sequencial, e seu encadeamento pode ocorrer de forma simples ou dupla.
Você é programador de computador em linguagem C da empresa Renalf Mega Data e precisa realizar as operações elementares com os dados de uma lista simplesmente encadeada, visando à listagem de todos os dados armazenados nessa estrutura de dados.
Procedimentos para elaboração do TD
Desenvolva um programa de computador que permita ao usuário realizar as operações elementares – inclusão, consulta, alteração e remoção – com a estrutura de dados lista simplesmente encadeada.
#include
struct Nodo {
int info;
struct Nodo *prox;
};
struct ListaSimplesEnc {
struct Nodo *prim;
};
void criarLista (struct ListaSimplesEnc *pList) {
pList -> prim = NULL;
}
void mostrarLista (struct ListaSimplesEnc *pList){
struct Nodo *p;
for (p = pList -> prim; p != NULL; p = p->prox) {
printf("%d\t", p->info);
}
printf("\n");
}
void inserirIni (struct ListaSimplesEnc *pList, int v){
struct Nodo *novo;
novo = (struct Nodo*) malloc (sizeof (struct Nodo));
novo -> info = v;
novo -> prox = pList -> prim;
pList -> prim = novo;
}
void removerIni (struct ListaSimplesEnc *pList){
struct Nodo *pAux = pList -> prim;
pList -> prim = pList -> prim -> prox;
free(pAux);
}
void inserirOrd (struct ListaSimplesEnc *pList, int v){
struct Nodo *novo;
novo = (struct Nodo*) malloc (sizeof (struct Nodo));
novo -> info = v;
struct Nodo *pAtu, *pAnt;
pAnt = NULL;
pAtu = pList -> prim;
while ( pAtu != NULL && pAtu->info < v){
pAnt = pAtu;
pAtu = pAtu -> prox;
}
novo -> prox = pAtu -> prox;
pAnt -> prox = novo;
}
int estaVazia(struct ListaSimplesEnc *pList) {
return (pList->prim == NULL);
}
void main () {
struct ListaSimplesEnc minhaLista;
int valor, op;
criarLista(&minhaLista);
while( 1 ){
printf( "1 - Inserir elemento no inicio\n" );
printf( "2 - Inserir elemento em ordem (so se a lista estiver ordenada)\n" );
printf( "3 - Remover elemento no inicio\n" );
printf( "4 - Remover elemento\n" );
printf( "5 - Mostrar lista\n" );
printf( "6 - Sair\n" );
printf( "Opcao? " );
scanf( "%d", &op );
switch( op ){
case 1: // inserir elemento no inicio
printf( "Valor? " );
scanf( "%d", &valor );
inserirIni(&minhaLista, valor);
break;
case 2: // inserir elemento ordenado
printf( "Valor? " );
scanf( "%d", &valor );
inserirOrd(&minhaLista, valor);
break;
case 3: // remover o primeiro
break;
case 4: // remover determinado elemento
break;
case 5: // mostrar lista
if (estaVazia(&minhaLista)) {
printf("Lista vazia");
}
else {
mostrarLista(&minhaLista);
}
break;
case 6: // abandonar o programa
exit(0);
}
}
}
#include
#include
// Definindo a estrutura do nó da lista
typedef struct Node {
int data;
struct Node* next;
} Node;
// Função para criar um novo nó
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Erro: Falha na alocação de memória.\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// Função para inserir um nó no início da lista
Node* insertFront(Node* head, int data) {
Node* newNode = createNode(data);
newNode->next = head;
return newNode;
}
// Função para exibir os elementos da lista
void displayList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
// Função para buscar um elemento na lista
Node* search(Node* head, int target) {
Node* current = head;
while (current != NULL) {
if (current->data == target) {
return current;
}
current = current->next;
}
return NULL; // Retorna NULL se o elemento não for encontrado
}
// Função para modificar o valor de um nó na lista
void modify(Node* node, int newData) {
if (node != NULL) {
node->data = newData;
} else {
printf("Erro: Elemento não encontrado.\n");
}
}
// Função para remover um nó da lista
Node* removeNode(Node* head, int target) {
Node* current = head;
Node* prev = NULL;
while (current != NULL && current->data != target) {
prev = current;
current = current->next;
}
if (current == NULL) {
printf("Erro: Elemento não encontrado.\n");
return head;
}
if (prev == NULL) {
// Remoção do primeiro nó
head = current->next;
} else {
// Remoção de um nó no meio ou final da lista
prev->next = current->next;
}
free(current);
return head;
}
// Função para liberar a memória alocada para a lista
void freeList(Node* head) {
Node* current = head;
Node* next;
while (current != NULL) {
next = current->next;
free(current);
current = next;
}
}
int main() {
Node* head = NULL;
int choice, data, searchData, newData, removeData;
do {
printf("\nMenu:\n");
printf("1. Incluir elemento\n");
printf("2. Consultar lista\n");
printf("3. Alterar elemento\n");
printf("4. Remover elemento\n");
printf("0. Sair\n");
printf("Escolha uma opção: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Digite o valor a ser incluído: ");
scanf("%d", &data);
head = insertFront(head, data);
break;
case 2:
displayList(head);
break;
case 3:
printf("Digite o valor a ser modificado: ");
scanf("%d", &searchData);
printf("Digite o novo valor: ");
scanf("%d", &newData);
modify(search(head, searchData), newData);
break;
case 4:
printf("Digite o valor a ser removido: ");
scanf("%d", &removeData);
head = removeNode(head, removeData);
break;
case 0:
break;
default:
printf("Opção inválida. Tente novamente.\n");
}
} while (choice != 0);
// Liberar a memória alocada para a lista antes de sair do programa
freeList(head);
return 0;
}
Para escrever sua resposta aqui, entre ou crie uma conta
Compartilhar