資料結構(三) 線性表 順序表,鍊錶

2022-07-03 17:24:11 字數 3371 閱讀 5066

一、線性表概述

線性表是最簡單的一種的資料結構,由若干相同特徵的資料元素組成的有限序列

沒有前驅元素的的結點稱為線性表的頭結點,沒有後繼元素的結點稱為線性表的尾結點

線性表按照儲存元素的結構,可以分為順序表和煉表

二、順序表

2.1基本實現

順序表是在計算機記憶體中以陣列形式存在的線性表結構,即記憶體中用一組位址連續的儲存單元,依次儲存線性表中的元素,使得線性表中的相鄰的資料元素儲存在相鄰的物理記憶體位址中。

public class orderlistelse {

twnode newnode = new twnode(t, last, null);

last.next = newnode;

last = newnode;

n++;

* 獲取具體位置處資料域的值

* @param index

* @return

public t get(int i) {

if(i<0 || i>n) {

system.out.println("檢索位置非法...");

twnode pre = head;

for(int index=0;indexpre = pre.next;

return (t) pre.next.item;

* 移除鍊錶元素

* @param t

public t remove(int i) {

if(isempty()) {

return null;

if(i<0 || i>n) {

system.out.println("檢索位置非法...");

twnode pre = head;

for(int index=0;indexpre = pre.next;

//i位置處的結點

twnode currnode = pre.next;

//i位置的下乙個結點

twnode currnext = currnode.next;

pre.next = currnext;

currnext.pre = pre;

n--;

if(isempty()) {

last = null;

return (t) currnode.item;

* 返回鍊錶中首次出現該元素的位置

* @param t

* @return

public int indexof(t t) {

twnode pre = head;

for(int index=0;indexpre = pre.next;

if(t.equals(pre.item)) {

return index;

return -1;

* 獲取雙向鍊錶第乙個元素

* @return

public t getfirst() {

if(isempty()) {

return null;

return (t) head.next.item;

* 獲取雙向鍊錶第二個元素

* @return

public t getlast() {

if(isempty()) {

return null;

return (t) last.item;

@override

public iteratoriterator() {

return null;

public class myiterator implements iterator{

twnode node;

public myiterator() {

node = head;

@override

public boolean hasnext() {

return node.next != null;

@override

public t next() {

return (t) node.next.item;

3.4迴圈鍊錶

迴圈鍊錶,顧名思義,及鍊錶要成環,在單向鍊錶中,尾結點的指標域為null,不指向任何結點,當鍊表要成環時,讓尾結點的指標域指向頭結點即可。

迴圈鍊錶的構造:

public class node{

//結點元素

public t item;

//指向下乙個結點

public node next;

public node(t item,node next) {

this.item = item;

this.next = next;

public static void main(string args) {

node node1 = new node(1, null);

node node2 = new node(2, null);

node node3 = new node(3, null);

node node4 = new node(4, null);

node node5 = new node(5, null);

node1.next = node2;

node2.next = node3;

node3.next = node4;

node4.next = node5;

node5.next = node1;

3.5線性表時間複雜度

鍊錶和順序表的時間複雜度比較:

鍊錶的元素查詢,都需要從鍊錶頭部開始,往後遍歷,直到找到目標元素位置,時間複雜度為o(n),順序表的元素查詢,由於陣列元素索引的存在,直接獲取索引處元素的值即可,時間複雜度為o(1)

鍊錶的插入,每次都需要找到i位置前面處的元素,進行結點的新增和鍊錶的連線操作,時間複雜度為o(n),順序表的插入,每次都需要找到i位置,並將原i處和其後面的元素向後移動,時間複雜度為o(n)

鍊錶的刪除,每次都需要找到i位置處的元素,進行鍊錶刪除的連線操作,時間複雜度為o(n),順序表的插入,每次都需要找到i位置,並將原i處後面的元素向前移動,時間複雜度為o(n)

優缺點:

資料結構 三 線性表

零個或多個資料元素的有限序列 在較複雜的線性表中,乙個資料元素可以由諾幹個資料項組成 結構 define listsize 100 線性表的最大長度 typedef int datatype typedef struct seqlist datatype是資料元素型別,可以根據需要定義,可以使用se...

資料結構 線性表(順序表 鍊錶)

線性表 1 線性表是一種邏輯結構,表示一種一對一的邏輯關係,除首節點和尾節點,每個結點只有乙個前驅結點和乙個後繼結點 2 兩種實現的物理結構 順序儲存,鏈式儲存 順序表 1 定義 用一組位址連續的儲存單元,一次儲存線性表中的元素,使得邏輯位置相鄰的元素物理位置也相鄰。2 特點 順序表元素的位序從1開...

資料結構(三)線性表 順序儲存結構

線性表 1 不同應用,操作不同。2 對於複雜的操作,可以用這些資料的組合來操作。3 介面不同。順序儲存結構及實現 連續儲存單元依次儲存 可通過位置儲存元素 可以隨機訪問 無需額外空間 必須預留空間 各函式只是引數型別不一樣,其功能在本質上完全相同。若能寫一段通用 適用於各種資料型別,則 的可重用性大...