java释放list_LinkedList - 如何释放使用malloc分配的内存

Content of Garbage Collector.h

#define Stack struct _stack

#define _MALLOC_S(type,num) (type *)_GC_malloc(sizeof(type)*num)

#pragma pack(1)

//Structure for adressing alocated memory into.

Stack {

int *adress_i;

char *adress_c;

float *adress_f;

double *adress_d;

Stack *next;

};

//Safe malloc

void *_GC_malloc(size_t size)

{

void* ptr = malloc(size);

if(ptr == NULL)

return _GC_malloc(size);

else

return ptr;

}

//Push new element on Stack after every malloc

void Add_New(int *i, float *f , double *d , char *c , Stack *p)

{

Stack *q = _MALLOC_S(Stack,1);

q->adress_i = i;

q->adress_f = f;

q->adress_c = c;

q->adress_d = d;

q->next = p->next;

p->next = q;

q = NULL;

}

//before ending program remove adresses that was allocated in memory, and pop entire Stack

void Free_All(Stack *p)

{

//free head (dummy element)

Stack *Temp = p->next;

Stack *_free = p;

free(_free);

void *oslobodi;

while(Temp != NULL)

{

_free = Temp;

Temp = _free->next;

if(_free->adress_i != NULL){

oslobodi = _free->adress_i;

free((int *)oslobodi);

}

else if(_free->adress_c != NULL){

oslobodi = _free->adress_c;

free((char *)oslobodi);

}

else if(_free->adress_f != NULL){

oslobodi = _free->adress_f;

free((float *)oslobodi);

}

else{

oslobodi = _free->adress_d;

free((double *)oslobodi);

}

free(_free);

}

_free = p = Temp;

}

/*

declare variable (var) and dinamicly alocate memory with simple macro,

and add to stack of linked list

*/

#define obj_int(var) int *var = _MALLOC_S(int,1); *var = 0; Add_New(var, NULL, NULL, NULL, Head);

#define obj_char(var) char *var = _MALLOC_S(char,1); *var = 0; Add_New(NULL, NULL, NULL, var, Head);

#define obj_float(var) float *var = _MALLOC_S(float,1); *var = 0; Add_New(NULL, var, NULL, NULL, Head);

#define obj_double(var) double *var = _MALLOC_S(double,1); *var = 0; Add_New(NULL, NULL, var, NULL, Head);

#define obj_struct(_type,_name) struct _type _*name = (struct _type *)malloc(sizeof(struct _type));

#define _INIT_ROW(var,num) for(int i = 0; i < num; i++) var[i] = 0;

/*

same, but for row!

*/

#define row_int(var, num) int *var = _MALLOC_S(int,num); _INIT_ROW(var,num) Add_New(var, NULL, NULL, NULL, Head);

#define row_char(var, num) char *var = _MALLOC_S(char,num); _INIT_ROW(var,num) Add_New(NULL, NULL, NULL, var, Head);

#define row_float(var, num) float *var = _MALLOC_S(float,num); _INIT_ROW(var,num) Add_New(NULL, var, NULL, NULL, Head);

#define row_double(var, num) double *var = _MALLOC_S(double,num); _INIT_ROW(var,num) Add_New(NULL, NULL, var, NULL, Head);

#define string(var, value) row_char(var, (strlen(value)+1)) strcpy(var, value);

/* with this you create a Stack and allocate dummy element */

#define Main(_type) _type main(void) { Stack *Head = _MALLOC_S(Stack,1); Head->next = NULL; Stack *_q_struct;

/* with this macro you call function for dealocate memory (garbage collecting)*/

#define End Free_All(Head); }

/*same thing for the other functions*/

#define Function(name_function, _type, ...) _type name_function(##__VA_ARGS__) { Stack *Head = _MALLOC_S(Stack,1); Head->next = NULL;

#define End_Ret(ret_var) Free_All(Head); return (ret_var); }

#define Call(name_function, ...) name_function(##__VA_ARGS__)

#define Define_Function(name_function, _type, ...) _type name_function(##__VA_ARGS__);

some_program.c的例子 . header systemIO是一组像上面这样的更多 Headers ! :)

#include

Main(void)

int num_elements = 10;

row_int(row_elements, num_elements); //alocating row_elements object

for(int i = 0; i < num_elements; i++)

row_elements[i] = i; //initializing row_elements

End //Garbage delete row_elements and end of program

