Buscar

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

Estrutura de dados lista

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.

💡 2 Respostas

User badge image

Douglas Dmarc

#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);
		}

	}
}
13
Dislike3
User badge image

Gaby Lima

#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;

}


0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis


✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta.

User badge image

Outros materiais