最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

線性表

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

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

一. 線性表的順序存儲及算法

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

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

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

2.插入運算

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

/**
 * 在順序表list中第i個位置之前插入一個新元素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 --) {
  /* 從最后一個元素開始逐一后移 */
  list.data[j+1] = list.data[j];
 }
 /* 插入新元素 */
 list.data[i-1] = node;
 /* 表長加1 */
 list.length ++;
  
}

3.刪除運算

順序表的刪除運算指的是將表中第i個元素刪除,與插入運算相反,插入是向后移動元素,刪除運算則是向前移動元素。

/**
 * 在順序表list中刪除第i個元素,并返回被刪除的元素
 * @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ù),將表中最后一個元素同順序順數(shù)第一個元素交換,將倒數(shù)第二個元素同順數(shù)第二個元素交換,以此類推,直至交換完為止。

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

二. 線性表的鏈式存儲及算法

鏈式存儲結(jié)構存儲線性表數(shù)據(jù)元素的存儲空間可能是連續(xù)的,也可能是不連續(xù)的,因而鏈表的節(jié)點是不可以隨機存取的,鏈式存粗是最常見的存儲方式之一。

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

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

public class LinkList {

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

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

}

6.頭插法建表算法

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

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

 LinkList node;
 LinkList head = null;

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

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

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

}

7.尾插法建表算法

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

/**
 * 尾插法建表
 * @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é)點為頭節(jié)點 */
   head = node;
  } else {
   /* 上一個節(jié)點指向新節(jié)點 */
   rear.next = node;
  }
  /* 表尾指向新的節(jié)點 */
  rear = node;
 }

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

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

相關文章

  • spring-boot-starter-web更換默認Tomcat容器的方法

    spring-boot-starter-web更換默認Tomcat容器的方法

    Spring Boot支持容器的自動配置,默認是Tomcat,當然我們也是可以進行修改的。下面小編給大家?guī)砹藄pring-boot-starter-web更換默認Tomcat容器的方法,感興趣的朋友跟隨小編一起看看吧
    2019-04-04
  • 分析HashMap 的 JDK 源碼

    分析HashMap 的 JDK 源碼

    這篇文章主要分析了HashMap 的 JDK 源碼,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-10-10
  • restTemplate實現(xiàn)跨服務API調(diào)用方式

    restTemplate實現(xiàn)跨服務API調(diào)用方式

    這篇文章主要介紹了restTemplate實現(xiàn)跨服務API調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。
    2023-07-07
  • redis防止重復提交的實現(xiàn)示例

    redis防止重復提交的實現(xiàn)示例

    在開發(fā)中我們都需要處理重復提交的問題,本文主要介紹了redis防止重復提交的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Spring通過配置文件管理Bean對象的方法

    Spring通過配置文件管理Bean對象的方法

    這篇文章主要介紹了Spring通過配置文件管理Bean對象的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 解讀Java和JavaScript區(qū)別與聯(lián)系

    解讀Java和JavaScript區(qū)別與聯(lián)系

    這篇文章主要介紹了解讀Java和JavaScript區(qū)別與聯(lián)系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java編程實現(xiàn)非對稱加密的方法詳解

    Java編程實現(xiàn)非對稱加密的方法詳解

    這篇文章主要介紹了Java編程實現(xiàn)非對稱加密的方法,簡單講述了非對稱加密的概念、原理,并結(jié)合實例形式分析了java實現(xiàn)DH加密解密、RSA加密解密、ElGamal加密等具體操作技巧,需要的朋友可以參考下
    2017-08-08
  • Spring?BeanFactory工廠使用教程

    Spring?BeanFactory工廠使用教程

    Spring的本質(zhì)是一個bean工廠(beanFactory)或者說bean容器,它按照我們的要求,生產(chǎn)我們需要的各種各樣的bean,提供給我們使用。只是在生產(chǎn)bean的過程中,需要解決bean之間的依賴問題,才引入了依賴注入(DI)這種技術
    2023-02-02
  • Java基礎之extends用法詳解及簡單實例

    Java基礎之extends用法詳解及簡單實例

    這篇文章主要介紹了 Java基礎之extends用法詳解及簡單實例的相關資料,需要的朋友可以參考下
    2017-02-02
  • MyBatis如何進行雙重foreach循環(huán)

    MyBatis如何進行雙重foreach循環(huán)

    這篇文章主要介紹了MyBatis如何進行雙重foreach循環(huán),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評論

湘潭县| 讷河市| 连云港市| 石楼县| 秀山| 太仆寺旗| 弥渡县| 台湾省| 柳河县| 三河市| 海宁市| 交城县| 区。| 河北区| 甘德县| 和平县| 建湖县| 深州市| 松原市| 涞源县| 宜君县| 扶绥县| 宁都县| 鸡泽县| 修文县| 汝城县| 平遥县| 黄石市| 彩票| 蕲春县| 焉耆| 重庆市| 五莲县| 陇川县| 阜新市| 宁德市| 岗巴县| 天台县| 京山县| 上饶县| 瑞丽市|