单链表--排序
发布日期:2021-11-02 05:00:17 浏览次数:2 分类:技术文章

本文共 1132 字,大约阅读时间需要 3 分钟。

有一个带头节点的单链表L(至少有一个数据节点),设计一个算法使其元素递增有序排列。

#include
#include
typedef struct LNode{ int data; struct LNode *next;}LinkNode; //单链表节点类型void CreatList(LinkNode *&L,int a[],int n);void Display(LinkNode *L);void sort(LinkNode *&L);int main(){ int a[] = {1,5,9,3,2,4}; LinkNode *L; CreatList(L,a,6); sort(L); Display(L);} void CreatList(LinkNode *&L,int a[],int n){ LinkNode *s,*r; //声明两个指针 L = (LinkNode *)malloc(sizeof(LinkNode)); //创建一个头结点 r = L; // r 始终指向尾节点,初始时指向头结点 for( int i = 0; i < n; i++) { s = (LinkNode *) malloc(sizeof(LinkNode)); s->data = a[i]; r->next = s; r = s; } r->next = NULL; } void Display(LinkNode *L){ LinkNode *p = L->next; //p指向第一个结点(不一定是头结点) while( p!= NULL) { printf("%d ",p->data); p = p->next; } printf("\n");}void sort(LinkNode *&L){ LinkNode *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
data) pre=pre->next; //在有序表中找插入*p的前趋节点*pre p->next=pre->next; pre->next=p; p=q; //扫描原单链表余下的节点 }}

转载地址:https://blog.csdn.net/weixin_43486985/article/details/97619171 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:顺序表--求两个集合的交集
下一篇:单链表--删除最大元素

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月04日 05时23分39秒