IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 西安电子科技大学21考研833真题双向循环链表的冒泡排序 -> 正文阅读

[数据结构与算法]西安电子科技大学21考研833真题双向循环链表的冒泡排序

?unknown函数中,首先定义了三个Node类型的指针节点,并让p指向首节点,q指向p的下一个节点,r指向q的下一个节点。

如图类似于这样一个链表:

看到p->data>q->data 知道这个函数与节点中存储的值的大小有关 我便让p指向的节点data值设定为大于q指向节点的data值。

然后p=p->prior 让p指向头节点??

q->prior->next=r;? 让q指向节点的前驱节点 也就是原来p指向的节点的next指向r节点

空过(1) q->next=p->next; q->prior=p; 让q的next指向p原来指向的节点,也就是首节点,让q的前驱节点指向头节点??

看到这 我大概就知道 他是让q指向的节点与p原来指向的节点互换位置? 也就是说让data小的值放到链表前面 data大的值放到链表后面?

然后通过while循环给链表排序,排序方法为冒泡排序。

后面的代码就是将p,q,r,依次指向各自的下一个节点。

具体实现代码 如下:

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
?? ?int data;
?? ?struct Node *prior;
?? ?struct Node *next;
}Linknode,*Linklist;
void create(Linklist L,int *len);
void maopaopx(Linklist L);
void show(Linklist L,int *len);
void destroy(Linklist L);
int main(void)
{
?? ?Linklist L;
?? ?int len;
?? ?L=(Linklist)malloc(sizeof(Linknode));
?? ?L->next=L->prior=NULL;
?? ?create(L,&len);
?? ?show(L,&len);
?? ?maopaopx(L);
?? ?show(L,&len);
?? ?destroy(L);
?? ?
}
void create(Linklist L,int *len)
{
?? ?int val;
?? ?Linklist pNew,rear=L;
?? ?printf("请输入链表长度: ");
?? ?scanf("%d",len);

?? ?for(int i=0;i<*len;i++)
?? ?{
?? ??? ?printf("请输入第%d个值:",i+1);
?? ??? ?scanf("%d",&val);
?? ??? ?pNew=(Linklist)malloc(sizeof(Linknode));
?? ??? ?pNew->data=val;
?? ??? ?pNew->prior=rear;
?? ??? ?pNew->next=L;
?? ??? ?rear->next=pNew;
?? ??? ?L->prior=pNew;
?? ??? ?rear=pNew;
?? ?}
}
void maopaopx(Linklist L)
{
?? ?Linklist p,q,r;
?? ?p=L->next;
?? ?q=p->next;
?? ?r=q->next;
?? ?while(q!=L)
?? ?{
?? ??? ?while(p!=L && p->data>q->data)
?? ??? ?{
?? ??? ??? ?p=p->prior;
?? ??? ?}
?? ??? ?q->prior->next=r;
?? ??? ?r->prior=q->prior;
?? ??? ?q->next=p->next;
?? ??? ?q->prior=p;
?? ??? ?p->next->prior=q;
?? ??? ?p->next=q;
?? ??? ?q=r;
?? ??? ?p=q->prior;
?? ??? ?r=r->next;
?? ?}
?? ?
}
void show(Linklist L,int *len)
{
?? ?Linklist p=L;
?? ?for(int i=0;i<*len;i++)
?? ?{
?? ??? ?printf("%d ?",p->next->data);
?? ??? ?p=p->next;
?? ?}


}
void destroy(Linklist L)
{
?? ?Linklist c,p=L->next;
?? ?while(p!=L)
?? ?{
?? ??? ?c=p;
?? ??? ?p=p->next;
?? ??? ?free(c);
?? ??? ?c=NULL;
?? ?}
?? ?free(L);
?? ?L=NULL;
}

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 08:13:59  更:2021-09-19 08:14:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 13:46:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码