JAVA模擬新增順序表及單鏈表
最近在回顧大學(xué)學(xué)的數(shù)據(jù)結(jié)構(gòu),這里給大家用java模擬順序表和單鏈表的新增
1順序表新增

/**
* 順序表
*
* @author cjd
*
*/
public class ArrayList {
private Object[] elementData; // 底層是一個(gè)數(shù)組,目前還沒(méi)有確定長(zhǎng)度
private int size; // 不是數(shù)組分配了幾個(gè)空間,而是元素的個(gè)數(shù)
public ArrayList() {
this(4);
}
public ArrayList(int initialCapacity) {
elementData = new Object[initialCapacity];
}
// 返回線性表的大小,即數(shù)據(jù)元素的個(gè)數(shù)。
public int size() {
return size;
}
// 返回線性表中序號(hào)為 i 的數(shù)據(jù)元素@Override
public Object get(int i) {
return elementData[i];
}
// 將數(shù)據(jù)元素 e 插入到線性表中 i 號(hào)位置
public void add(int i, Object e) {
// 擴(kuò)容 elementData = Arrays.copyOf(elementData, elementData.length*2);
if (size == elementData.length) {//數(shù)組滿了,就擴(kuò)容
Object[] elementDatanew = new Object[elementData.length * 2];//新創(chuàng)建一個(gè)新的數(shù)組,長(zhǎng)度是舊數(shù)組2倍
for (int j = 0; j < elementData.length; j++) {
elementDatanew[j] = elementData[j];//將舊數(shù)組的數(shù)據(jù)拷貝到新數(shù)組
}
elementData = elementDatanew;//讓elementData指向新數(shù)組
}
//最后位后移
for(int j=size;j>i;j--){
elementData[j]=elementData[j-1];
}
// 給數(shù)組賦值
elementData[i] = e;
// 元素個(gè)數(shù)+1
size++;
}
// 將數(shù)據(jù)元素 e 插入到線性表末尾
public void add(Object e) {
this.add(size,e);//最后位新增
}
public String toString() {
if (size == 0) {
return "[]";
}
StringBuilder stringBuilder = new StringBuilder("[");
for (int i = 0; i < size; i++) {
if (i == 0)
stringBuilder.append("" + elementData[i]);
else
stringBuilder.append("," + elementData[i]);
}
stringBuilder.append("]");
return stringBuilder.toString();
}
}
測(cè)試mian
public class test {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(3,9);
System.out.println("實(shí)現(xiàn)順序表新增"+list.toString());
}
}
2單鏈表新增

實(shí)體類
public class Node {
Object data;//要存儲(chǔ)的數(shù)據(jù)
Node next;
public Node(Object data, Node next) {
super();
this.data = data;
}
public Node() {
super();
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
方法
/**
* 單鏈表表
*
* @author cjd
*
*/
public class SingleLinkedList {
private Node head = new Node();//頭結(jié)點(diǎn),不存儲(chǔ)數(shù)據(jù),為了編程方便
private int size;//一共有幾個(gè)結(jié)點(diǎn)
// 表的大小,即數(shù)據(jù)元素的個(gè)數(shù)。
public int size() {
return size;
}
// 返回單鏈表中序號(hào)為 i 的數(shù)據(jù)元素
public Object get(int i) {
//遍歷結(jié)點(diǎn)
Node p=head;//找到前一個(gè)結(jié)點(diǎn),從head結(jié)點(diǎn)開始
for(int j=0;j<i;j++){
p=p.next;
}
return p.data;
}
// 將數(shù)據(jù)元素 e 插入到單鏈表中 i 號(hào)位置
public void add(int i, Object e) {
//遍歷結(jié)點(diǎn)
Node p=head;//找到前一個(gè)結(jié)點(diǎn),從head結(jié)點(diǎn)開始
for(int j=0;j<i;j++){
p=p.next;//移動(dòng)指針到下一個(gè)結(jié)點(diǎn)
}
//新創(chuàng)建一個(gè)結(jié)點(diǎn)
Node newNode = new Node();
newNode.data=e;
newNode.next=p.next;
p.next=newNode;//指明新結(jié)點(diǎn)的直接后繼結(jié)點(diǎn)
// 個(gè)數(shù)+1
size++;
}
// 將數(shù)據(jù)元素 e 插入到單鏈表末尾
public void add(Object e) {
this.add(size,e);//最后位新增
}
public String toString() {
if (size == 0) {
return "[]";
}
Node p=head.next;//找到前一個(gè)結(jié)點(diǎn),從head結(jié)點(diǎn)開始
StringBuilder stringBuilder= new StringBuilder("[");
for (int i = 0; i < size; i++) {
if (i == 0)
stringBuilder.append("" + p.data);
else
stringBuilder.append("," + p.data);
//移動(dòng)指針到下一個(gè)結(jié)點(diǎn)
p=p.next;
}
stringBuilder.append("]");
return stringBuilder.toString();
}
}
測(cè)試類
public class test {
public static void main(String[] args) {
SingleLinkedList singlist=new SingleLinkedList();
singlist.add(1);
singlist.add(2);
singlist.add(3);
singlist.add(4);
singlist.add(5);
singlist.add(6);
singlist.add(3,9);
System.out.println("實(shí)現(xiàn)單鏈表新增"+singlist.toString());
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot?@Autowired?@Resource屬性賦值時(shí)機(jī)探究
這篇文章主要為大家介紹了Spring?Boot?@Autowired?@Resource屬性賦值時(shí)機(jī),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
java 實(shí)現(xiàn)音樂(lè)播放器的簡(jiǎn)單實(shí)例
這篇文章主要介紹了java 實(shí)現(xiàn)音樂(lè)播放器的簡(jiǎn)單實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09
Java多線程工具CompletableFuture的使用教程
CompletableFuture實(shí)現(xiàn)了CompletionStage接口和Future接口,前者是對(duì)后者的一個(gè)擴(kuò)展,增加了異步回調(diào)、流式處理、多個(gè)Future組合處理的能力。本文就來(lái)詳細(xì)講講CompletableFuture的使用方式,需要的可以參考一下2022-08-08
詳解通過(guò)JDBC進(jìn)行簡(jiǎn)單的增刪改查(以MySQL為例)
JDBC是用于執(zhí)行SQL語(yǔ)句的一類Java API,通過(guò)JDBC使得我們可以直接使用Java編程來(lái)對(duì)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行操作。通過(guò)封裝,可以使開發(fā)人員使用純Java API完成SQL的執(zhí)行。2017-01-01
Spring Boot中的那些條件判斷的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring Boot中的那些條件判斷的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
SpringBoot讀取Resource目錄下文件的四種方式總結(jié)
在Spring?Boot項(xiàng)目中,經(jīng)常需要獲取resources目錄下的文件,這些文件可以包括配置文件、模板文件、靜態(tài)資源等,本文將介紹四種常用的方法來(lái)獲取resources目錄下的文件,需要的朋友可以參考下2023-08-08
Spring導(dǎo)入properties配置文件代碼示例
這篇文章主要介紹了Spring導(dǎo)入properties配置文件代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10

