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


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

相关文章推荐

线性表之顺序存储结构--C实现

说在前面 数据结构和算法是程序设计的灵魂。坦诚的说,我在这方面是弱的可以。虽然工作这么多年了,因为种种借口,这块知识一直是我的痛处。 曾经在面试时大言不惭的说,这些知识在工作中很少用到,所以当年学...
  • lincyang
  • lincyang
  • 2013年02月24日 12:43
  • 43340

数据结构-线性表顺序存储(C/C++)

顺序表的基本算法的实现,实现如下功能:         BOOL InitList(List *list)    //创建线性表         void DestroyList(List *list...

C/C++ 数据结构---线性顺序存储数据:查询快,增删慢

顺序存储结构       顺序存储结构其主要使用的是数组来存储数据的, 所以它的特点是:查询快,增删慢!  为什么增删慢呢?由于增删需要把插入的位置元素后移或者前移 所以效率就要慢了!当然如果是插入在...

自定义顺序存储结构线性表--java语言描述

自定义顺序存储结构线性表–java语言描述声明线性表接口public interface LinearList { public int size(); public boolean a...

用Java实现线性表的顺序存储结构

本文使用Java实现线性表的顺序存储结构,虽然Java提供了动态数组ArrayList,但是自己动手做做上不一样的,欢迎交流想法! 一、源代码 在Eclipse中新建一个Java project,包括...

JAVA数据结构之线性表的顺序存储

用JAVA实现线性表的顺序存储结构的代码如下所示: public class SeqList { private Object array[]; private int capacity;//顺...

Java数据结构——线性表的顺序存储实现

Java数据结构——线性表的顺序存储实现一、描述 线性结构特点: (1)存在唯一的一个被称作“第一个”的数据元素 (2)存在唯一的一个被称作“最后一个”的数据元素 (3)除第一个之外,集合中的...

线性表-顺序存储(Java数据结构)

一、线性表  一个线性表(Linear List)是由n(n≥0)个数据元素(结点,它可以是一个字母,数字,记录或更复杂的信息)所构成的有限序列。线性表逻辑地表示为:(a0,a1,…,an-1)。其中...

线性表的顺序存储结构(java版)

在说线性表的顺序存储结构之前,首先要讲一下必要的定义。 线性表的定义 :零个或多个数据元素的有限序列 线性表的顺序存储结构 :用一段地址连续的存储单元依次存储线性表的数据元素。   ...
  • zzjmay
  • zzjmay
  • 2014年12月26日 17:11
  • 389
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA/C 线性顺序存储结构
举报原因:
原因补充:

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