欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)線性表及其算法

 更新時(shí)間:2018年06月01日 13:46:07   作者:博弈  
線性表是最簡單和最常用的一種數(shù)據(jù)結(jié)構(gòu),它是有n個(gè)體數(shù)據(jù)元素(節(jié)點(diǎn))組成的有限序列,這篇文章主要介紹了java實(shí)現(xiàn)線性表及其算法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

線性表

線性表是最簡單和最常用的一種數(shù)據(jù)結(jié)構(gòu),它是有n個(gè)體數(shù)據(jù)元素(節(jié)點(diǎn))組成的有限序列。其中,數(shù)據(jù)元素的個(gè)數(shù)n為表的長度,當(dāng)n為零時(shí)成為空表,非空的線性表通常記為:

(a1,a2,… ,ai-1,ai, ai+1,…,an)

一. 線性表的順序存儲(chǔ)及算法

線性表的順序存儲(chǔ)指的是將線性表的數(shù)據(jù)元素按其邏輯次序依次存入一組地址連續(xù)的存儲(chǔ)單元里,用這種方法存儲(chǔ)的線性表稱為順序表。

1.順序表的結(jié)構(gòu)定義

public class SeqList { 
 /* 初始空間為10 */
 private static final int LIST_SIZE = 10; 
 /* 數(shù)組data用來存放元素 */
 private int[] data; 
 /* 當(dāng)前表長,實(shí)際存儲(chǔ)元素的個(gè)數(shù) */
 private int length; 
}

2.插入運(yùn)算

順序表的插入運(yùn)算是指在線性表的第i-1個(gè)元素和第i個(gè)元素之間插入一個(gè)新元素。由于順序表邏輯上相鄰的元素在物理結(jié)構(gòu)上也相鄰,其物理存儲(chǔ)關(guān)系也要發(fā)生相應(yīng)的變化。除非i=n+1,否則必須將原順序表的第i個(gè)元素開始的所有元素分別向后移動(dòng)1個(gè)位置。

/**
 * 在順序表list中第i個(gè)位置之前插入一個(gè)新元素node
 * @param list 順序表
 * @param i 插入位置
 * @param node 新元素
 */
public void insertList(SeqList list, int i, int node) {
  
 if (i < 1 || i > list.length + 1) {
  System.out.println("position error");
  return;
 }
  
 if (list.length >= LIST_SIZE) {
  System.out.println("overflow");
  return;
 }
  
 for (int j = list.length - 1; j >= i - 1; j --) {
  /* 從最后一個(gè)元素開始逐一后移 */
  list.data[j+1] = list.data[j];
 }
 /* 插入新元素 */
 list.data[i-1] = node;
 /* 表長加1 */
 list.length ++;
  
}

3.刪除運(yùn)算

順序表的刪除運(yùn)算指的是將表中第i個(gè)元素刪除,與插入運(yùn)算相反,插入是向后移動(dòng)元素,刪除運(yùn)算則是向前移動(dòng)元素。

/**
 * 在順序表list中刪除第i個(gè)元素,并返回被刪除的元素
 * @param list 順序表
 * @param i 元素位置
 * @return node
 */
public int deleteList(SeqList list, int i) {
 int node = 0;
 if (i < 0 || i > list.length) {
  System.out.println("position error");
  return node;
 }

 node = list.data[i-1];
 for (int j = i; j < list.length; j ++) {
  /* 元素前移 */
  list.data[j-1] = list.data[j];
 }

 list.length --;

 return node;

}

4.順序表逆置

先以表長的一半為循環(huán)控制次數(shù),將表中最后一個(gè)元素同順序順數(shù)第一個(gè)元素交換,將倒數(shù)第二個(gè)元素同順數(shù)第二個(gè)元素交換,以此類推,直至交換完為止。

/**
 * 順序表逆置
 * @param list 原始順序表
 * @return 逆置后的順序表
 */
public SeqList converts(SeqList list) {
  
 int node;
 int length = list.length/2;
 for (int i = 0; i < length; i ++) {
  /* 對(duì)稱交換元素 */
  int j = list.length - 1 - i;
  node = list.data[i];
  list.data[i] = list.data[j];
  list.data[j] = node;
 }
 return list;
  
}

二. 線性表的鏈?zhǔn)酱鎯?chǔ)及算法

鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)存儲(chǔ)線性表數(shù)據(jù)元素的存儲(chǔ)空間可能是連續(xù)的,也可能是不連續(xù)的,因而鏈表的節(jié)點(diǎn)是不可以隨機(jī)存取的,鏈?zhǔn)酱娲质亲畛R姷拇鎯?chǔ)方式之一。

在使用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)表示每個(gè)數(shù)據(jù)元素時(shí),除了存儲(chǔ)元素本身的信息外,還需要一個(gè)存儲(chǔ)指示后繼元素存儲(chǔ)位置的地址,利用這種存儲(chǔ)方式表示的線性表稱為鏈表。

5.單鏈表的結(jié)構(gòu)定義

public class LinkList {

 /* 數(shù)據(jù)域 */
 private char data;

