JAVA/C 线性顺序存储结构

原创 2016年05月30日 12:01:12

首先是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));
		}

	}

}

再来看看C代码:

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

ArrayList2.c

#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;

}


测试文件 main.c


#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");
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

java数据结构--线性结构

摘自网上关于数据结构一段话: 一、数据结构概念 用我的理解,数据结构包含数据和结构,通俗一点就是将数据按照一定的结构组合起来,不同的组合方式会有不同的效率,使用不同的场景,如此而已。比...
  • xianymo
  • xianymo
  • 2014年10月09日 23:42
  • 1443

数据结构C语言版线性链表的12个基本操作

线性链表的12个基本操作 分别是:构造 销毁 清空      判空  表长 取元      定位  前驱 后继      插入 遍历;在此为了好记我分别二字短语三三结合 ,接下来会一一解释。 头文件和...
  • WLxinliang
  • WLxinliang
  • 2016年10月14日 23:00
  • 3076

线性表链式存储结构的c语言实现

线性表链式存储结构的c语言实现的操作
  • wxwd1
  • wxwd1
  • 2014年05月13日 13:54
  • 2354

java和C结构体通信

package com.cvicse.naba.service.impl.user; import java.util.ArrayList; import java.util.HashMap; im...
  • yangguangmeng
  • yangguangmeng
  • 2014年12月16日 19:33
  • 1364

java和C结构体通信

package com.cvicse.naba.service.impl.user;      import java.util.ArrayList;   import java.util.Ha...
  • eydwyz
  • eydwyz
  • 2017年08月07日 14:35
  • 161

java解析C结构体框架

jcstruct 地址:http://git.oschina.net/yhIlc/jcstruct/tree/master 介绍   描述:为了解决java与C结构通信过程中结构体解析问题。 ...
  • haozisex
  • haozisex
  • 2017年05月23日 15:41
  • 1059

[数据结构]线性结构——串

在非数值处理、事务处理等问题常涉及到一系列的字符操作。计算机的硬件结构主要是反映数值计算的要求,因此,字符串的处理比具体数值处理复杂。 串类型的定义 串的基本概念 串(字符串):是零个或多个字符...
  • ouyangshima
  • ouyangshima
  • 2015年07月08日 20:32
  • 2547

java开发C编译器:结构体的解析和执行

更详细的讲解和代码调试演示过程,请参看视频 用java开发C语言编译器结构体是C语言中,最为复杂的原生数据结构,它把多种原生结构结合在一起,形成一个有特点含义的数据结构,要实现一个完整的C语言编译器...
  • tyler_download
  • tyler_download
  • 2017年02月23日 11:02
  • 252

线性查找,二分查找(C语言版)

/* 1、无序线性表的顺序查找 2、有序线性表的顺序查找 3、折半查找 */ #include #include #define N 10 int E[N]={213,111,222,...
  • xiaohuizi2009
  • xiaohuizi2009
  • 2013年03月04日 19:10
  • 1893

数据结构中线性表的c语言代码实现

/*  LinkList *L定义了一个LinkList指针   LinkList *&L是指针的引用 */  #include #include typedef char ListDat...
  • lmxt520
  • lmxt520
  • 2014年08月14日 15:52
  • 863
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA/C 线性顺序存储结构
举报原因:
原因补充:

(最多只允许输入30个字)