C和指针之高级指针话题通过函数指针实现在链表中找到特定的值
2017-12-06 02:00
405 查看
1、问题
通过函数指针实现在链表中找到特定的值,这里可以是int 类型或者char *类型思路:
整形数据自己写比较函数,字符串比较用strcmp,然后把这个函数指针传递到函数作为参数。
2、代码实现
#include <stdio.h> #include <string.h> typedef struct Node { struct Node *next; char value[100]; //int value; } Node; //在链表中查找找到制定的值 Node *search_list(Node *node, void const *value, int (*compare)(void const *, void const *)) { while (node != NULL) { if (compare(&(node->value), value) == 0) { printf("hello"); return node; } node = node->next; } return NULL; } int compare_int(void const *a, void const *b) { if (*(int *)a == *(int *)b) return 0; else return 1; } int main() { Node node1, node2, node3, node4, node5; strcpy(node1.value, "chenyu"); strcpy(node2.value, "chenxuan"); strcpy(node3.value, "chencaifeng"); strcpy(node4.value, "chenzixuan"); strcpy(node5.value, "chenzixi"); /** node1.value = 1; node2.value = 2; node3.value = 3; node4.value = 4; **/ node1.next = &node2; node2.next = &node3; node3.next = &node4; node4.next = &node5; node5.next = NULL; const char *value = "chenxuan"; Node *new_node = search_list(&node1, value, strcmp); if (new_node != NULL) printf("new_node value is %s\n", new_node->value); else printf("new_node is NULL\n"); /** int value = 4;; Node *new_node = search_list(&node1, *value, compare_int); if (new_node != NULL) printf("new_node value is %d\n", new_node->value); else printf("new_node is NULL\n"); **/ return 0; }
3、运行结果
1111deMacBook-Pro:malloc a1111$ gcc -g -w search_list.c -o search_list 1111deMacBook-Pro:malloc a1111$ ./search_list hellonew_node value is chenxuan
相关文章推荐
- C++ 单链表基本操作分析与实现 链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结
- Python 实现通过指针实现链表翻转,链表奇偶下标交换,链表的冒泡排序
- 通过结构体指针实现顺序链表的基础操作
- 稳扎稳打Silverlight(55) - 4.0通信之对UDP协议的支持: 通过 UdpSingleSourceMulticastClient 实现 SSM(Source Specific Multicast),即“源特定多播”
- 稳扎稳打Silverlight(55) - 4.0通信之对UDP协议的支持: 通过 UdpSingleSourceMulticastClient 实现 SSM(Source Specific Multicast),即“源特定多播”
- 实现一个挺高级的字符匹配算法: 给一串很长字符串,要求找到符合要求的字符串,例如目的串:123 1******3***2 ,12*****3 这些都要找出来
- 稳扎稳打Silverlight(55) - 4.0通信之对UDP协议的支持: 通过 UdpSingleSourceMulticastClient 实现 SSM(Source Specific Multicast),即“源特定多播”
- c++11 条款22:当使用Pimpl(指向实现的指针)时,在实现文件里定义特定的成员函数
- 使用LINUX C实现一个链表,要求:链表节点构成:姓名、分数、下一个节点指针...
- 【Weiss】【第03章】练习3.3:通过交换指针交换单/双链表元素
- C实现 LeetCode->Reverse Linked List (双指针大法)(单链表反转)
- 函数多个返回值(返回多个参数/局部变量)通过双重指针来实现
- php动态网页实现页面静态化 通过在初次被访问时生成html文件保存起来,下次该PHP程序被访问时就直接找到以前被访问过的html页面
- 通过链表实现栈的基本操作
- 不用指针链表实现先入先出队列
- 【LeetCode-面试算法经典-Java实现】【143-Copy List with Random Pointer(有随机指针的链表复制)】
- 带链表头指针和尾指针的 list 模板实现
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 用指针实现链表--插入排序
- 树用链表实现(链表使用二重指针减少判断以及空间复杂度)