用java写顺序表

来源:互联网 发布:uvz转pdf软件 编辑:程序博客网 时间:2024/05/16 09:00
import java.util.Scanner;//顺序表操作class DATA{         //定义结点内容String key;String name;int age;}class SLType{      //定义顺序表结构static final int MAXLEN=100;DATA[] ListData=new DATA[MAXLEN];//保存顺序表的结构数组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(SL.ListLen-1<n&&n<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.print("顺序表已满,不能再添加结点了!\n");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.print("删除结点序号错误,不能删除结点!\n");return 0;}for(i=n;i<SL.ListLen;i++) {   //将顺序表中数据往前移动SL.ListData[i]=SL.ListData[1+i];}SL.ListLen--;return 1;}DATA SLFindByNum(SLType SL,int n) { //根据序号返回数据元素if(n<1||n>SL.ListLen+1) {       //判断元素序号是否合法System.out.print("结点序号错误,不能返回结点!\n");return null;}return SL.ListData[n];}int SLFindByCont(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.printf("(%s,%s,%d)\n",SL.ListData[i].key,SL.ListData[i].name,SL.ListData[i].age);}return 0;}}public class Practise {public static void main(String[] args) {int i;SLType SL=new SLType();//定义顺序表变量DATA pdata;            //定义结点保存引用变量String key;            //保存关键字System.out.print("顺序表操作演示!\n");SL.SLInit(SL);         //初始化顺序表System.out.print("初始化顺序表完成!\n");Scanner input=new Scanner(System.in);do {                   //循环添加结点数据System.out.print("输入添加的结点(学号 姓名 年龄):");DATA data=new DATA();data.key=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.print("\n顺序表中节点顺序为:\n");SL.SLAll(SL);System.out.print("\n要取出结点序号为:");i=input.nextInt();pdata=SL.SLFindByNum(SL,i);if(pdata!=null) {System.out.printf("第%d个结点为:(%s,%s,%d)\n",i,pdata.key,pdata.name,pdata.age);}System.out.print("\n要查找的结点的关键字:");key=input.next();i=SL.SLFindByCont(SL,key);pdata=SL.SLFindByNum(SL,i);if(pdata!=null) {System.out.printf("第%d个结点为:(%s,%s,%d)\n",i,pdata.key,pdata.name,pdata.age);}}}

输出范例如下:

顺序表操作演示!初始化顺序表完成!输入添加的结点(学号 姓名 年龄):001 aa 19输入添加的结点(学号 姓名 年龄):002 bb 20输入添加的结点(学号 姓名 年龄):003 cc 21输入添加的结点(学号 姓名 年龄):004 dd 22输入添加的结点(学号 姓名 年龄):0 0 0顺序表中节点顺序为:(001,aa,19)(002,bb,20)(003,cc,21)(004,dd,22)要取出结点序号为:1第1个结点为:(001,aa,19)要查找的结点的关键字:002第2个结点为:(002,bb,20)