单链表排序(函数指针)
来源:互联网 发布:淘宝导航制作 编辑:程序博客网 时间:2024/06/05 03:48
问题描述:
用户输入数据,构成单链表,然后对单链表进行排序,能够随意切换排序的方法(列入升序降序)。
PS:
要随意切换排序的方法,那么使用函数指针作为参数传入到排序函数中,那么函数指针指向的函数就可以方便的制定排序规则了。
参考代码:
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <malloc.h>struct LinkList{ int nData; LinkList *pNext;};LinkList* head;void MySwap(int *p1, int *p2){ if (NULL == p1 || NULL == p2) return; int temp = *p1; *p1 = *p2; *p2 = temp;}void MySwap(char *p1, char *p2){ if (NULL == p1 || NULL == p2) return; char temp[50] = { 0 }; strcpy(temp, p1); strcpy(p1, p2); strcpy(p2, temp);}void MySwap(LinkList *p1, LinkList *p2){ MySwap(&p1->nData, &p2->nData);}int CmpAscend(LinkList *p1, LinkList *p2){ return p1->nData > p2->nData;}int CmdDescend(LinkList *p1, LinkList *p2){ return p1->nData < p2->nData;}void SoftLinkList(int(*CMP)(LinkList *p1, LinkList *p2)){ LinkList *p = NULL; LinkList *q = NULL; for (p = head->pNext; p->pNext != NULL; p = p->pNext) { for (q = p->pNext; q != NULL; q = q->pNext) { if (CMP(p, q)) { MySwap(p, q); } } }}void InitLinkList(){ head = (LinkList*)malloc(sizeof(LinkList)); head->nData = 0; head->pNext = NULL; int i, n, num; LinkList *p = head, *s = NULL; printf("输入链表元素个数: "); scanf("%d", &n); printf("输入 %d 个元素,用空格分隔\n", n); for (i = 0; i < n; i++) { scanf("%d", &num); s = (LinkList *)malloc(sizeof(LinkList)); s->nData = num; s->pNext = NULL; p->pNext = s; p = s; }}void PrintLinkList(){ printf("************************************************************************\n"); LinkList *p = head->pNext; while (p) { printf("%d---->", p->nData); p = p->pNext; } printf("NULL\n"); printf("************************************************************************\n\n");}int main(){ InitLinkList(); printf("初始链表序列\n"); PrintLinkList(); printf("链表升序排序\n"); SoftLinkList(CmpAscend); PrintLinkList(); printf("链表降序排序\n"); SoftLinkList(CmdDescend); PrintLinkList(); return 0;}
运行结果:
阅读全文
1 0
- 单链表排序(函数指针)
- 函数指针---排序
- 冒泡排序-函数指针
- 指针函数逆序排序
- 指针变量做函数排序
- 冒泡排序与函数指针.
- 函数指针,包装,函数指针按姓名,年龄,成绩排序
- 名字排序(指针)
- 指针排序(数组)
- 指针(字符串排序)
- 字符串排序(指针)
- 插入排序(指针)
- 使用函数指针的多功能冒泡排序
- 使用冒泡排序讲解函数指针
- 结构体指针中的部分排序函数
- 利用函数指针对数组进行排序
- 利用函数指针实现多级排序
- 函数指针和指针函数(返回指针的函数)
- mysql主从复制
- PowerPoint ppt 触发器 自定义动画 视频 音频 播放 停止
- layer中获取iFrame中的数据
- 62. Unique Paths Medium
- 常见的八种导致 APP 内存泄漏的问题
- 单链表排序(函数指针)
- 加密lob数据+加密lob数据的方式+加密的语法
- 如何启用 Apache 的 PHP-FPM 多实例
- 解释器vs编译器 && C,java,python编译过程对比
- 文章标题 CSU 1856: Sokoban(模拟)
- 微信支付
- C语言的起源
- 使用Dockerfile制作Docker镜像
- Android动画之Animator