生成结点值互不相同的且递增有序的单链表
来源:互联网 发布:linux查看系统版本 编辑:程序博客网 时间:2024/05/16 16:18
ListSort算法的原理:对原串从左到右扫描,每扫描到一个结点,就生成一个新结点,并使新结的数据域值等于当前扫描到的结点的数据域值,然后将新结点按序插入到新的链表中,并释放原结点,然后继续扫描,重复上述操作,直到扫描完原链表为止。此时就生成一个新的有序链表,原链表的内存空间被完全释放。
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<conio.h>#include<time.h>typedef struct LNode//链表结点结构的定义{int data;struct LNode *next;}LNode,*LinkList;int DisplayList(LinkList head)//输出链表中的数据域的值{if(head==NULL){printf("链表为空!\n");return 0;}LinkList p=head;while(p->next!=NULL){printf("%5d ->",p->data);p=p->next;}printf("%5d",p->data);//输出最后一个数据printf("\n\n");return 0;}int CreateList(LinkList &head)//生成链表的函数定义{int i=0;LinkList p=NULL,q=NULL;head=NULL;srand( (unsigned)time( NULL ) );for(i=0;i<30;i++){p=(LinkList)malloc(sizeof(LNode));p->data=rand()%100*7;if(head==NULL)head=p;elseq->next=p;q=p;}if(head!=NULL){q->next=NULL;}return 1;}LinkList ListSort(LinkList head)//对链表的结点按数据域的大小从小到大排序{if(head==NULL || head->next==NULL)return head;else{LinkList pre,lp,p,q,s;pre=head;q=p=pre->next;head->next=NULL;while(p!=NULL){s=(LinkList)malloc(sizeof(LNode));s->data=q->data;s->next=NULL;p=p->next;free(q);q=p;//记得释放原结点if(s->data < head->data){s->next=head;head=s;}else{pre=head;lp=pre->next;while(lp!=NULL && s->data > lp->data)if(s->data > lp->data){pre=lp;lp=lp->next;}s->next=lp;pre->next=s;}}return head;}}int DelrepetElem(LinkList head)//删除链表中重复的结点(即数据域相同的结点只留下一个){LinkList pre=head,lp;if(pre!=NULL){while(pre->next!=NULL)if(pre->data != pre->next->data)pre=pre->next;else{lp=pre->next;pre->next=lp->next;free(lp);}}return 1;}void main(){LinkList head,headla;CreateList(head);//生成链表laprintf("初始生成时链表la的数据为:\n");DisplayList(head);headla=ListSort(head);printf("经排序后的链表la的数据为:\n");DisplayList(headla);DelrepetElem(headla);printf("经排序且删除相同元素后的链表la的数据为:\n");DisplayList(headla);printf("\n");}
- 生成结点值互不相同的且递增有序的单链表
- 生成互不相同的随机数
- 生成互不相同随机数的一种算法
- 生成互不相同的N个随机数
- 生成互不相同随机数的一种算法
- 统计互不相同且无重复数字的三位数个数
- 输入两个数列,分别以某数为结束标志,分别生成递增有序单链表;再将这两个表合并为一个递增有序单链表,输出表中各结点的值
- 随机产生两组整数,每组整数中元素互不相同,这两组数按值递增有序。设计程序,将这两组数合并成按值递减有序的一组数,要求合并的新的一组数中,相同的元素只有一个。
- 将两个递增有序的带头结点的单链表A、B合并成为一个递增有序的带头结点的单链表
- 用C#生成足够随机的互不相同的随机数
- C#生成指定数目的互不相同的随机数
- C#生成指定数目的互不相同的随机数
- 生成k个小于n的互不相同的随机数
- 生成k个小于n的互不相同的随机数
- 生成k个小于n的互不相同的随机数
- 生成互不相同随机数的两种算法
- 使用随机函数生成100个互不相同的数字。
- 将两个递增有序的单链表合并成一个递减有序的单链表,利用原结点空间
- Erlang-- 学习笔记5,平行式、面向并发程序设计
- 数字电路 电平转换总结
- 关于在PB中动态调用ORACLE的存储过程
- 关于智慧小区平台发展的看法
- struts2 多文件上传 No result defined for action com.cpms.action.organ.UploadFile and result inpu
- 生成结点值互不相同的且递增有序的单链表
- C++字符编码转换
- sizeof在二维数组中的注意事项
- Erlang的隐藏特性
- Android操作系统11种传感器介绍
- MySQL 权限管理的注意事项
- Robotium_易测云生成的自动化测试脚本(1)
- C#遍历枚举类型
- java面试题