首先是JAVA代码:
package com.xielinhua.arraylist; public class MyArrayList<T> { private Object[] data; private int cap = 10;// 空间大小 private int newCap = 10; private int len = 0; public MyArrayList() { data = new Object[cap];// 初始化一个通用数组 } /** * 在头部加入元素 * * @param t * @return */ public boolean addFir(T t) { addCap(); for (int i = len; i > 0; i--) { data[i] = data[i - 1]; } data[0] = t; len++; return true; } /** * 判断是否要增加空间 */ private void addCap() { if (len == cap) { Object[] newData = new Object[cap + newCap]; for (int i = 0; i < len; i++) { newData[i] = data[i]; } data = newData; } } /** * 在尾部加入元素 * * @param t * @return */ public boolean addEnd(T t) { addCap(); data[len] = t; len++; return true; } /** * 在指定位置加入元素 * * @param t * @param pos * @return */ public boolean add(T t, int pos) { addCap(); if (pos >= len) { return addEnd(t); } int i = 0; for (i = len; i > pos; i--) { data[i] = data[i - 1]; } data[i] = t; len++; return false; } /** * 删除指定位置的元素 * * @param index * @return */ public boolean remove(int index) { for (int i = index + 1; i < len; i++) { data[i - 1] = data[i]; } len--; return true; } /** * 获取表的长度 * * @return */ public int getLen() { return len; } /** * 获取指定位置的元素 * * @param pos * @return */ @SuppressWarnings("unchecked") public T getNode(int pos) { return (T) data[pos]; } }
package com.xielinhua.link; import com.xielinhua.arraylist.MyArrayList; public class Test { public static void main(String[] args) { MyArrayList<Integer> list = new MyArrayList<>(); // list.add(10, 0); // list.add(11, 3); // list.add(12, 2); // list.add(13, 0); // list.add(23, 2); list.addFir(1); list.addFir(2); list.addFir(3); list.addFir(4); list.addFir(5); // list.addEnd(21); // list.addEnd(22); // list.addEnd(23); // list.addEnd(24); // LinkedList<Integer> list = new LinkedList<>(); // list.add(12, 0); // list.add(13, 0); // list.add(14, 0); // list.add(15, 0); for (int i = 0; i < list.getLen(); i++) { System.out.println("数据==" + list.getNode(i)); } System.out.println("==============="); list.remove(0); for (int i = 0; i < list.getLen(); i++) { System.out.println("数据2==" + list.getNode(i)); } } }
ArrayList2.h
#ifndef _ARRAY_LIST_ #define _ARRAY_LIST_ typedef void Node; typedef void ArrayList; typedef struct List_ { int len; int cap; unsigned int *List; }List; List* create(); int add(List* list,Node* node, int pos); Node* getNode(List* list,int pos); int desory(List* list); int remove(List* list,int pos); #endif
#include"ArrayList2.h" #include<stdlib.h> /*创建一个线性表*/ List* create() { List* list = (List*)malloc(sizeof(List));//分配内存 list->cap = 10; list->List = (unsigned int*)malloc(sizeof(unsigned int)*list->cap);//分配数组内存 list->len = 0; return list; } /*在指定位置加入元素*/ int add(List* list, Node* node,int pos) { unsigned int* arrayList=list->List; if (list->len == 0) { arrayList[0] =(unsigned int) node; list->len++; return 0; } int i = 0; for (i = list->len; i > pos; i--) { list->List[i] = list->List[i-1]; } list->List[i] = (unsigned int)node; list->len++; return 0; } /*获取指定位置的元素*/ Node* getNode(List* list, int pos) { return (unsigned int*)list->List[pos]; } /*释放内存*/ int desory(List* list) { if (list==NULL) { return -1; } free(list); free(list->List); return 0; } /*删除指定位置的元素*/ int remove(List* list, int pos) { int i = 0; for (i = pos - 1; i < list->len;i++) { list->List[i] = list->List[i+1]; } list->len--; return 0; }
#include<stdlib.h> #include<stdio.h> #include"ArrayList2.h" void main() { List* list=create(); int age = 5; int age1 = 4; int age2 = 3; add(list,&age,0); add(list, &age1, 0); add(list, &age2, 1); int i = 0; for (i = 0; i < list->len; i++) { int* node=(int*)getNode(list, i); printf("%d\n",*node); } remove(list,0); printf("======================\n"); for (i = 0; i < list->len; i++) { int* node = (int*)getNode(list, i); printf("%d\n", *node); } desory(list); system("pause"); }