線性表的順序存儲結構之順序表類的實現_Java

在上一篇博文——線性表接口的實現_Java中,我們實現了線性表的接口,今天讓我們來實現線性表的順序存儲結構——順序表類。

首先讓我們來看下順序表的定義:

線性表的順序存儲是用一組連續的內存單元依次存放線性表的數據元素,元素在內存的物理存儲次序與它們在線性表中的邏輯次序相同,即元素ai與其直接前驅ai-1及直接后繼ai+1的存儲位置相鄰。順序存儲的線性表也成為順序表(sequential list)。

?

順序表類SeqList提供線性表基于順序存儲結構的一種實現,它有兩個私有成員變量table和n,table是一個存放元素的對象數組;n為線性表長度,n≤table.length。SeqList聲明如下,它實現了線性表的接口LList。

package?dataStructure.linearList;??
import?dataStructure.linearList.LList;??public?class?SeqList<E>?implements?LList<E>?????????????????//順序表類,實現線性表接口??
{??private?Object[]?table;?????????????????????????????????//對象數組,私有成員??private?int?n;??????????????????????????????????????????//順序表長度??public?SeqList(int?capacity)????????????????????????????//構造方法,創建置頂容量的空表??{??this.table?=?new?Object[Math.abs(capacity)];??this.n?=?0;??}??public?SeqList()????????????????????????????????????????//指定空表的默認容量??{??this(16);??}??public?boolean?isEmpty()????????????????????????????????//判斷順序表是否為空,若空返回true??{??return?this.n?==?0;??}??public?int?length()?????????????????????????????????????//返回順序表長度??{??return?this.n;??}??public?E?get(int?index)?????????????????????????????????//返回index(初值為0)位置的對象,若序號無效,返回null??{??if(index>=0?&&?index?<?this.n)??{??return?(E)this.table[index];??}??return?null;??}??public?E?set(int?index,E?element)???????????????????????//設置index位置的對象為element,若操作成功,放回原對象,否則返回null??{??if(index?>=?0?&&?index?<?this.n?&&?element?!=?null)??{??E?old?=(E)this.table[index];??this.table[index]?=?element;??return?old;??}??return?null;??}??public?boolean?add(int?index,E?element)?????????????????//在index位置插入element對象,若操作成功返回true,不能插入null??{??if(element?==?null)?????????????????????????????????//不能插入null??{??return?false;??}??if(this.n?==?table.length)??????????????????????????//若數組滿,則需要擴充順序表容量??{??Object[]?temp?=?this.table;??this.table?=?new?Object[temp.length*2];?????????//重新申請一個容量更大的數組??for(int?i?=?0;i?<?temp.length;i++)??{??this.table[i]?=?temp[i];??}??}??if(index?<?0)????????????????????????????????????????//下標容錯??{??index?=?0;??}??if(index?>?this.n)??{??index?=this.n;??}??for(int?j?=?this.n-1;j?>=?index;j--)?????????????//元素后移,平均移動n/2??{??this.table[j+1]?=?this.table[j];??}??this.table[index]?=?element;??this.n++;??return?true;??}??public?boolean?add(E?element)???????????????????????????//在順序表最后插入element對象??{??return?add(this.n,element);??}??public?E?remove(int?index)??????????????????????????????//移去index位置的對象,若操作成功,則返回被移去的對象,否者返回null??{??if(this.n?!=?0?&&?index?>=?0?&&?index?<?this.n)??{??E?old?=?(E)this.table[index];??for(int?j?=?index;j?<?this.n-1;j++)??????????????//元素前移,平均移動n/2??{??this.table[j]?=?this.table[j?+?1];??}??this.table[this.n?-?1]?=?null;??this.n--;??return?old;??}??return?null;??}??public?void?clear()?????????????????????????????????????//清空順序表??{??if(this.n?!=?0)??{??for(int?i?=?0;i?<?this.n;i++)??{??this.table[i]?=?null;??}??this.n=0;??}??}??public?String?toString()????????????????????????????????//返回顯示所有元素的字符串,形式為(,)??{??String?str?=?"(";??if(this.n?!=?0)??{??for(int?i?=?0;i?<?this.n?-?1;i++)??{??str?+=?this.table[i].toString()+",";??}??str?+=?this.table[this.n?-?1].toString();??}??return?str?+?")";??}??
}??

順序表是一種隨即存取結構,存取任何一個元素的get()、set()方法的時間復雜度是O(1)。

?

對順序表進行插入或刪除操作是,算法所花費的時間主要用于移動元素。在等概率情況下,插入一個元素平均需要移動一半的元素,時間復雜度為O(n)。同里,刪除一個元素的時間復雜度亦為O(n)。

