“封装”的简单实现
来源:互联网 发布:苹果手机数据恢复软件免费版 编辑:程序博客网 时间:2024/05/22 10:34
整个函数的功能:创建链表的及打印链表内容,查找链表中的某个值,删除链表中的某个值
主函数内容:
文件名:main.c
#include "person.h"void print_jack(struct person *curr){ struct jack *t = (struct jack *)curr; printf("%s eat %s\n",t->name,t->food);}void print_fuck(struct person *curr){ struct fuck *t = (struct fuck *)curr; printf("%s eat %s\n",t->name,t->food);}void show(struct person *head){ if(NULL == head) { return; } while(head) { if(0 == strcmp(head->labe, "jack")) { travers(head,print_jack); } else { travers(head,print_fuck); } head = head->next; }}int main(){ int i = 5; char jack[5][10] = {"jack_1","jack_2","jack_3","jack_4","jack_5"}; char jfd[10] = {"orange"}; char fuck[5][10] = {"fuck_1","fuck_2","fuck_3","fuck_4","fuck_5"}; char ffd[10] = {"apple"}; struct person *head = NULL; while(i--) { struct jack *j = (struct jack *)malloc(sizeof(struct jack)); strcpy(j->name,jack[i]); strcpy(j->food,jfd); j->p.labe = "jack"; head_list(&head,&j->p); struct fuck *f = (struct fuck *)malloc(sizeof(struct fuck)); strcpy(f->name,fuck[i]); strcpy(f->food,ffd); f->p.labe = "fuck"; head_list(&head,&f->p); } show(head); FIND(head,"fuck_1"); printf("=============\n"); delete(head,"jack_2"); show(head); return 0;}
头文件中函数的定义:
文件名:person.c
#include "person.h"void head_list(struct person **head, struct person *n){ n->pre = NULL; n->next = *head; if(NULL != *head) { (*head)->pre = n; } *head = n;}void travers(struct person *head, void (*fp)(struct person *)){ fp(head);}头文件内容:
文件名:person.h
#pragma once#include <stdio.h>#include <string.h>#include <stdlib.h>struct person{ char *labe; struct person *pre; struct person *next;};struct jack{ struct person p; char name[10]; char food[10];};struct fuck{ struct person p; char name[10]; char food[10];};void head_list(struct person **head, struct person *n);void travers(struct person *head,void (*fp)(struct person *));void FIND(struct person *head,void *key);void delete(struct person **head,char *key);查找函数内容
文件名:find.c
#include "person.h"void FIND(struct person *head,void *key){ int ret = 0; while(head) { if(0 == strcmp(head->labe,"jack")) { if(0 == strcmp(((struct jack *)head)->name, (char *)key)) { printf("Find jack !\n"); ret += 1; } } else if(0 == strcmp(head->labe,"fuck")) { if(0 == strcmp(((struct fuck *)head)->name, (char *)key)) { printf("Find fuck !\n"); ret += 1; } } head = head->next; } if(0 == ret) { printf("NO,Find !\n"); }}删除函数内容
文件名:delete.c
#include "person.h"void delete(struct person **head,void *key){ int ret = 0; struct person *past = *head; struct person *curr = past; while(curr) { if(0 == strcmp(curr->labe,"jack")) { if(0 == strcmp(((struct jack *)curr)->name, (char *)key)) { if(curr == *head) //如果是第一个 { (*head)->next->pre = (*head)->pre; *head = (*head)->next; } if(curr->next == NULL) //如果是最后一个 { curr->pre->next = NULL; } else { curr->next->pre = past; past->next = curr->next; } free(curr); curr = NULL; ret += 1; } } else if(0 == strcmp(curr->labe,"fuck")) { if(0 == strcmp(((struct fuck *)curr)->name, (char *)key)) { if(curr == *head) { (*head)->next->pre = (*head)->pre; (*head) = (*head)->next; } if(curr->next == NULL) { curr->pre->next = NULL; } else { curr->next->pre = past; past->next = curr->next; } free(curr); curr = NULL; ret += 1; } } //curr = curr->next; if(0 == ret) { past = curr; curr = curr->next; } }}
阅读全文
0 0
- “封装”的简单实现
- 系统调用的简单封装类实现
- C语言实现简单的日志封装
- 封装简单分页类的实现
- Android-万能 Adapter 封装(实现textview,imageView 的简单封装,封装 jar 包)
- PHP+MySql实现的简单分页类的封装
- 完全封装简单的实现图片的圆形剪切效果
- javascript(jquery)实现前台html简单的分页封装
- 简单封装Jackson,实现JSON String<->Java Object的Mapper.
- 对nodejs express 框架的简单封装实现快速开发
- 简单实现 scrollview无限轮播的封装
- JS实现简单的对dom操作封装
- java spring 简单封装出自己的DAO Service实现
- okHttp封装,使用超简单的网络请求实现
- 安卓RXBus的简单实现与封装
- Dozer 简单封装实现深度转换Bean<->Bean的Mapper
- Retrofit+okhttp3的简单封装实现网络请求和拦截
- 对利用反射和prototype实现继承的简单封装
- [Leetcode] 396. Rotate Function 解题报告
- kylin创建cube时的步骤及一些notes
- 服务器上的内容无法复制到本机
- 当你输入一个网址的时候,实际会发生什么
- Ajax data数据格式
- “封装”的简单实现
- MySQL数据库TDSQL架构分析及采用策略扩容流程
- LeetCode--Insert Interval
- Android DiskLruCache完全解析,硬盘缓存的最佳方案
- 一个实例讲解fastbins上的堆利用
- ORA-00020:maximum number of processes (500) exceeded 错误解决方法
- EhCache缓存介绍
- Spring-boot中读取config配置文件的两种方式
- SD卡驱动理论篇