有一个带头结点的单链表L,设计一个算法使其元素递增有序排列 编程语言都有哪些算法

作者&投稿:江莘 (若有异议请与网页底部的电邮联系)
/* 插入排序法 */
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;
        }
    }
}


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




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

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插入

要想学好编程,是算法重要还是编程语言重要~

想写编程,想做程序员,算法这个还真不讲究,但是逻辑思维能力一定要强,为什么这么说,因为一个客户想要的,你首先得做出来,而且,客户想不到的,你也要想到,所以程序员的思维不同常人,比如我是客户,我让你做一个 登陆 模块,当然客户的想法就是,你把登陆模块做出来,我只要账号密码对了就能进,这就是他的,但你呢,不仅正确的账号密码能进,你还要思考到,错误的账号,正确的密码,正确的账号,错误的密码,空账号密码,等等一系列,这些和算法无关。 其实编程的话,建议你从C学起,C前期只是一个过渡,不很难,但也不简单,学这个不仅要耐心,而且还要敢兴趣,否则根本就不要去学编程了,枯燥无味。 一旦C语言上手了,那么你去学PHP. HTML. .NET这些,就方便许多了。JAVA这个根据个人所好吧 。 希望能帮到你, 不过请采纳,本人真心为你而答

有一个带头结点的单链表L,设计一个算法将L逆置,即最后一个结点变成第...
答:int);void ReverseList(ListNode *, ListNode *);void ShowList(ListNode *);void main(){ListNode HeadList; //无效的头结点ListNode RevHeadList; //无效的头结点ListNode * pHead = NULL;ListNode

有一个带头结点的单链表L,设计一个算法使其元素递增有序排列
答:/* 插入排序法 */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) { ...

试写一算法在带头结点的单链表结构上实现线性表操作Length(L)。下面各...
答:intListLength_L(LinkList &L){int i=0;//i存储链表长度,初始为0LinkList p=L;//p为链表的指针,初始为头指针,指向头结点if(p) p=p-next;//如果p指向的头结点不为空,p指向带数据的第一个结点while(p){//如果p非空,i长度加1,且指向下一个结点p=p->next;i++;} return i;//...

数据结构:设计一个算法将一个带头结点的单链表A分解成两个带头结点的...
答:VisitList(headPtrA); /* 打印分解前的链表 */ if (headPtrA != NULL) /* 链表不空的情况对其进行分解 */ { Decompose(&headPtrA, &headPtrB, &tailPtrB); /* 对链表进行分解*/ } else { printf("headPtrA is empty.\n");} VisitList(headPtrA); /* 打印分解后的链表 */ Visit...

有一个线性表(a1,a2,...,an),采用带头结点的单链表L存储.设计一算法将...
答:if(L->next)return FALSE;else return TRUE;} /* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 */ Status ClearList(LinkList *L){ LinkList p,q;p=(*L)->next; /* p指向第一个结点 */ while(p) /* 没到表尾 */ { q=p->next;free(p);p=q;} (*L)-...

有一个带头结点的单链表L,设计一个算法将其所有元素逆置
答:struct Node { /* 单链表类型声明 */ ElemType data; /* 数据域 */ struct Node *next; /* 指针域 */ };void Reverse(Node *head){ /* 从第一结点开始颠倒 */ Node *p, *q;p = head->next; /* p 指向第一个结点 */ head->next = NULL; /* 断开链表...

有一个带头结点的单链表L,设计算法将L逆置
答:LinkNode last = null;while(L.hasNext()) { node = L.next();Node newnode = node.clone();newnode.setNext(last);last = newnode;} return last; //last是逆置的链表的头结点

数据库结构:已知一个带头结点的单链表L,试编写一个算法删除L中值最大...
答:void del_max(linklist L){ linklist p=L,r=L,s=L;//记录最大节点的前驱节点 while(!p->next){ r=p;//当前检测节点的前驱节点 p=p->next;//当前与最大值比较的节点比较 if(p->data>s->next->data)//若当前节点比最大节点大 s=r;//最大节点的前驱为当前节点前驱 } s->next=...

一个带头结点的单链表,L为链表的头指针,设计算法删除链表中的偶数结点...
答:void Delete_evenLNode(LinkList head) { // 删除偶数位结点 LinkList q,p = head;int i;for(i = 1; p->next; ++i) { if(i % 2 == 0) { q = p->next;p->next = q->next;free(q);} else p = p->next;} } void Print_List(LinkList head) { LinkList p = head-...

有一个带头节点的单链表L,用于存放整数序列,设计一个算法判断该序列是否...
答:弄一个整型的辅助栈 第一轮从链表的第一个结点开始,将所有元素全部放入栈中 第二轮再从链表的第一个结点开始,依次将元素和当前栈顶元素相比较,如果相等,则链表当前结点后移,删除栈顶元素 直到栈为空(其实也是链表表尾了),此时为对称 如果中间不等,结束循环,链表不对称 ...