c语言指针和函数对数组A升序排序,C语言链接列表中数据选择和数组排序的函数的升序和降序的主要困难...

d9c5296403768e9951e79b89680203d8ce2f6a8e?pn=1&x=0&y=0&raww=232&rawh=566&o=jpg_6_0_______&type=pic&aimh=566&md5sum=c2c5f82a08d61ea2edd04298dac7bfdd&sign=2c987fc83

链表排序说明:

头指针指向链表的头节点,这是查找整个链表的唯一基础. 如果头部指针丢失,则无法找到整个链表.

head存储第一个节点的地址c语言单链表排序,而head-> next存储第二个节点的地址;任何节点p的地址只能由它之前的下一个节点获得.

单链列表选择排序图标: ----> [1] ----> [3] ----> [2] ...----> [n] ----> [NULL](原始链表)

19327301-cdebe3a26dca77.png

头1->下一个3->下一个2->下一个n->下一个

选择排序(Selection sort)是一种简单直观的排序算法.

首先找到未排序序列中的最小元素,将其存储在已排序序列的开头,然后继续从其余未排序元素中找到最小元素c语言单链表排序,然后将其放在已排序序列的末尾. 依此类推,直到所有元素都被排序为止.

演示

35e1ba1f0ee24070781892223310ee44.png

选择排序

定义的结构

structstudent

{char ID[11]; //学生学号

char name[20]; //学生姓名

struct student *next; //next 指针 指向 struct student 类型的变量

}stu;

里面的变量都是数组

180850861.png

那么,如何定义(具有)结构中的数组变量,遍历链表中的结构并按结构中的变量进行排序?

用于比较数组大小并比较两个字符串的大小的函数是: strcmp(),它是字符串比较字符串的比较.

数组之间的赋值函数为strcpy()===“ string copy”

升序:

824512ad45321a288c0a7b766ea77309.gif

/***************

函数功能:

升序排列出勤学生

返回:指向链表表头的指针

/***************/

struct student *sort_message_order(struct student* head) //升序 按照ID顺序

{struct student *Back,*pointer; //p指针指向新的节点 back指针指向链表的尾节点

struct student temp; //定义结构体student别名,typedef也可以定义的结构体别名

Back=head->next;

pointer=head->next; //跳过头结点 指向下一个节点 头结点中没有

while(Back!=NULL) //如果尾节点不为空 就一直遍历下去

{while(pointer->next!=NULL) //如果指向新开辟的结点不为空就一直遍历下去

{

pointer=pointer->next; //指向下一个新开辟的结点

if ( strcmp( Back->ID,pointer->ID)>0 ) //如果back->ID大于pointer->ID就返回大于0的值;后面大于前面的 往后放

{

strcpy(temp.ID,Back->ID);

strcpy(temp.name,Back->name); //把尾节点值赋值给临时temp结构体变量

strcpy( Back->ID,pointer->ID);

strcpy(Back->name,pointer->name); //把指向的新节点 跟尾节点交换 位置

strcpy(pointer->ID,temp.ID);

strcpy(pointer->name,temp.name);//将临时temp结构体变量赋值给指向的结构体变量

}

}

Back=Back->next; //指向下一个尾节点

pointer=Back; //指向尾节点

}return head; //返回头结点

}

降序:

/***************

函数功能:

降序排列出勤学生

返回:指向链表表头的指针

/***************/

struct student * sort_message_Desc(struct student* head)//Descending降序

{struct student *Back,*pointer; //p总是指向新申请的结点 back总是指向链表的尾节点

structstudent temp;

Back=head->next;

pointer=head->next;//跳过头结点,头结点中没有

while(Back!=NULL)

{while(pointer->next!=NULL)

{

pointer=pointer->next;if ( strcmp( Back->ID,pointer->ID)<0 ) //back->ID小于pointer->ID返回负数 把最小的 往后放 降序

{

strcpy(temp.ID,Back->ID);

strcpy(temp.name,Back->name); //把尾节点值赋值给临时temp结构体变量

strcpy( Back->ID,pointer->ID);

strcpy(Back->name,pointer->name); //指向的新节点 跟尾节点交换 位置

strcpy(pointer->ID,temp.ID);

strcpy(pointer->name,temp.name); //将临时temp结构体变量赋值给指向的结构体变量

}

}

Back=Back->next; //指向下一个尾节点

pointer=Back; //指向尾节点

}return head; //返回头结点

}

输出并打印链接列表内容:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-207432-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值