问题及代码:
/*
*Copyright (c)2016,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:bigice.cbp
*作 者:何大冰
*完成日期:2016年9月29日
*版 本 号:v1.0
*
*问题描述:设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试。
*输入描述:无
*程序输出:判断结果
*/
#include <stdio.h>
#include <malloc.h>
#include "linklist.h"
void sort(LinkList *&L)
{
LinkList *p,*pre,*q;
p=L->next->next; //p指向L的第2个数据节点
L->next->next=NULL; //构造只含一个数据节点的有序表
while (p!=NULL)
{
q=p->next; //q保存*p节点后继节点的指针
pre=L; //从有序表开头进行比较,pre指向插入*p的前驱节点
while (pre->next!=NULL && pre->next->data<p->data)
pre=pre->next; //在有序表中找插入*p的前驱节点*pre
p->next=pre->next; //将*pre之后插入*p
pre->next=p;
p=q; //扫描原单链表余下的节点
}
}
int main()
{
LinkList *L;
int i;
ElemType a[]= {1,3,2,9,0,4,7,6,5,8};
InitList(L);
for(i=9; i>=0; i--)
ListInsert(L, 1, a[i]);
printf("L:");
DispList(L);
printf("排序\n");
sort(L);
printf("L:");
DispList(L);
DestroyList(L);
return 0;
}
运行结果:
知识点总结:遍历整个链表的具体方法。
心得体会:对单链表的了解进一步加深。