 /* 后繼元素 */
 private LinkList next;

}

6.頭插法建表算法

頭插法是從一個(gè)空表開始,重復(fù)讀入數(shù)據(jù),生成新節(jié)點(diǎn),將讀入的數(shù)據(jù)存放到新節(jié)點(diǎn)的數(shù)據(jù)域中,然后將新節(jié)點(diǎn)插入到當(dāng)前鏈表的表頭上,直到結(jié)束為止。

/**
 * 頭插法創(chuàng)建表
 * @param chars 字符數(shù)組
 * @return 單鏈表
 */
public LinkList createListF(char[] chars) {

 LinkList node;
 LinkList head = null;

 for (char ch : chars) {
  /* 申請(qǐng)新節(jié)點(diǎn) */
  node = new LinkList();
  node.data = ch;

  /* 指向后繼節(jié)點(diǎn) */
  node.next = head;
  head = node;
 }

 /* 返回頭節(jié)點(diǎn) */
 return head;

}

7.尾插法建表算法

頭插法建表中節(jié)點(diǎn)的次序和輸入時(shí)的順序相反,若需要和輸入次序一致,則可使用尾插法。

/**
 * 尾插法建表
 * @param chars 字符數(shù)組
 * @return 單鏈表
 */
public LinkList createListR(char[] chars) {

 LinkList node;
 LinkList head = null;
 LinkList rear = null;

 for (char ch : chars) {
  node = new LinkList();
  node.data = ch;

  if (head == null) {
   /* 新節(jié)點(diǎn)為頭節(jié)點(diǎn) */
   head = node;
  } else {
   /* 上一個(gè)節(jié)點(diǎn)指向新節(jié)點(diǎn) */
   rear.next = node;
  }
  /* 表尾指向新的節(jié)點(diǎn) */
  rear = node;
 }

 /* 返回頭節(jié)點(diǎn) */
 return head;
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java處理按鈕點(diǎn)擊事件的方法

    java處理按鈕點(diǎn)擊事件的方法

    下面小編就為大家?guī)硪黄猨ava處理按鈕點(diǎn)擊事件的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • 不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解

    不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解

    這篇文章主要為大家介紹了不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 基于SpringBoot和MongoDB實(shí)現(xiàn)實(shí)時(shí)分析和日志處理功能

    基于SpringBoot和MongoDB實(shí)現(xiàn)實(shí)時(shí)分析和日志處理功能

    實(shí)時(shí)分析和日志處理在現(xiàn)代應(yīng)用程序開發(fā)中扮演著重要的角色,MongoDB是一個(gè)非常流行的NoSQL數(shù)據(jù)庫,其高性能和靈活性使其成為實(shí)時(shí)分析和日志處理的理想選擇,本文將介紹如何使用?Spring?Boot?和?MongoDB?實(shí)現(xiàn)實(shí)時(shí)分析和日志處理的功能
    2023-06-06
  • MyBatis的<foreach>以及java代碼的批處理方式

    MyBatis的<foreach>以及java代碼的批處理方式

    這篇文章主要介紹了MyBatis的<foreach>以及java代碼的批處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringBoot集成Redis,并自定義對(duì)象序列化操作

    SpringBoot集成Redis,并自定義對(duì)象序列化操作

    這篇文章主要介紹了SpringBoot集成Redis,并自定義對(duì)象序列化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • IntelliJ IDEA2020.1 Mac maven sdk 全局配置

    IntelliJ IDEA2020.1 Mac maven sdk 全局配置

    這篇文章主要介紹了IntelliJ IDEA2020.1 Mac maven sdk 全局配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • IDEA運(yùn)行SpringBoot項(xiàng)目的超詳細(xì)步驟截圖

    IDEA運(yùn)行SpringBoot項(xiàng)目的超詳細(xì)步驟截圖

    在當(dāng)前的開發(fā)中Spring Boot開發(fā)框架已經(jīng)成為主流,下面這篇文章主要給大家介紹了關(guān)于IDEA運(yùn)行SpringBoot項(xiàng)目的超詳細(xì)步驟截圖,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • java線程中斷?interrupt?和?LockSupport解析

    java線程中斷?interrupt?和?LockSupport解析

    這篇文章主要為大家介紹了java線程中斷?interrupt?和?LockSupport示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java中減少if-else的幾種方式

    Java中減少if-else的幾種方式

    if判斷語句是很多編程語言的重要組成部分,但是,若我們最終編寫了大量嵌套的if語句,這將使得我們的代碼更加復(fù)雜和難以維護(hù),本文主要介紹了Java中減少if-else的幾種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Java局部內(nèi)部類和匿名內(nèi)部類定義與用法實(shí)例分析

    Java局部內(nèi)部類和匿名內(nèi)部類定義與用法實(shí)例分析

    這篇文章主要介紹了Java局部內(nèi)部類和匿名內(nèi)部類,結(jié)合實(shí)例形式分析了java局部內(nèi)部類和匿名內(nèi)部類相關(guān)定義、原理與用法,需要的朋友可以參考下
    2019-08-08

最新評(píng)論