【C++】【三】单向链表
// 单向链表.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include<stdlib.h>typedef struct LINKNODE {void* data;struct LINKNODE* next;
}linknode;typedef struct LINKLIST {LINKNODE* head;int size;
}linklist;
//print function ptr
typedef void(*PRINTLINKNODE)(void*);//init
linklist* Init_linklist() {linklist* list = (linklist*)malloc(sizeof(linklist));list->size=0;//头节点,方便判断位置list->head = (linknode*)malloc(sizeof(linknode));list->head->data = NULL;list->head->next = NULL;return list;
}void Insert_linklist(linklist* list, int pos, void* data) {if (list == NULL) {return;}if (data == NULL) {return;}if (pos < 0 || pos > list->size) {pos = list->size;}//创建新节点linknode* newnode = (linknode*)malloc(sizeof(linknode));newnode->data = data;newnode->next = NULL;//查找待插入位置 //遍历位置 //辅助指针变量linknode* pcur = list->head;for (int i = 0; i < pos; ++i) {pcur = pcur->next;}//插入 newnode->next = pcur->next;pcur->next = newnode;list->size++;
}void RemoveByPos_linklist(linklist* list, int pos) {if (list == NULL) {return;}if (pos < 0 || pos >= list->size) {return;}//查找删除节点的前一个节点linknode* pcur = list->head;for (int i = 0; i < pos; ++i) {pcur = pcur->next;}linknode* pdel = pcur->next;pcur->next = pdel->next;free(pdel);list->size--;
}void RemoveByValue_linklist(linklist* list, void* data) {}int Size_linklist(linklist* list) {return list->size;
}int Find_list(linklist* list, void* data) {if (list == NULL) {return -1;}if (data == NULL) {return-1;}//遍历查找linknode* pcur = list->head->next;int i = 0;while (pcur != NULL) {if (pcur->data == data) {break;}i++;pcur = pcur->next;}return i;
}
//返回第一个节点
void* Front_linklist(linklist* list) {return list->head->next->data;
}void Free_linklist(linklist* list) {if (list == NULL) {return;}linknode* pcur = list->head;while (pcur != NULL) {linknode* pnext = pcur->next;free(pcur);pcur = pnext;//move node/ptr}list->size = 0;free(list);
}void Print_linklist(linklist* list,PRINTLINKNODE print) {if (list == NULL) {return;}//节点遍历linknode* pcur = list->head->next;while (pcur != NULL) {//调用户传进来的函数print(pcur->data);pcur = pcur->next;}
}typedef struct PERSON {char name[64];int age;int score;
}person;void myprint(void* data) {person* p = (person*)data;printf("name:=%s,age=%d,score=%d\n", p->name, p->age, p->score);
}int main()
{linklist* list = Init_linklist();person p1 = { "aaa",18,100 };person p2 = { "bbb",19,99 };person p3 = { "ccc",20,101 };person p4 = { "ddd",17,97 };person p5 = { "eee",16,59 };Insert_linklist(list, 0, &p1);Insert_linklist(list, 0, &p2);Insert_linklist(list, 0, &p3);Insert_linklist(list, 0, &p4);Insert_linklist(list, 0, &p5);//打印Print_linklist(list, myprint);printf("-------------------------------\n");//删除RemoveByPos_linklist(list, 3);Print_linklist(list, myprint);printf("-------------------------------\n");//返回第一个节点person* ret =(person*)Front_linklist(list);printf("name=%s,age=%d,score=%d\n", ret->name, ret->age, ret->score);printf("-------------------------------\n");//销毁Free_linklist(list);system("pause");return 0;
}
相关文章:

gulp相关说明
1.当你按下ctrls 或切换到浏览器,浏览器将会会自动刷新 如果你修改的是html文件将会刷新网页如果你修改的是css或less,这个less文件或css文件将会被重载而不是刷新整个页面(这个特性在写单页面应用时尤为实用)2.模板引入 考虑以下…
IDEA中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
问题描述: 运行Java Web项目时,IDEA中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除解决方法: 1. 打开【File】—【Project Structure】,找到以下两个地方: Project Structure->Proje…

mysql 数据库乱码
mysql 数据库乱码 转载自https://www.cnblogs.com/gne-hwz/p/8748028.html 如有侵权,请联系。 遇到这种情况,现有项目的数据库已经建好,数据表也已经创建完成。 问题来的,数据库不能插入中文,调试时候发现中文数据从发…

【C++】【二】动态数组-Dynamic_linklist
// dynamicArray.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <stdlib.h> #include <iostream>typedef struct DYNAMICARRAY {int* paddr;int size;int capacity; }dynamiCarray;dynamiCarray* Init_dynamiCarray() {dynam…

在MySQL和PostgreSQL之外,为什么阿里要研发HybridDB数据库?
编者按\\在大数据火遍IT界之前,大家对数据信息的挖掘通常聚焦在BI(Business Intelligence)之上。BI具有着明确的分析需求,清晰地知道需要处理哪些信息,并且如何最终获得多维度的SQL类型数据,这种多维度的分…

Linux命令-安装zip和unzip命令
1 [rootiz2zeea05by6vofxzsoxdbz elasticsearch]# unzip elasticsearch-6.2.4.zip 2 -bash: unzip: command not found 如果你如法使用unzip命令解压.zip文件,可能是你没有安装unzip软件,下面是安装方法 命令: yum list | grep zip/unzip …

【C++】【五】循环链表
数据结构:具体的高效有序的管理内存的方法。 链表:数据结构的一种 节点:每一块内存 每一个节点可以是裸指针 也可以是结构体 ,结合企业链表的思路可以将类型强转,完成高效的访问。main.cc // 单向循环链表.cpp …

IntelliJ IDEA 设置项目编码
2019独角兽企业重金招聘Python工程师标准>>> IntelliJ IDEA-> Editor->File Encodings 转载于:https://my.oschina.net/bigxuan/blog/804345

util.sh 脚本
#!/bin/bash for i in zzzhadoop101 zzzhadoop102 zzzhadoop103 doecho " $i "ssh $i /opt/module/jdk1.8.0_144/bin/jps donebin目录是在环境变量里的,所以在哪都可以执行 /home/zzz/bin目录下touch util.sh [zzzhadoop101 bin]$ touch …

bzoj3467: Crash和陶陶的游戏
就一篇题解: BZOJ3467 : Crash和陶陶的游戏 - weixin_34248487的博客 - CSDN博客 1.离线,建出Atrie树;B树的倍增哈希数组,节点按照到根路径字典序排序 2.处理A节点对应前缀对应B中的极长可以匹配的区间。在父亲节点区间内二分即可…

载入图像并且显示
#include <opencv2/opencv.hpp> using namespace cv;void main( ) { const char *fileName "1.jpg";Mat srcImage imread("1.jpg");imshow(fileName,srcImage);waitKey(0); }

alter system switch logfile与alter system archive log current的区别
以前知道 ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换, ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例执行日志切换, 所以在RAC环境上大多时间一般使用后者,而今天遇到了不管执行多少次ALTER SYSTEM…

【C++】【六】约瑟夫问题
核心代码: int index 1;clinknode* pcur list->head.next;while (Size_circlelinkist(list)>1){if (index N) {mynum* temnum (mynum*)pcur;printf("%d ", temnum->val);clinknode* pnext pcur->next;RemoveByValue_circlelinkist(list…

第六章:内核数据结构
6.1链表链表表示一种存放和操作的可变数据元素的数据结构。链表与静态数组不同的是它包含的元素是动态创建并且插入链表的,在编译时不必知道具体需要多少个元素。另外链表中每个元素的创建时间各不相同,所以它们在内存中无需占用连续的空间。链表中每个元…

【C++】【七】栈的实现
栈的线性表实现 stack_liner_stack.h #ifndef STACK_LINER_H #define STACK_LINER_H #include <stdlib.h> #define MAX_SIZE 1024 #define stack_liner_false 0 #define stack_liner_true 1typedef struct STACK_LINER_H {void* data[MAX_SIZE];int size; }stack_liner…

推荐两款简单好用的图片放大jquery插件
一、zoomfiy.js 推荐可以从这里下载 使用说明: 使用该jquery 插件引入该插件的js:zoomfiy.js 或 min引入该插件的css:zoomfiy.css 或 min前后顺序都可js里加入 调用插件的函数 $(这里写要放大的图片).zoomify();如果有ajax 新生成的图片,要在ajax里再次调…

对图像的缩放与旋转
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" int main( ) {// 读取图像cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");// 图像读取是否成功if( !srcImage.data ) return 1; // 对图像的缩放与旋…

工具库 --- Validator (JS正则)
工具库 --- Validator 今天写的是一个正则验证类 单例模式 工具库地址:github.com/WeForStudy/… npm地址:www.npmjs.com/package/slm… 单例模式 减少不必要的对象生存,减少资源的占用 由于只需要new一次,项目中其他项目共用一个…

【C++】【九】栈的应用
【C】【九】栈的应用 就近匹配原理及其步骤: 中缀转后缀:

linux中错误日志等级
info:仅是一些基本的讯息说明而已;notice:比 info 还需要被注意到的一些信息内容;warning 或 warn:警示讯息,可能有问题,但是还不至于影响到某个 daemon 作。err 或 error :一些重大…

Mat类简略结构
class CV_EXPORTS Mat { public:int flags; // 标志位 int dims ; // 数组的维数int rows,cols; uchar *data ; // 指向数据的指针int * refcount ; // 指针的引用计数器 阵列指向用户分配的数据时,当指针为 NULL };

数据结构之快速排序
首先快速排序:就是选择一个基数,然后从两端依次进行比较,若右边大于基数,则不进行交换,直到右边的数据小于基数,然后冲左边开始和基数比较,若左边的小于基数,则进行下一个比较&#…

【C++】【十】二叉树
树的基本概念: 树具有递归性,非线性 完全二叉树 :所有节点都在 举例: 递归遍历二叉树: #include <stdlib.h> #include <stdio.h> #include <iostream> #include<string.h>typedef struct B…

记一次网络共享打印机故障
刚开始去到办公室发现电脑之间的环境是XP跟WIN10查看共享主机发现没有监听139和445端口 然后在网卡属性把Microsoft网络客户端和Microsoft网络的文件和打印机共享删除重启 重新安装这两个客户端 发现虽然共享主机有监听端口 但是其他主机还是不能访问 最后检查发现主机之间的工…

Mat 类常用函数用法示例
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> int main( ) {cv::Mat Image1( 10, 8, CV_8UC1, cv::Scalar(5) );// 矩阵行列数获取std::cout << "Image1 row: " << I…

记录智能指针使用shared_ptr使用错误
shared_ptr为智能指针,今天一次在使用shared_ptr时,错误的将其初始化方式写为shared_ptr<T> test shared_ptr<T>(),随后导致崩溃 正确做法是shared_ptr<T> test make_shared<T>() 或shared_ptr<T> test shared_ptr<…

【C++】【十一】二叉树递归遍历与非递归遍历的实现及思路
非递归遍历实现思路: #include <stdlib.h> #include <stdio.h> #include <iostream> #include <string.h>typedef struct LINKNODE {struct LINKNODE* next; }linknode;typedef struct LINKLIST {linknode head;int size; }stack_list;#…

定时调度模块:sched
定时调度模块:sched """A generally useful event scheduler class. 事件调度器类Each instance of this class manages its own queue. 类的每一个实例独立管理自己的队列 No multi-threading is implied; you are supposed to hack that yourself, or use a s…

Mat转换为IplImage 类型和CvMat 类型
cv::Mat img; CvMat cvMatImg img; IplImage IplImg img;转载:http://blog.csdn.net/zhuwei1988