博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表的操作和函数指针的基本使用
阅读量:6824 次
发布时间:2019-06-26

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

============================================================================ Name        : TestLinkedList.c Author      : lf Version     : Copyright   : Your copyright notice Description : 1 单链表的增删改查等操作               2 函数指针的使用.如示例中的:void (*visit)(link) ============================================================================ */#include 
#include
#include "Linkedlist.h"//打印结点void printNode(link p){ printf("%d\n",p->item);}int main(void) { //插入结点 link p = makeNode(10); insertNode(p); p = makeNode(8); insertNode(p); p = makeNode(6); insertNode(p); //遍历结点 traverse(printNode); //查找结点 link searchResult=searchNode(8); printf("%s","searchResult:"); printNode(searchResult); //删除结点 link deleteResult=deleteNode(searchResult); freeNode(deleteResult); traverse(printNode); printf("delete finish \n"); //更新结点 updateNode(6,99); traverse(printNode); printf("update finish \n"); //销毁链表 destroyLinkedlist(); return EXIT_SUCCESS;}
 

/* ============================================================================ Name        : Linkedlist.h Author      : lf Version     : Copyright   : Your copyright notice 注意的问题                  : 头文件(.h)的书写格式和惯例,比如此处头文件为Linkedlist.h,所以这么写:               #ifndef LINKEDLIST_H               #define LINKEDLIST_H               ..................               ..................               ..................               #endif ============================================================================ */#ifndef LINKEDLIST_H#define LINKEDLIST_Htypedef struct node *link;struct node {	unsigned char item;	link nextNode;};//生成新的结点link makeNode(unsigned char item);//释放(free)结点void freeNode(link p);//向链表中插入结点void insertNode(link p);//删除链表中的结点link deleteNode(link p);//遍历链表void traverse(void (*visit) (link));//查找结点link searchNode(unsigned char key);//更新结点void updateNode(unsigned char oldKey,unsigned char newKey);//销毁链表void destroyLinkedlist();#endif
/* ============================================================================ Name        : LinkedList.c Author      : lf Version     : Copyright   : Your copyright notice   注意的细节                : 包含系统的头文件用的是<>包含自己的头文件用的是"" ============================================================================ */#include 
#include
#include "Linkedlist.h"static link head = NULL;link makeNode(unsigned char item) { link p; p = malloc(sizeof *p); p->item = item; p->nextNode = NULL; return p;}void insertNode(link p) { p->nextNode = head; head = p;}//删除链表中的结点link deleteNode(link p) { //删除的是头结点 if (p == head) { head = p->nextNode; return p; } //删除的是除头结点以外的结点 link preNode; for (preNode = head; preNode; preNode = preNode->nextNode) { if (preNode->nextNode == p) { preNode->nextNode = p->nextNode; return p; } } return NULL;}void freeNode(link p) { free(p);}/** * 遍历链表. * 注意此处的函数指针: * void (*visit)(link) * 函数的输入参数是link类型,返回值是void * 所以一般写成: 返回值 (*函数名)(输入参数) */void traverse(void (*visit)(link)) { link p = NULL; for (p = head; p; p = p->nextNode) { visit(p); }}link searchNode(unsigned char key) { link p = NULL; for (p = head; p; p = p->nextNode) { if (p->item == key) { return p; } } return NULL;}void updateNode(unsigned char oldKey, unsigned char newKey) { link p = NULL; for (p = head; p; p = p->nextNode) { if (p->item == oldKey) { p->item = newKey; } }}void destroyLinkedlist(){ link q; link p=head; head=NULL; while(p){ q=p; p=p->nextNode; freeNode(q); }}

转载地址:http://qolzl.baihongyu.com/

你可能感兴趣的文章
局域网络必备-mac地址修改
查看>>
Linux学习之逻辑卷管理
查看>>
about asm in linux
查看>>
我的友情链接
查看>>
通过Power Shell 管理Office 365
查看>>
ECMAScript 语法
查看>>
Flex 数据类型学习总结
查看>>
ssh 连接非22端口服务器的方法:
查看>>
Linux基础入门
查看>>
org.hibernate.hql.internal.ast.QuerySyntaxException: user is not mapped
查看>>
图解排序算法之快速排序-双端探测法
查看>>
mysql
查看>>
11月15日云栖精选夜读:分布式服务框架Dubbo疯狂更新!阿里开源要搞大事情?...
查看>>
Druid数据库连接池就这么简单
查看>>
Python最假的库:Faker
查看>>
IDE 插件新版本发布,开发效率 “biu” 起来了
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石
查看>>
Redis 基础、高级特性与性能调优
查看>>
BZT52C15S资料
查看>>
Laravel Telescope入门教程(上)
查看>>