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

 我来答
百度网友9761bdf1d
2014-11-08 · TA获得超过589个赞
知道小有建树答主
回答量:441
采纳率:0%
帮助的人:358万
展开全部

不多说,直接看代码:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
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;
}

希望能帮到你!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式