?

綜上所述,順序表具有下列特點:

?

①:元素的物理存儲順序直接反映表中元素的邏輯順序,可以隨機存取元素。

②:插入和刪除的操作效率很低。每插入或刪除一個元素,可能需要移動大量元素,其平均移動次數是順序表長度的一半。再者,數組容量不可更改,存在因容量小造成數據溢出,或因容量過大造成內存資源浪費的問題。解決數據溢出的方法是,申請另一個更大容量的數組,并進行數組元素復制,但插入操作效率很低。 

順序表是一種隨即存取結構,存取任何一個元素的get()、set()方法的時間復雜度是O(1)。

?

對順序表進行插入或刪除操作是,算法所花費的時間主要用于移動元素。在等概率情況下,插入一個元素平均需要移動一半的元素,時間復雜度為O(n)。同里,刪除一個元素的時間復雜度亦為O(n)。

?

綜上所述,順序表具有下列特點:

?

①:元素的物理存儲順序直接反映表中元素的邏輯順序,可以隨機存取元素。

②:插入和刪除的操作效率很低。每插入或刪除一個元素,可能需要移動大量元素,其平均移動次數是順序表長度的一半。再者,數組容量不可更改,存在因容量小造成數據溢出,或因容量過大造成內存資源浪費的問題。解決數據溢出的方法是,申請另一個更大容量的數組,并進行數組元素復制,但插入操作效率很低。

轉載于:https://www.cnblogs.com/ganchuanpu/p/7468527.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257554.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257554.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257554.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux下安裝jdk

參考于&#xff1a;http://www.cnblogs.com/caosiyang/archive/2013/03/14/2959087.html 一、準備階段 ①下載jdk-6u45-linux-i586.bin&#xff0c;通過xftp上傳至Linux系統中 ②在命令行執行 ./jdk-6u45-linux-i586.bin&#xff0c;生成目錄jdk1.6.0_45 ③移動到/usr/share下&…

JDK source 之 ArrayList 需要注意事項

線程安全 ArrayList內部沒有實現原子性操作&#xff0c;所以是非線程安全的。如果需要在線程安全的環境下使用List的話&#xff0c;需要使用Vector 或者CopyOnWriteArrayList&#xff0c;具體場景&#xff0c;自行深入了解。 擴容算法 // minCapacity 為需要的最小容量 private…

為Tiny4412設備驅動在proc目錄下添加一個可讀版本信息的文件

http://blog.csdn.net/morixinguan/article/details/77808088 上節&#xff0c;我們明白了proc文件系統的作用&#xff0c;接下來我們在友善之臂已經寫好的led驅動的基礎上&#xff0c;在proc目錄下創建一個文件夾&#xff0c;然后加入led驅動的版本信息讀取。 我們在init函數的…

java audiorecord_Android 錄音實現(AudioRecord)

上一篇文章介紹了使用 MediaRecorder 實現錄音功能 Android錄音實現(MediaRecorder) &#xff0c;下面我們繼續看看使用 AudioRecord 實現錄音功能。AudioRecord首先看看Android幫助文檔中對該類的簡單概述: AndioRecord 類的主要功能是讓各種 Java 應用能夠管理音頻資源&#…

SqlServer中的數據類型UniqueIdentifier

SqlServer中的數據類型UniqueIdentifier究竟是什么東東&#xff1f;該類型一般用來做為主鍵使用&#xff0c;可用SQL語法的newid()來生成一個唯一的值。我想請問的是&#xff0c;這個值是一個長整型的數據值呢&#xff0c;還是個其他的什么值&#xff1f;我在程序中該怎樣去控制…

《架構探險——從零開始寫Java Web框架》這書不錯,能看懂的入門書

這書適合我。 哈哈&#xff0c;結合 以前的知識點&#xff0c;勉強能看懂。 講得細&#xff0c;還可以參照著弄出來。 希望能堅持 完成啦。。。 原來&#xff0c;JSTL就類似于DJANGO中的模板。 而servlet類中的res,req&#xff0c;玩了DJANGO就覺得好熟悉啦。。。&#xff1a;&…

java 生成 tar.gz_一文教您如何通過 Java 壓縮文件,打包一個 tar.gz Filebeat 采集器包...

一、背景最近&#xff0c;小哈主要在負責日志中臺的開發工作, 等等&#xff0c;啥是日志中臺&#xff1f;俺只知道中臺概念&#xff0c;這段時間的確很火&#xff0c;但是日志中臺又是用來干啥的&#xff1f;這里小哈盡量地通俗的說下日志中臺的職責&#xff0c;再說日志中臺之…

腳本安裝smokeping

