数据结构中的线性表用不同的语言书写
线性表的顺序表示指的是用一组地址连续的存储单元依此存储线性表的数据 元素。说白了就是一个可以自动增长长度的数组;首先数组是不可能动态增长的,必须手动更改内存大小,不同的语言有不同的实现方式,C语言使用malloc()函数 来动态扩展内存,其它的高级语言比如java则通过new对象来扩充,php语言是底层直接支持动态数组的,底层也是同样的原理封装。
C语言:
#include <stdio.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
struct SqList{
int *elem; //int 型元素的存储空间基地址
int length; //当前长度
int listsize; //当前分配的存储容量,可以存储几个int类型的数据类型,以sizeof(int)为单位
};
void InitList(struct SqList *l);
int addList(struct SqList *l,int i);
void show(struct SqList *l);
void main()
{
struct SqList qs;
InitList(&qs);
int i=0;
for(i;i<200;i++){
addList(&qs,i);
}
show(&qs);
}
void InitList(struct SqList *l)
{
l->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); //把动态分配的存储空间的首地址赋给elem
if(!l->elem){ //若分配失败!退出
exit(0);
}
l->length=0;
l->listsize=LIST_INIT_SIZE;
}
int addList(struct SqList *l,int i)
{
if(l->length>l->listsize){
return -1;
}
l->elem[l->length]=i;
l->length++;
}
void show(struct SqList *l)
{
int i=0;
for(i;i<l->length;i++){
printf("%d ",l->elem[i]);
if(i%10==0 && i!=0){
printf("\n");
}
}
}
首先使用malloc()函数来扩展一定的初始内存,之后若元素超过数组长度,则使用calloc()函数分配一个连续的内存空间。
Java实现:
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrListManage arr=new ArrListManage();
for(int i=0;i<11;i++){
arr.add(i);
}
arr.show();
}
}
class ArrListManage{
private Object[] element=new Object[10];
int size=0;
public ArrListManage() {
super();
// TODO Auto-generated constructor stub
}
public void add(Object o){
this.element[this.size++]=o;
}
public void show(){
for(int i=0;i<this.size;i++){
System.out.println(this.element[i]);
}
}
}
java语言初始化的时候就给了一个一定长度的数组,若元素超过这个长度,则再new一个按一个增长因子增长比例的内存空间出来,把原来的元素再复制过去,这是我看视频里面讲的。改天研究下源码。
705

被折叠的 条评论
为什么被折叠?



