顺序表
一、准备数据
class DATA{
/**
* 准备数据
*/
String keyNode;
String name;
int age;
}
二、初始化顺序表
/**初始化顺序表*/
void slInit(SLType slType){
slType.listLen = 0;
}
三、计算顺序表长度
int slLength(SLType slType){
return (slType.listLen);
}
四、插入节点
int slInsert(SLType slType , int n , DATA data){
int i;
if(slType.listLen >= MAXLEN){
System.out.println("顺序表已满,无法插入节点!");
//返回0 代表插入失败
return 0;
}
if(n < 1 || n > slType.listLen - 1){
System.out.println("插入节点序号有误,插入失败!");
return 0;
}
for(i = slType.listLen;i >= n;i--){
slType.dataList[i + 1] = slType.dataList[i];
}
slType.dataList[n] = data;
slType.listLen++;
return 1;
}
五、追加节点
int slAdd(SLType slType,DATA data){
if(slType.listLen >= MAXLEN){
System.out.println("顺序表已满,不能继续添加节点!");
return 0;
}
slType.listLen++;
slType.dataList[slType.listLen] = data;
return 1;
}
六、删除节点
int slDelete(SLType slType,int n){
int i;
if(n < 1 || n > slType.listLen){
System.out.println("该节点不存在,删除失败!");
return 0;
}
for(i = n;i < slType.listLen;i++){
slType.dataList[i] = slType.dataList[i + 1];
}
slType.listLen--;
return 1;
}
七、查找节点
1)按照序号查找节点
DATA slFindByNum(SLType slType, int n){
if(n < 1 || n > slType.listLen + 1){
System.out.println("为找到该节点,查找失败!");
return null;
}
return slType.dataList[n];
}
2)按照关键字查找节点
int slFindByCont(SLType slType, String keynode){
int i;
for(i = 1;i <= slType.listLen;i++ ){
if(slType.dataList[i].keyNode.compareTo(keynode) == 0){
return i;
}
}
return 0;
}
八显示所有节点
int slAll(SLType slType){
int i;
for(i = 1;i <= slType.listLen;i++){
System.out.println("关键字:"+slType.dataList[i].keyNode+
"name:"+slType.dataList[i].name+"age:"+
slType.dataList[i].age);
}
return 0;
}
完整代码
package DS;
import java.util.Scanner;
/**
* @author 孟恩德
* @function : 顺序表操作实例
*/
public class Demo04 {
public static void main(String[] args){
int i;
SLType sl = new SLType();
DATA pdata;
String key;
System.out.println("顺序表操作实例:");
sl.slInit(sl);
System.out.println("初始化顺序表完成!");
Scanner input = new Scanner(System.in);
do {
System.out.println("请输入添加的节点(学号 姓名 年龄(年龄为0是结束添加)):");
DATA data = new DATA();
data.keyNode = input.next();
data.name = input.next();
data.age = input.nextInt();
if (data.age != 0) {
if(sl.slAdd(sl,data) == 0){
break;
}
}else{
break;
}
}while (true);
System.out.println("顺序表中的节点为:");
sl.slAll(sl);
System.out.println("请输入要取出节点的序号:");
i = input.nextInt();
pdata = sl.slFindByNum(sl,i);
show(pdata,i);
System.out.println("请输入要查找节点的学号!");
key = input.next();
i = sl.slFindByCont(sl,key);
pdata = sl.slFindByNum(sl,i);
show(pdata,i);
}
private static void show(DATA data, int i){
if(data != null){
System.out.println("第"+i+"个节点:");
System.out.println("学号:"+data.keyNode);
System.out.println("名字:"+data.name);
System.out.println("年龄:"+data.age);
}
}
}
class DATA{
/**
* 准备数据
*/
String keyNode;
String name;
int age;
}
@SuppressWarnings("ALL")
class SLType{
/** 定义顺序表结构 */
private static final int MAXLEN = 100;
DATA[] dataList = new DATA[MAXLEN];
int listLen;
/**初始化顺序表*/
void slInit(SLType slType){
slType.listLen = 0;
}
/**计算顺序表长度*/
int slLength(SLType slType){
return (slType.listLen);
}
/**
* 插入节点
* slType : 类型;
* n : 插入节点的序号;
* data : 插入节点的数据;
* */
int slInsert(SLType slType , int n , DATA data){
int i;
if(slType.listLen >= MAXLEN){
System.out.println("顺序表已满,无法插入节点!");
//返回0 代表插入失败
return 0;
}
if(n < 1 || n > slType.listLen - 1){
System.out.println("插入节点序号有误,插入失败!");
return 0;
}
for(i = slType.listLen;i >= n;i--){
slType.dataList[i + 1] = slType.dataList[i];
}
slType.dataList[n] = data;
slType.listLen++;
return 1;
}
/**
* 追加节点
* slType : 类型;
* data : 追加节点的数据;
* */
int slAdd(SLType slType,DATA data){
if(slType.listLen >= MAXLEN){
System.out.println("顺序表已满,不能继续添加节点!");
return 0;
}
slType.listLen++;
slType.dataList[slType.listLen] = data;
return 1;
}
/**
* 删除节点
* slType : 类型;
* n : 删除节点的序号;
* */
int slDelete(SLType slType,int n){
int i;
if(n < 1 || n > slType.listLen){
System.out.println("该节点不存在,删除失败!");
return 0;
}
for(i = n;i < slType.listLen;i++){
slType.dataList[i] = slType.dataList[i + 1];
}
slType.listLen--;
return 1;
}
/**按照序号查找节点
* slType : 类型;
* n : 要查找节点的序号;
* */
DATA slFindByNum(SLType slType, int n){
if(n < 1 || n > slType.listLen + 1){
System.out.println("为找到该节点,查找失败!");
return null;
}
return slType.dataList[n];
}
/**按照关键字查找节点
* slType : 类型;
* keynode : 要查找节点的关键字;
* */
int slFindByCont(SLType slType, String keynode){
int i;
for(i = 1;i <= slType.listLen;i++ ){
if(slType.dataList[i].keyNode.compareTo(keynode) == 0){
return i;
}
}
return 0;
}
/**显示所有节点*/
int slAll(SLType slType){
int i;
for(i = 1;i <= slType.listLen;i++){
System.out.println("关键字:"+slType.dataList[i].keyNode+
"name:"+slType.dataList[i].name+"age:"+
slType.dataList[i].age);
}
return 0;
}
}
第一次写博客,以后继续努力,希望大家多多支持!