// row_int[0] = 0, row_int[1] = 1 ....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LinkedListJava中集合类之一,是一个双向链表。它特有的方法包括: 1. addFirst(E e):将指定元素插入此列表的开头。 2. addLast(E e):将指定元素插入此列表的结尾。 3. getFirst():返回此列表的第一个元素。 4. getLast():返回此列表的最后一个元素。 5. removeFirst():移除并返回此列表的第一个元素。 6. removeLast():移除并返回此列表的最后一个元素。 7. offerFirst(E e):在此列表的开头插入指定的元素。 8. offerLast(E e):在此列表的结尾插入指定的元素。 9. pollFirst():获取并移除此列表的第一个元素,如果此列表为空,则返回 null。 10. pollLast():获取并移除此列表的最后一个元素,如果此列表为空,则返回 null。 ### 回答2: ListJava集合类中常用的一种,而LinkedListList集合中的一种实现,和ArrayList相比,它具有一些独特的方法。 首先,LinkedList支持在list开头和结尾添加元素的方法。即addFirst(E e)和addLast(E e)。这两个方法在其他List实现中是没有的。这对于链表来说非常方便,因为在链表中,添加元素时只需要修改指针的指向即可,而不用像数组一样需要移动其他元素。 其次,LinkedList支持获取链表的头部和尾部元素的方法。即getFirst()和getLast()。同样,其他List实现中也没有这种方法,这也是LinkedList适合做队列和栈这种数据类型的原因之一。 除了这些独有的方法之外,LinkedList还具有一些其他List实现也有的方法。例如remove(int index)和size()方法就是常规List接口所具有的。LinkedList还实现了Queue和Deque接口,使得LinkedList也可以充当队列和双端队列。 需要注意的一点是,由于LinkedList是链表的形式,所以访问其中的元素时速度比较慢。因此,在需要随机访问元素的情况下,最好使用ArrayList。但是,当需要频繁在开头和结尾添加或删除元素时,LinkedList则具有明显的优势。 总之,LinkedListList集合中的一种实现,它具有一些独特的方法,如addFirst,getFirst等方法。同时,它也可以作为队列、栈、双端队列等数据结构的实现。但是在需要随机访问元素的情况下,建议使用其他List实现,如ArrayList。 ### 回答3: Java集合类是Java编程中常用的工具之一,List是其中一种很重要的集合类。LinkedListList的一种实现方式,LinkedList在插入和删除数据方面比较快。本文将会介绍LinkedList的特有方法的使用LinkedList继承了AbstractSequentialList,也实现了List、Deque、Cloneable、Serializable接口。由于LinkedList的底层实现是双向链表,因此它具有插入和删除元素效率高的特点。 下面是LinkedList特有的方法: 1. public void addFirst(E e),将指定元素添加到此列表的开头: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); linkedList.addFirst("C++"); System.out.println(linkedList); // [C++, Java, Python] 2. public void addLast(E e),将指定元素添加到此列表的结尾: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); linkedList.addLast("C++"); System.out.println(linkedList); // [Java, Python, C++] 3. public E removeFirst(),删除并返回此列表的第一个元素: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); linkedList.add("C++"); String first = linkedList.removeFirst(); System.out.println(first); // Java System.out.println(linkedList); // [Python, C++] 4. public E removeLast(),删除并返回此列表的最后一个元素: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); linkedList.add("C++"); String last = linkedList.removeLast(); System.out.println(last); // C++ System.out.println(linkedList); // [Java, Python] 5. public E getFirst(),返回此列表的第一个元素: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); linkedList.add("C++"); String first = linkedList.getFirst(); System.out.println(first); // Java 6. public E getLast(),返回此列表的最后一个元素: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); linkedList.add("C++"); String last = linkedList.getLast(); System.out.println(last); // C++ 7. public E peekFirst(),获取但不移除此列表的第一个元素: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); linkedList.add("C++"); String first = linkedList.peekFirst(); System.out.println(first); // Java System.out.println(linkedList); // [Java, Python, C++] 8. public E peekLast(),获取但不移除此列表的最后一个元素: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); linkedList.add("C++"); String last = linkedList.peekLast(); System.out.println(last); // C++ System.out.println(linkedList); // [Java, Python, C++] 9. public boolean offerFirst(E e),将指定元素插入此列表的开头: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); boolean result = linkedList.offerFirst("C++"); System.out.println(result); // true System.out.println(linkedList); // [C++, Java, Python] 10. public boolean offerLast(E e),将指定元素插入此列表的结尾: LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("Java"); linkedList.add("Python"); boolean result = linkedList.offerLast("C++"); System.out.println(result); // true System.out.println(linkedList); // [Java, Python, C++] LinkedList是一个非常实用的Java集合类,我们可以根据自己的需求选择使用其中的特有方法。在实际开发中,结合List可以方便地实现队列和栈的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值