我將提供兩種方法來安裝smokeping&#xff0c;一種是大家常用的普通安裝&#xff0c;另一種是用腳本下自動化安裝的&#xff0c;僅供大家學習&#xff0c;參考!普通安裝&#xff1a;centos 5.4下安裝smokeping需要的軟件:(1)httpd(2)rrdtool(3)smokeping(4)fping(5)libwww-perl…

強烈推薦:Android史上最強大的自定義任務軟件Tasker

強烈推薦&#xff1a;Android史上最強大的自定義任務軟件Taskerhttp://bbs.mumayi.com/thread-28387-1-1.html(出處: 木螞蟻手機樂園) Android上的Tasker絕對稱得上是Android系統的神器之一&#xff0c;與Auto Memory Manager不同&#xff0c;Tasker不是加速型的軟件&#xff0…

配置文件*.xml中 classpath: 與 classpath*: 的區別

首先classpath 指的是WEB-INF下面的classes目錄&#xff0c;所有src目錄下面的java、xml、properties等文件編譯后都會在此,classes在eclipse的項目目錄下是看不到的&#xff0c;它存在于部署在服務器上的項目目錄WEB-INF下 classpath:指的是第一個classpath路徑&#xff0c;也…

原型模式 java 深淺_JAVA設計模式---原型模式--淺客隆和深克隆

JAVA淺克隆和深克隆淺克隆&#xff1a;被復制對象的所有變量和原來相同&#xff0c;而所有的對其他對象的引用仍指向原對象。即如果復制的對象修改復制對象的變量&#xff0c;原對象不會改變。而修改引用的對象&#xff0c;二者均會發生改變。深復制(克隆)&#xff1a;被復制對…

SocketErrorCode:10022

在編寫.net的網絡服務器時&#xff0c;我使用了裸socket來實現。在windows上&#xff0c;或者在linux上通過.net core來跑時都沒有什么問題&#xff0c;但是通過mono運行調用socket.Bind()時卻總是報ErrorCode為10022的SocketException&#xff0c;表示參數無效。通過命令netst…

request.RequestContextListener

由于是使用spring mvc來做項目&#xff0c;因此脫離了HttpServletRequest作為參數&#xff0c;不能夠直接使用request&#xff0c;要想使用request可以使用下面的方法&#xff1a; 在web點xml中配置一個監聽 [html] view plaincopyprint?<listener> <listen…

poj1741 Tree 點分治

入門題&#xff0c;算是對樹分治有了初步的理解吧。 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<vector> #define REP(i,a,b) for(int ia;i<b;i) #define MS0(a) memset(…

深入理解 ajax_xhr 對象

2019獨角獸企業重金招聘Python工程師標準>>> ajax技術的核心是XMLHttpRequest對象(簡稱XHR)&#xff0c;這是由微軟首先引入的一個特性&#xff0c;其他瀏覽器提供商后來都提供了相同的實現。 IE5是第一款引入XHR對象的瀏覽器。在IE5中&#xff0c;XHR對象是通過MSX…

POJ 1584 A Round Peg in a Ground Hole(點到直線距離,圓與多邊形相交,多邊形是否為凸)...

題意&#xff1a;給出一個多邊形和一個圓&#xff0c;問是否是凸多邊形&#xff0c;若是則再問圓是否在凸多邊形內部。 分3步&#xff1a; 1、判斷是否是凸多邊形 2、判斷點是否在多邊形內部 3、判斷點到各邊的距離是否大于等于半徑 上代碼&#xff1a; #include <iostream&…

組函數及分組統計

分組函數 SQL中經常使用的分組函數 Count(): 計數 Max()&#xff1a;求最大值 Min()&#xff1a;求最小值 Avg()&#xff1a;求平均值 Sum()&#xff1a;求和 -- 統計emp表中的人數 select count(*) from emp; -- 統計獲得獎金的人數 select count(comm) from emp;-- 求全部雇…

java數據生成excel_Java 數據庫數據生成Excel

采用jxl.jar生成Excel項目開發注意事項&#xff1a; 1:導入從網上下載的jar包&#xff1a;mail.jar 和 activation.jar2:刪掉C:\Program Files\MyEclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\data\libraryset\EE_5 下 javaee.jar中的java…

兩張神圖介紹python3和 2.x與 3.x 的區別

有感與第一張圖, 做了第二張圖.轉載于:https://www.cnblogs.com/Vito2008/p/5280393.html

Java-jdbc連接數據庫

1、Oracle8/8i/9i數據庫&#xff08;thin模式&#xff09; Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url"jdbc:oracle:thin:localhost:1521:orcl"; //orcl為數據庫的SID String user"test"; String…