有一个带头结点的单链表L,设计一个算法使其元素递增有序排列

2024-12-12 04:35:04
推荐回答(5个)
回答1:

/* 插入排序法 */
void sort(Linklist *&L)
{
    LinkList *p=L->next, *q, *r;
    if(p!=NULL)
    {
        /* 把链表分成两条,一条已经排序好了(L),一条待排序(p)*/
        r=p->next;
        p->next=NULL;
        p=r;
        /* 对于所有待排序的元素 */
        while(p!=NULL)
        { 
            /*把p链表的第一个元素插入到L,并且将它从p中移除*/
            r=p->next;  //r指向p的第二个元素
            /* 找到合适的插入点 */
            q=L;
            while(q->next!=NULL && q->next->data < p->data)
                q=q->next;
            /* 在q后面插入p */
            p->next=q->next;
            q->next=p;
            /* 现在p的第一个元素已经被移到L中合适的位置了 */
            p=r;
        }
    }
}

回答2:

没有问题,
while(q->next!=NULL&&q->next->datadata)
q=q->next;
是一个循环,一直跑到有序数组的最后,这个算法很抽象,我看了很久才懂。

回答3:


回答4:

建议换本书,这书上的代码写的叫个啥玩意儿啊,什么p,q,r,L的,名字都不会起,一看就不是什么好书。

回答5:

void Insert(L, node){
var vNodeNext
for vCurNode in L{
if(vCurNode.Value >= node.Value){ //升序
//if(vCurNode.Value >= node.Value){ //降序
vNodeNext = vCurNode.Next
vCurNode.Next = Node
Node.Next = vNodeNext
exit
}
}
}
每次插入元素都通过这个insert插入