首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用链表C进行选择排序

用链表C进行选择排序
EN

Stack Overflow用户
提问于 2015-11-19 14:27:49
回答 1查看 153关注 0票数 0

我试图通过选择排序来排序我的链接列表,但是我在指针交换和下一个(Proximo)之间有一个问题,我的函数ordena不工作。我是怎么做到的?

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>


struct Candidato{
    int nota;
    char nome[200];
    char cpf[11];
    struct Candidato *proximo;

};

struct TipoListaCandidato{
    Candidato *inicio = NULL;
    Candidato *fim = NULL;
};

void iniciaCandidato(TipoListaCandidato *pLista){
    pLista->inicio = NULL;
    pLista->fim = NULL;
} 

TipoListaCandidato lista;

void inserirCandidato(TipoListaCandidato *pLista){
    int nota;
    char nome[200],cpf[11];

    Candidato *aux = pLista->inicio;

    Candidato *novoNodo = new Candidato;


    printf("Digite nome: ");
    fflush(stdin);
    gets(nome);

    printf("Digite cpf: ");
    fflush(stdin);
    gets(cpf);

    printf("Digite nota: ");
    scanf("%d",&novoNodo->nota);

    strcpy(novoNodo->cpf,cpf);
    strcpy(novoNodo->nome,nome);

    novoNodo->proximo = NULL;

    if(aux == NULL){
        pLista->inicio = novoNodo;
        pLista->fim = novoNodo;

    }else{
        aux = pLista->fim;
        pLista->fim = novoNodo;
        aux->proximo = pLista->fim;
    }
}

TipoListaCandidato ordenado;


void ordena(TipoListaCandidato *pLista){
    Candidato *aux = pLista->inicio,*seguinte,*tmp;
    for(;aux != NULL;aux = aux->proximo){
            Candidato *minimo = aux;
            for(seguinte = aux->proximo;seguinte !=NULL; seguinte = seguinte->proximo){
                if(seguinte->nota > minimo->nota){
                    minimo = seguinte;
                }
            }
            tmp = aux;
            aux = minimo;
            minimo = tmp;
            //tmp->proximo = aux->proximo;
            //minimo->proximo = tmp;
        }
}

我想我如何在指针之间进行交换,请帮助我。

Att

EN

回答 1

Stack Overflow用户

发布于 2015-11-19 15:15:25

请注意我对这个问题的评论,但是排序函数的主要问题似乎是您从来没有执行过任何实际的交换。我想这段代码是用来交换的..。

代码语言:javascript
复制
        tmp = aux;
        aux = minimo;
        minimo = tmp;

..。但它只是交换跟踪变量的值,而不是列表中指向节点的位置。您需要调整proximo对象的struct Candidato指针以交换列表元素。这有点棘手,特别是像您这样的单链接列表。

此外,使用链接列表,您实际上不需要交换其本身。在每个步骤中,只需从子列表中的当前位置移除最小元素,然后在子列表的开头重新插入它。这实际上比真正的交换要容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33806638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档