Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct reg {
- int valor;
- struct reg *prox;
- };
- typedef struct reg celula; //define o tipo da estrutura como "celula"
- void imprime(celula *c){
- //função que insere um elemento ao final da lista
- while(c->prox != NULL){//c é o elemento que percorre a lista
- printf("%d ", c->prox->valor);//o elemento que percorre a lista aponta para o valor do próximo elemento
- c = c->prox;
- }
- printf("\n");
- }
- void insere(celula *c, int num){
- //função que varre a lista e imprime cada elemento
- celula *nova;//criação de uma nova celula na estrutura
- nova = (celula*)malloc(sizeof(celula));
- nova->valor = num;
- nova->prox = NULL;//cria um novo elemento vazio na lista
- while(c->prox != NULL){
- c = c->prox;
- }
- c->prox = nova;
- }
- int busca(celula *c, int num) {
- // função que insere num no final da lista e retorne
- // o "indice virtual" (a partir do 0) ou -1 se nao encontrar
- int cont=0;
- while(c->prox != NULL){
- if (num==c->valor){
- return cont;
- }
- c = c->prox;
- cont++;
- printf("\nContador: ", cont);
- }
- while(c->prox != NULL){
- printf("%d ", c->prox->valor);
- c = c->prox;
- }
- }
- void apagar(celula *c, int num) {
- // função que varre a lista em busca de num e remove a celula (desaloca),
- // do elemento anterior ao removido reapontando o ponteiro prox
- celula *ant = c; // elemento anterior
- celula *p = c; // ponteiro que percorre a lista
- while(c->prox != NULL && p->valor!=num){
- ant = p;
- p = p->prox;
- }
- if (ant!=NULL){//função que retira elemento
- c = p->prox;
- free(c);
- }
- else ant->prox = p->prox; //element é retirado do meio da lista
- free(p);
- }
- void insere_indice(celula *c, int num, int indice){
- //função que insere um novo elemento com valor (valor) na posição ocupada pelo índice (indice)
- celula *ant, *atual;
- int contador = 0;
- ant = c;//variavel ant aponta pra variavel anterior
- atual = c->prox;
- while(ant->prox!= NULL){
- if (contador==indice){
- celula *nova;
- nova = (celula*)malloc(sizeof(celula));
- nova->valor = num;
- nova->prox = atual->prox;
- }
- contador++;
- ant = ant->prox;
- }
- while(c->prox != NULL){
- printf("%d ", c->valor);
- c = c->prox;
- }
- }
- int main(){
- int opcao, num, ind;
- celula *cabeca;
- cabeca = (celula*)malloc(sizeof(celula));
- //malloc tem o tamanho de 1 celula
- cabeca->prox = NULL;
- //iniciando a lista sem nenhum elemento
- do{
- printf("1. Imprime a lista;\n2. Insere elemento ao final da lista;\n3. Busca elemento na lista;\n4. Remove elemento da lista;\n5.Insere índice\n0. Encerra o programa.\n");
- scanf("%d", &opcao);
- if (opcao == 1) imprime (cabeca);
- if (opcao == 2) {
- printf("Informe um inteiro:\n");
- scanf("%d", &num);
- insere(cabeca, num);
- }
- if (opcao == 3) {
- printf("Informe um inteiro para a busca:\n");
- scanf("%d", &num);
- busca(cabeca, num);
- }
- if (opcao == 4) {
- printf("Informe um inteiro a ser removido:\n");
- scanf("%d", &num);
- apagar(cabeca, num);
- }
- if (opcao == 5) {
- printf("Informe um valor:\n");
- scanf("%d", &num);
- printf("Informe um índice:\n");
- scanf("%d", &ind);
- insere_indice(cabeca,num,ind);
- }
- } while (opcao!=0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment