以前写博客,为了增加关注度,现在呢?写给自己
线性表是一种典型的线性结构,是最简单、最常用的数据结构,比如栈、队列都可以说是线性表.
逻辑结构:
由n个数据元素构成,对于非空的来说,有且只有一个开始结点,有且只有一个尾巴结点,内部结点有且只有一个直接前驱,和一个直接后驱。同一个线性表内部的数据元素的类型相同,每个元素的数据元素相同
数据操作:
初始化、计算表长、获取结点、查找结点、插入结点、删除结点
存储:
1.顺序存储:
构造数据元素:
public class DATA {
String key;//结点的关键字
String name;
int age;
}
构造线性表:
/**
* 主要用于定义顺序表结构
* @author Administrator
*
*/
public class SLType {
static final int MAXLEN=100;
DATA[] ListData =new DATA[MAXLEN+1];//定义顺序表的结构数组
int ListLen;//顺序表已存结点的数量
void SLInit(SLType SL){ //初始化顺序表
SL.ListLen=0;//初始化为空表
}
int SLLength(SLType SL){
return (SL.ListLen); //返回顺序表的元素数量
}
int SLInsert(SLType SL,int n,DATA data){
int i;
if(SL.ListLen>=MAXLEN){
System.out.print("顺序表已满,不能插入结点!\n");
return 0;
}
if(n<1||n>SL.ListLen-1){//插入结点序号不正确
System.out.print("插入元素序号错误,不能插入元素!\n");
return 0;
}
for(i=SL.ListLen;i>=n;i--){
SL.ListData[i+1]=SL.ListData[i];
}
SL.ListData[n]=data;
SL.ListLen++;
return 1;
}
int SLAdd(SLType SL,DATA data){//增加元素到顺序表的尾部
if(SL.ListLen>=MAXLEN){ //顺序表已经满了
System.out.println("顺序表已满,不能在加结点了");
return 0;
}
SL.ListData[++SL.ListLen]=data;
return 1;
}
int SLDelete(SLType SL,int n){ //删除顺序表中的数据元素
int i;
if(n<1||n>SL.ListLen+1){
System.out.println("删除结点序号错误,不能删除成功!\n");
return 0;
}
for(i=n;i<SL.ListLen;i++){
SL.ListData[i]=SL.ListData[i+1];
}
SL.ListLen--;
return 1;
}
DATA SLFindByNum(SLType SL,int n){
if(n<1||n>SL.ListLen+1){
System.out.println("结点序号错误,不能返回结点!\n");
return null;
}
return SL.ListData[n];
}
int SLFindByCount(SLType SL,String key){
int i;
for(i=1;i<=SL.ListLen;i++){
if(SL.ListData[i].key.compareTo(key)==0){
return i;
}
}
return 0;
}
int SLALL(SLType SL){ //显示顺序表中的所有结点
int i;
for(i=1;i<=SL.ListLen;i++){
System.out.print("{"+SL.ListData[i].key+","+
SL.ListData[i].name+","+SL.ListData[i].age+"}");
}
return 0;
}
}
.....
测试结果:
以前老是看不懂,明明知道数据结构是基础,很重要的,今天突然就明白了,呵.