




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Java实现顺序表的操作详解目录一、顺序表是什么二、自定义异常空引用异常下标越界异常三、顺序表的方法顺序表的实现获取顺序表长度顺序表是否为空顺序表是否为满打印顺序表末尾新增元素指定位置新增元素判断是否包含某元素查找某个元素对应的位置获取pos位置的元素给pos位置的元素赋值删除第一次出现的关键字key清空顺序表四、自定义顺序表
一、顺序表是什么
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
数组不就是一个现场的顺序表吗?但是数组并没有直接向我们提供增删查改的工具,所以我们必须重新实现一下顺序表。
二、自定义异常
空引用异常
如果我们的顺序表为空时,手动抛出空引用异常
publicclassNullExceptionextendsRuntimeException{
publicNullException(Stringmessage){
super(message);
下标越界异常
当我们进行增删查改时,下标越界时,我们手动抛出一个下标越界异常
publicclassIndexExceptionextendsRuntimeException{
publicIndexException(Stringmessage){
super(message);
三、顺序表的方法
顺序表的实现
这里我们定义一个顺序表,默认容量为DEFAULTSIZE,实际大小为usedsize.
publicclassArrList{
publicint[]arr;
publicintusedSize;
publicstaticfinalintDEFAULTSIZE=10;
publicArrList(){
this.arr=newint[DEFAULTSIZE];
获取顺序表长度
usedSize存储的就是当前顺序表的长度,直接返回即可。
publicintsize(){
returnthis.usedSize;
顺序表是否为空
此方法我们只想在顺序表内部使用,所以我们定义为private.
privatebooleanisEmpty(){
returnthis.arr==null;
顺序表是否为满
此方法我们只想在顺序表内部使用,所以我们定义为private.
privatebooleanisFull(){
//如果数组所放元素大于等于数组长度,那么数组满了
returnthis.size()=this.arr.length;
打印顺序表
publicvoiddisplay(){
for(inti=0;ithis.usedSize;i++){
System.out.print(arr[i]+"");
System.out.println();
末尾新增元素
publicvoidadd(intdata)throwsNullException{
//1.数组为空,报空异常
if(isEmpty()){
thrownewNullException("数组为空");
//2.数组满了,先增容
if(isFull()){
this.arr=newint[2*this.arr.length];
//3.进行新增
this.arr[this.usedSize]=data;
//4.元素+1
this.usedSize++;
指定位置新增元素
publicvoidadd(intpos,intdata)throwsRuntimeException,IndexException{
//1.判断数组是否为空
if(isEmpty()){
thrownewNullException("数组为空");
//2.判断新增位置是否合法,抛数组越界异常
if(pos0||posthis.arr.length){
thrownewIndexException("数组越界");
//3.判断数组是否已满,进行扩容
if(isFull()){
this.arr=newint[2*this.arr.length];
//4.进行新增
for(inti=this.usedSize-1;i=pos;i--){
this.arr[i+1]=this.arr[i];
this.arr[pos]=data;
this.usedSize++;
}
判断是否包含某元素
publicbooleancontains(inttoFind){
for(inti=0;ithis.usedSize;i++){
if(toFind==this.arr[i]){
returntrue;
returnfalse;
查找某个元素对应的位置
publicintindexOf(inttoFind){
for(inti=0;ithis.usedSize;i++){
if(toFind==this.arr[i]){
returni;
return-1;
获取pos位置的元素
publicintget(intpos)throwsIndexException{
//判断pos位置是否合法
if(pos0||pos=this.usedSize){
thrownewIndexException("输入pos位置数组越界");
}else{
returnthis.arr[pos];
给pos位置的元素赋值
publicvoidset(intpos,intvalue)throwsNullException,IndexException{
if(isEmpty()){
thrownewNullException("数组为空");
//2.判断新增位置是否合法,抛数组越界异常
if(pos0||pos=this.arr.length){
thrownewIndexException("数组越界");
this.arr[pos]=value;
删除第一次出现的关键字key
publicvoidremove(inttoRemove)throwsNullException{
if(isEmpty()){
thrownewNullException("数组为空");
intret=indexOf(toRemove);
if(ret==-1){
System.out.println("不存在此数");
return;
if(ret!=-1){
for(inti=ret;ithis.usedSize-1;i++){
this.arr[i]=this.arr[i+1];
this.usedSize++;
}
清空顺序表
publicvoidclear(){
this.usedSize=0;
//如果为引用类型
//for(inti=0;isize();i++){
//this.arr[i]=null;
//this.usedSize=0;
四、自定义顺序表
publicclassArrList{
publicint[]arr;
publicintusedSize;
publicstaticfinalintDEFAULTSIZE=10;
publicArrList(){
this.arr=newint[DEFAULTSIZE];
//打印顺序表
publicvoiddisplay(){
for(inti=0;ithis.usedSize;i++){
System.out.print(arr[i]+"");
System.out.println();
//新增元素,默认在数组最后新增
publicvoidadd(intdata)throwsNullException{
//1.数组为空,报空异常
if(isEmpty()){
thrownewNullException("数组为空");
//2.数组满了,先增容
if(isFull()){
this.arr=newint[2*this.arr.length];
//3.进行新增
this.arr[this.usedSize]=data;
//4.元素+1
this.usedSize++;
privatebooleanisFull(){
//如果数组所放元素大于等于数组长度,那么数组满了
returnthis.size()=this.arr.length;
privatebooleanisEmpty(){
returnthis.arr==null;
//在pos位置新增元素
publicvoidadd(intpos,intdata)throwsRuntimeException,IndexException{
//1.判断数组是否为空
if(isEmpty()){
thrownewNullException("数组为空");
//2.判断新增位置是否合法,抛数组越界异常
if(pos0||posthis.arr.length){
thrownewIndexException("数组越界");
//3.判断数组是否已满,进行扩容
if(isFull()){
this.arr=newint[2*this.arr.length];
//4.进行新增
for(inti=this.usedSize-1;i=pos;i--){
this.arr[i+1]=this.arr[i];
this.arr[pos]=data;
this.usedSize++;
//判定是否包含某个元素
publicbooleancontains(inttoFind){
for(inti=0;ithis.usedSize;i++){
if(toFind==this.arr[i]){
returntrue;
returnfalse;
//查找某个元素对应的位置
publicintindexOf(inttoFind){
for(inti=0;ithis.usedSize;i++){
if(toFind==this.arr[i]){
returni;
return-1;
//获取pos位置的元素
publicintget(intpos)throwsIndexException{
//判断pos位置是否合法
if(pos0||pos=this.usedSize){
thrownewIndexException("输入pos位置数组越界");
}else{
returnthis.arr[pos];
//给pos位置的元素设为value
publicvoidset(intpos,intvalue)throwsNullException,IndexException{
if(isEmpty()){
thrownewNullException("数组为空");
//2.判断新增位置是否合法,抛数组越界异常
if(pos0||pos=this.arr.length){
thrownewIndexException("数组越界");
this.arr[pos]=value;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省成都市简阳市阳安中学2022-2023学年高一下学期3月月考地理试题 无答案
- 终止加盟合同协议书范本
- 合同弃权协议书
- 中国新质生产力技术
- 协议入股合同协议书
- 纺织材料的创新使用与环境影响试题及答案
- 佛教合同协议书
- 合同金额协议书
- 果园种植合同协议书模板
- 美工合同协议书
- 河北武安招聘警务辅助人员笔试真题2024
- 2025年高级插花花艺师(三级)理论考试题(附答案)
- 医院医用耗材培训
- 《生猪价格波动及预测研究的国内外文献综述7000字》
- 2025年五年级下册英语单词表
- 布鲁氏菌病培训课件
- 2025年古董拍卖收藏品买卖协议书
- 幕墙UHPC施工专项方案 (评审版)
- 2025年中建四局土木工程有限公司招聘笔试参考题库含答案解析
- 【托比网】2024中国工业品数字化发展报告
- 砌石截水墙施工方案
评论
0/150
提交评论