java数据结构(一)----------顺序表操作实例

import java.util.Scanner;

class DATA{//数据类
	
	String key; // 节点的关键字
	String name;
	String age;
}
class SLType{// 定义顺序表的结构数组	
	static final int MAXLEN = 100;// 顺序表的最大长度
	DATA[] ListData = new DATA[MAXLEN+1];// 保存顺序表的顺序结构
	int ListLen;                         // 顺序表已存节点的的数量
	
	public void SLinit(SLType SL) {// 初始化顺序表
		SL.ListLen = 0; // 初始化为空表
	}
	
	public int SLLength(SLType SL) {// 返回顺序表中元素的数量
		return SL.ListLen;
	}
	
	public int SLInsert(SLType SL,int n,DATA data) { // 向顺序表中插入元素
		
		int i;
		
		if(SL.ListLen >= MAXLEN) {            // 顺序表中的数量已经超过了最大数量
			System.out.println("顺序表已满,不能插入节点\n");
			return 0;                         // 返回0 代表不能插入成功
		}
		
		if(n<1 || n >SL.ListLen-1) {                               // 插入节点的序号不正确
			System.out.println("插入元素序号错误,不能插入元素!\n");
			return 0;
		}
		
		for(i=SL.ListLen;i>=n;i--) {          // 将顺序表中数据向后移动
			SL.ListData[i+1] = SL.ListData[i]; 
		}
			SL.ListData[n] = data; // 插入节点
			SL.ListLen ++;         // 顺序表节点数量+1
			return 1;              // 成功 返回1
	}
	
	
	public int SLADD(SLType SL,DATA data) { // 增加元素到数组底部
		
		if(SL.ListLen >= MAXLEN) {            // 顺序表中的数量已经超过了最大数量
			System.out.println("顺序表已满,不能插入节点\n");
			return 0;                         // 返回0 代表不能插入成功
		}
		
		SL.ListData[++SL.ListLen] = data;     // 数组元素添加,并且数组长度+1
		return 1;
	}
	
	
	public 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--;// 顺序表的数量-1
		return 1;
	}
	
	public DATA SLFindByNum(SLType SL,int n) { // 找到指定位置的元素通过序号
		if(n<1 || n >SL.ListLen-1) {                               // 插入节点的序号不正确
			System.out.println("插入元素序号错误,不能插入元素!\n");
			return null;
		}
		return SL.ListData[n];
	}
	
	public int SLFindCount(SLType SL,String key) { // 按照关键字查找节点
		int i;
		for(i=1;i<SL.ListLen;i++) {
			if(SL.ListData[i].key.compareTo(key) == 0) { // 查找key是否相同
			     return i; 
			}
		}
		return 0;   // 查找整个顺序表的数据都没有,返回0
	}
	
	public int SLAll(SLType SL) { // 显示顺序表中的所有节点
		int i;
		for(i=1;i<=SL.ListLen;i++) {
			System.out.println("这个元素的key是"+SL.ListData[i].key+"这个元素的name是"+SL.ListData[i].name+"这个元素的age是"+SL.ListData[i].age);
		}
		return 0;
	}
		
}

public class ShunXuBiao {
	
	public static void main(String[] args) {
			test();
	}
	
	public static void test() {
		int i; 
		SLType SL = new SLType(); // 定义顺序表变量
		DATA pdata;               // 定义保存节点的引用变量
		String key ;              // 定义保存关键字
		
		System.out.println("顺序表演示操作!\n");
		SL.SLinit(SL);;// 初始化顺序表
		System.out.println("初始化顺序表完成\n");
		Scanner input = new Scanner(System.in);
		do {
			System.out.println("输入添加节点的(学号   姓名  年龄)");
			
			DATA data= new DATA();
			data.key = input.next();
			data.name = input.next();
			data.age  = input.next();
			if(!"0".equals(data.age)) { 				
				// 如果年龄不为零
				if(SL.SLADD(SL, data) == 0) {   // 如果元素添加失败
					break;
				}
			}else {
				break;
			}
			
		}while(true);
		System.out.println("\n顺序表的节点顺序为: \n");
		SL.SLAll(SL); // 显示所有节点
		
		System.out.println("\n 请输入要选择的节点序号  \n");
		 i = input.nextInt(); //输入查找的序号
		 pdata = SL.SLFindByNum(SL, i); // 查找
		 if(pdata != null) {
			 System.out.println("找到了该节点");
		 }
		 
		 System.out.println("/n 请输入要查找的关键字 \n");
		 key = input.next();
		 i = SL.SLFindCount(SL, key); // 该关键字的序号
		 pdata = SL.SLFindByNum(SL, i); // 查找
		 if(pdata != null) {
			 System.out.println("找到了该节点");
		 }
		
	}

}

运行结果:
顺序表演示操作!

初始化顺序表完成

输入添加节点的(学号   姓名  年龄)
11 11 11
输入添加节点的(学号   姓名  年龄)
22 22 22
输入添加节点的(学号   姓名  年龄)
33 33 33
输入添加节点的(学号   姓名  年龄)
0 0 0

顺序表的节点顺序为: 

这个元素的key是11这个元素的name是11这个元素的age是11
这个元素的key是22这个元素的name是22这个元素的age是22
这个元素的key是33这个元素的name是33这个元素的age是33

 请输入要选择的节点序号  

1
找到了该节点
/n 请输入要查找的关键字 

11
找到了该节点


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值