用c语言实现一个有序单链表

2024-11-28 23:39:01
推荐回答(1个)
回答1:

不多说,直接看代码:

#include 
#include 
#include 
#include 
typedef struct yinshu{
    unsigned int yz;
    struct yinshu *next;
}YSNode,*YinShu; //定义链表节点类型YSNode,和指针YinShu

void InsertNode(unsigned int n, YinShu &L){
    //在L链表的第一个节点之后插入一个节点,值为n
    YinShu p;
    p=(YinShu)malloc(sizeof(YSNode));  //分配节点空间
    p->yz=n;
    p->next=L->next;
    L->next=p;
}

void YinShuFenJie(unsigned int n,YinShu &L){
    //对n进行质因数分解,并存在链表L中
    unsigned int j,k;
    k=(unsigned int)sqrt(n);
    for(j=2;j<=k;++j){
        if(n%j==0){  //遇到一个质因数j
            InsertNode(j,L);
            n/=j;
            k=(unsigned int)sqrt(n);
            --j;
        }
    }
    InsertNode(n,L);  //插入剩下的质因数n
}

int main(){
    unsigned int n;
    YinShu L,p,q;
    scanf("%d",&n);
    L=(YinShu)malloc(sizeof(YSNode));
    L->yz=n;
    L->next=NULL;//第一个节点存放n的值
    YinShuFenJie(n,L);
    p=L->next; q=p->next;
    printf("%u=%u",L->yz,p->yz);
    free(L); free(p);  //释放第一、二个节点
    while(q){
        p=q;
        printf("*%u",p->yz);
        q=p->next;
        free(p);
    }
    printf("\nFinished.\n");
    getch();
    return 0;
}

希望能帮到你!