java link 使用_使用 C 实现Java LinkList
基于 ADT 链表数据结构实现的C语言版 LinkList.
C代码
typedefstruct_link_list{
inttheSize;
intmodCount;
struct_node *node;
struct_node *beginMarker;
struct_node *endMarker;
} link_list;
struct_node{
void*data;
struct_node *prev;
struct_node *next;
};
externlink_list* create_link_list(void);
externvoidlink_add(link_list *link,void*data);
externvoid* link_get(link_list *link,intindex);
externvoidlink_set(link_list *link,intindex,void*data);
externintlink_size(link_list *link);
externvoidlink_remove(link_list *link,intindex);
externvoidlink_destory(link_list *link);
typedef struct _link_list{
int theSize;
int modCount;
struct _node *node;
struct _node *beginMarker;
struct _node *endMarker;
} link_list;
struct _node{
void *data;
struct _node *prev;
struct _node *next;
};
extern link_list* create_link_list(void);
extern void link_add(link_list *link, void *data);
extern void* link_get(link_list *link, int index);
extern void link_set(link_list *link, int index, void *data);
extern int link_size(link_list *link);
extern void link_remove(link_list *link, int index);
extern void link_destory(link_list *link);
C代码
// link_list.c
// author denger
#include "../../include/common.h"
#include "../../include/link_list.h"
#define MALLOC_ERROR "Failed to allocate menory space!"
link_list* create_link_list(void){
link_list *list = (link_list*)malloc(sizeof(link_list));
if(list == NULL){
puts(MALLOC_ERROR);
returnNULL;
}
list->theSize = 0;
list->node = (struct_node*)malloc(sizeof(struct_node));
if(list->node != NULL){
list->node->data = NULL;
list->node->next = list->node->prev = NULL;// Initialize pointer NULL
list->endMarker = list->beginMarker = list->node;
}else{
puts(MALLOC_ERROR);
returnNULL;
}
returnlist;
}
// Add any type to link_list.
voidlink_add(link_list *list,void*data){
struct_node* node = (struct_node*)malloc(sizeof(struct_node));
if(node == NULL){
puts(MALLOC_ERROR);
}else{
node->prev = list->node;
list->endMarker = list->node = list->node->next = node;
node->data = data;
list->theSize++;
}
}
// Getter a node in link_list.
struct_node* _link_get_node(link_list *list,intindex){
if(index >= list->theSize || index
printf("List index out of bounds : %d\n", list->theSize);
returnNULL;
}
inti;
struct_node *node;
if(index
node = list->beginMarker->next;
for(i = 0; i
node = node->next;
}
}else{
node = list->endMarker;
intmax = link_size(list) - index - 1;
for(i = 0; i
node = node->prev;
}
}
returnnode;
}
void* link_get(link_list *list,intindex){
struct_node *node = _link_get_node(list, index);
if(node == NULL){
returnNULL;
}
returnnode->data;
}
// return the link list size.
intlink_size(link_list *list){
returnlist->theSize;
}
// replace node.
voidlink_set(link_list *list,intindex,void*data){
struct_node *node = _link_get_node(list, index);
if(node != NULL){
node->data = data;
}
}
// remove node.
voidlink_remove(link_list *list,intindex){
struct_node *node = _link_get_node(list, index);
if(node == NULL){
return;
}
node->prev->next = node->next;
node->next->prev = node->prev;
if(node != NULL){
if(node->data != NULL){
free(node->data);
}
free(node);
node = NULL;
}
list->theSize--;
}
// destory link
voidlink_destory(link_list *list){
inti = 0;
struct_node *node = list->beginMarker;
for(i = 0; i <= list->theSize; i++){
struct_node *next = node->next;
if(node != NULL){
if(node->data != NULL){
free(node->data);
}
free(node);
node = next;
}
}
free(list);
list = NULL;
}
// link_list.c
// author denger
#include "../../include/common.h"
#include "../../include/link_list.h"
#define MALLOC_ERROR "Failed to allocate menory space!"
link_list* create_link_list(void){
link_list *list = (link_list*)malloc(sizeof(link_list));
if (list == NULL){
puts(MALLOC_ERROR);
return NULL;
}
list->theSize = 0;
list->node = (struct _node*)malloc(sizeof(struct _node));
if (list->node != NULL){
list->node->data = NULL;
list->node->next = list->node->prev = NULL; // Initialize pointer NULL
list->endMarker = list->beginMarker = list->node;
}else{
puts(MALLOC_ERROR);
return NULL;
}
return list;
}
// Add any type to link_list.
void link_add(link_list *list, void *data){
struct _node* node = (struct _node*)malloc(sizeof(struct _node));
if (node == NULL){
puts(MALLOC_ERROR);
}else{
node->prev = list->node;
list->endMarker = list->node = list->node->next = node;
node->data = data;
list->theSize++;
}
}
// Getter a node in link_list.
struct _node* _link_get_node(link_list *list, int index){
if (index >= list->theSize || index < 0){
printf("List index out of bounds : %d\n", list->theSize);
return NULL;
}
int i;
struct _node *node;
if (index < link_size(list) / 2){
node = list->beginMarker->next;
for (i = 0; i < index; i++){
node = node->next;
}
}else{
node = list->endMarker;
int max = link_size(list) - index - 1;
for (i = 0; i < max; i++){
node = node->prev;
}
}
return node;
}
void* link_get(link_list *list, int index){
struct _node *node = _link_get_node(list, index);
if (node == NULL){
return NULL;
}
return node->data;
}
// return the link list size.
int link_size(link_list *list){
return list->theSize;
}
// replace node.
void link_set(link_list *list, int index, void *data){
struct _node *node = _link_get_node(list, index);
if (node != NULL){
node->data = data;
}
}
// remove node.
void link_remove(link_list *list, int index){
struct _node *node = _link_get_node(list, index);
if (node == NULL){
return;
}
node->prev->next = node->next;
node->next->prev = node->prev;
if (node != NULL){
if (node->data != NULL){
free(node->data);
}
free(node);
node = NULL;
}
list->theSize--;
}
// destory link
void link_destory(link_list *list){
int i = 0;
struct _node *node = list->beginMarker;
for (i = 0; i <= list->theSize; i++){
struct _node *next = node->next;
if (node != NULL){
if (node->data != NULL){
free(node->data);
}
free(node);
node = next;
}
}
free(list);
list = NULL;
}
C代码
intmain(intargc,char*args[]) {
link_list *list = create_link_list();
inti;
for(i = 0; i
int* value = (int*)malloc(sizeof(int));
*value = i;
link_add(list, value);
}
printf("The list size: %d\n", link_size(list));
for(i = 0; i
printf("index: %d = %d\n", i, *(int*)link_get(list, i));
}
int*new= (int*)malloc(sizeof(int));
*new= 100;
link_set(list, 0,new);
printf("\n Update the index 0 value: %d\n", *(int*)link_get(list, 0));
link_remove(list, 0);
printf("Remove Before========\n");
for(i = 0; i
printf("index: %d = %d\n", i, *(int*)link_get(list, i));
}
link_destory(list);
}
java link 使用_使用 C 实现Java LinkList相关推荐
- java python算法_用Python,Java和C ++示例解释的排序算法
java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...
- java 判断类型_如何快速入门Java编程学习(干货)
一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...
- 支持java虚拟主机_为何缺乏支持Java的虚拟主机
现在很多站长们,都青睐于香港虚拟主机建站.现在常见的是asp和PHP的程序空间很多,但是Java的少之又少,下面小编我给大家聊一聊! 一.香港Java虚拟主机成本高 使用Java程序建站,就必须要用支 ...
- 做Java头发少_这35个Java代码优化细节,你用了吗
链接:https://www.jianshu.com/p/6e472304b5ac 前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有 ...
- 我的世java途径错误_我的世界JAVA路径错误的解决方法分享
我的世界JAVA路径错误该怎么解决呢?JAVA是Minecraft运行的虚拟环境必要条件,需要您安装后才开始游戏.很多童鞋在安装过程中都遇到了JAVA路径错误的提示,这是什么原因导致的?第一手游网必须 ...
- java编程赋值运算符_跟我学java编程—简单赋值运算符“=”
赋值运算符是双目运算符,用在赋值表达式中.赋值运算符将值存储在运算符左边操作数指定的变量中.有两种赋值操作,简单赋值和复合赋值,简单赋值把运算符右边的操作数的值存储在运算符左边操作数指定的变量中:复合 ...
- java session使用_使用Neo4j和Java进行大数据分析 第2部分
本文的第一部分介绍了Neo4j及其Cypher查询语言.如果您已经阅读了第1部分,那么您已经了解了为什么Neo4j和其他图形数据库特别受社交图形或网络中用户之间关系建模的影响.您还在开发环境中安装了N ...
- java 异常信息_优雅的异常处理 -- Java中的异常
处理异常自己处理 try-catch抛出让别人处理 throws 获得异常信息 直接打印异常对象 通过异常对象调用getMessage()方法获得 通过异常对象调用printStackTrace()方 ...
- java基础知识点_零基础学习Java语言,各个阶段需要掌握的知识点
随社会的脚步的不断发展,Java技术在不断的与时俱进,这也是Java一直长盛不衰的原因之一.Java技术的学习,永远没有早晚之分,技不压身,对于21世纪的我们80后,90后,甚至00后,尤其适用! 那 ...
最新文章
- 前端 要了解是的事情
- PHP中的多行字符串传递给JavaScript方法两则
- html5交互效果,浅谈HTML5 CSS3的新交互特性
- BZOJ 1084: [SCOI2005]最大子矩阵【DP】
- Linux教程:内核怎样管理你的内存
- 使用@host获得宿主元素注入器里注入的内容
- apache部署多个项目
- php接收不到post数据_PHP解决Vue发起POST请求,接收不到数据
- java 弹窗选择_如何在java中点击button弹出一个选择框
- java中怎样调用抽象类中的非抽象方法?(对原文做修改,加入一点自己理解)
- Java list.remove( )方法需要注意的地方
- 文学-诗词-词人:词人
- 数字证书原理[转载]
- 奋斗(2)第16集剧情介绍
- 知之道,达有余而通不足;行之道,嬴有余以弥不足。知行合一,亦乎 如是。
- 基于java体育竞赛成绩管理系统(Java毕业设计)
- 渡一教育公开课web前端开发JavaScript精英课学习笔记(二十九)JavaScript 骇客帝国
- 江苏省谷歌地球高程DEM等高线下载
- 敏捷迭代管理 --需求讲解会
- 制作一个有趣的QQ机器人
热门文章
- LeetCode简单题之移动零
- 2019个嵌入式市场研究,持续的C/C++优势
- Mobileye 自动驾驶策略(一)
- 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)
- 【CV】Anaconda 安装教程|CSDN创作打卡
- HarmonyOS UI开发 DirectionalLayout(定向布局) 的使用
- 讯飞语音语音听写,设置识别语言
- 通过jQuery调用ASP.NET的AJAX
- [BZOJ1857][Scoi2010]传送带
- oracle手工启动,SQLSERVER服务手工启动 批处理文件