1. 程式人生 > >資料結構之線性表學習總結

資料結構之線性表學習總結

   鑑於自己的資料結構知識較為薄弱,並且自己常常學完沒幾天又忘了,每次用起來都要去查閱,所以現在開個部落格來記錄自己在學資料結構過程中自己的一些學習總結,也可以加深自己的理解。

第一篇要總結的是線性表。

線性表:零個或多個相同特性的資料元素的有限序列。首先它是一個序列,元素之間是有順序 的,第一個元素無前驅,最後一個元素無後繼,其他的都有且只有一個前驅和後繼。而所有元素按這種1對1的鄰接關係構成的整體就是線性表。

線性表的儲存結構:線性表有順序表和鏈式兩類儲存結 構

            (一)順序表

              順序表就是把線性表中的所有元素按照其邏輯順序,依次儲存到從計算機儲存器中指定儲存位置開始的一塊連續的儲存空間,如下圖所示,即用一維陣列來實現順序表。

              

順序表的一些基本操作

 首先定義一個順序表

#define MAXSIZE  20
typedef int ElemType;
typedef struct
{
    ElemType date[MAXSIZE];//存放順序表中的元素
    int length;           //存放順序表的長度
}SqList;                 //宣告順序表的型別
初始化順序表演算法
void InitList(SqList &L)
{
      L.length = 0;
}
用e返回L中第i個數據元素的值
int GetElem(SqList L,int i,ElemTye *e)
{
    if(L.length == 0 || i < 1 || i > L.length)
        return 0;
    *e = L.date[i - 1];
    return 1;
}
按元素查詢演算法
int LocateElem(SqList L,ElemType e)
{
     int i = 0;
     while(i < L.length && L.data[i] != e) i++;
     if(i > L.length) return 0;
     else return i + 1;
}
插入資料元素
int ListInsert(SqList *L,int i,ElemType e)
{
    if(L -> length == MAXSIZE)
        return 0;
    if(i < 1 || i > length + 1)
        return 0;
    if(i < L -> length)
    {
         for( k = L->length; k > i; k--)
                L->date[k] = L->date[k - 1];    
     }
     L -> date[i - 1] = e;
     L -> length++;
     return 1;
}
刪除資料元素演算法
int ListDelete(SqList &L,int i,ElemType &e)
{
    int k;
    if(L -> length == 0)
        return 0;
    if(i < 1 || i > L -> length)
        return 0;
    e = L -> date[i - 1];
    if(i < L -> length)
    {
        for(k = i; k < L -> length; k++)
            L -> date[k - 1] = L -> date[k];
    }
    L -> length--;
    return 1;
}

以上都是基於順序表的一些基本操作,順序儲存結構中只需存放元素自身的資訊,因此,儲存密度大,空間利用率高;還有就是元素位置可以用元素的下標通過簡單的解析式計算出來,所以可以隨機儲存。這都是順序表的優點,但是在順序表,元素的插入和刪除運算需要移動許多其他元素的位置,一些長度變化較大的線性表必須按最大需要的空間分配儲存。所以在使用線性表時,在選擇順序儲存還是鏈式儲存時,可以根據線性表是否很少進行插入和刪除操作,或者插入和刪除操作總是在尾部進行時,就可以依次為依據選擇。

       (二)連結串列

        在鏈式儲存結構中,每個結點用於儲存線性表的一個元素,每個結點不僅包含有所存元素本身的資訊(稱之為資料域),而且包含有元素之間邏輯關係的資訊,即前驅結點包含有後繼結點的地址資訊,這稱為指標域,這樣就可以通過前驅結點的指標域方便地找到後繼結點。連結串列由多個結點組成,這些結點的地址可以是連續,也可以不連續,這就是說這些資料元素可以儲存在記憶體中未被佔用的任意位置。

       連結串列由如下幾種形式

       (1)單鏈表:在每個結點中包含有資料域外,只設置一個指標域,用於指向其後繼結點,如圖

        

         (2)雙鏈表:在每個結點中包含有數值域外,設定有兩個指標域,分別用於指向其前驅結點和後繼結點。如圖:

        

         (3)迴圈連結串列:迴圈連結串列是另一種形式的鏈式儲存結構。它的特點是表中尾結點的指標域不變,而是指向表頭結點,整個連結串列形成一個環,如下圖:

          迴圈單鏈表:

         

           迴圈雙鏈表:

  

      (4)靜態連結串列:借用一維陣列來描述線性連結串列,陣列中的一個分量表示一個節點,同時使用遊標代替指標一顯示節點在陣列中的相對位置。陣列中的第0個分量可以看成頭節點,其指標域指示靜態連結串列的第一個節點。

連結串列的特點:由於每個繼節點帶有指標域,因此在儲存空間上比順序表要付出較大的代價,所以順序表比連結串列的儲存密度高。還有連結串列不具有順序表的隨機存取特點,但在連結串列中插入或刪除操作時,只需修改相關節點的指標域即可,不需要移動節點。


相關推薦

資料結構線性學習總結

   鑑於自己的資料結構知識較為薄弱,並且自己常常學完沒幾天又忘了,每次用起來都要去查閱,所以現在開個部落格來記錄自己在學資料結構過程中自己的一些學習總結,也可以加深自己的理解。 第一篇要總結的是線性表。 線性表:零個或多個相同特性的資料元素的有限序列。首先它是一個序列

循序漸進學習資料結構線性

一、思維導圖 二、線性表的基本概念 1.名詞解釋: 線性表:由n個數據特性相同的元素構成的有限序列,有順序儲存和鏈式儲存兩種表示形式。 空表:線性表中元素的個數n=0的表。 線性表的鏈式儲存結構:特點是用一組任意的儲存單元儲存線性表的資料元素,包括兩個域,其中儲存資料元素資訊的域稱為資料域,儲存直接後繼儲

資料結構線性總結

前言: 這幾天在學習資料結構,引用書中的一句話:資料結構 = 程式 + 演算法;本篇部落格作為一個知識的總結,希望給大家帶來幫助. 核心 : 線性表定義 從字面意義來看,呈線性,所以說

資料結構 線性的實現

 程式碼: #include<algorithm> #include<iostream> #include<stdlib.h> #define MAXSIZE 1100 using namespace std; /* 線性表的實現 1.插入//o

資料結構線性演算法的構建與應用

  //資料結構值順序線性表的實現與應用 //c++程式碼進行實現 //sqlist.h程式碼                     //線性表的初始化 #def

資料結構線性

線性表的邏輯結構 線性表是由n個型別相同的資料元素組成的有限序列,記為(a1,a2,…,ai-1,ai,ai+1,…,an)。其中,這裡的資料元素可以是原子型別,也可以是結構型別。線性表的資料元素存在著序偶關係,即資料元素之間具有一定的次序。線上性表中,資料元

資料結構線性(二)

資料結構之線性表一主要講的是線性表的順序儲存結構和鏈式儲存結構的實現和程式碼。這次我們來討論下靜態連結串列,迴圈連結串列和雙向連結串列。 靜態連結串列 我們讓陣列每個元素都是由兩個資料域組成:data和cur。資料域data用來儲存資料元素,cur相當於我們連結串列中的n

常見資料結構線性

線性表 線性表(List):由零個或多個數據元素組成的有限序列。 線性結構是最簡單,也是最常用的資料結構之一。 線性結構的特點是:在資料元素的有限集中,除第一個元素無直接前驅,最後一個元素無直接後驅外,每個元素資料有且僅有一個直接前驅元素和一個直接後續元素。   線性表---順序

資料結構線性 -- 連結串列(總括)

今天來總結一下連結串列。  首先,   什麼是連結串列?     就是採去鏈式儲存結構的線性表,所謂鏈式儲存就好比火車的車廂一樣,一節一節的連線起來,成為一個線性表。這種方式採用動態儲存分配方式,即

資料結構線性的順序儲存結構

1.線性表定義:線性表是零個或多個數據元素的有限序列。兩種物理結構:順序儲存結構和鏈式儲存結構。 2.線性表的順序儲存結構定義:是指用一段地址連續的資料單元依次儲存線性表的資料元素。說白了就是在記憶體中佔用一塊空間,然後將相同資料型別的元素依次存入。 線上性表的定義中,指出是用一段地址連續的資料單元儲存線

資料結構線性—淺談單鏈有頭結點和無頭節點

有頭結點的連結串列統一了演算法的實現,無頭節點減少了節點個數,但是隻有根據實際情況選用真正的有無頭節點連結串列 待續://程式碼實現 待續://程式碼實現 待續://程式碼實現 /*****************************************

C語言資料結構線性的基本操作

線性表的基本操作 內容: (1)順序表的操作 輸入一組整型元素序列,建立線性表的順序儲存結構。實現該線性表的遍歷。在該順序表中查詢某一元素,查詢成功顯示查詢元素,否則顯示查詢失敗。在該順序表中刪除或插入指定元素。 建立兩個按值遞增有序的順序表,將他們合併成一個按值遞增有序的

c語言版資料結構線性歸併大概

線性表:n個具有相同特性的資料元素的有限序列。較為靈活,可根據需要増長或縮短。 兩線性表歸併演算法:(此時已知其元素按值非遞減排列) void MergeList(List La, List Lb,

(一)資料結構線性的簡單實現:連結串列

/* 查詢連結串列中第K個元素 */ List *FindKth( int K, List *PtrL ) { List *p = PtrL; int i = 1; while (p != NULL && i < K ) { p = p->Next; i++;

C++資料結構線性

InitList( ):初始化順序表Insert(int L,int Elem):在L位置插入值Elem1.檢查記憶體空間是否夠,如果實際長度大於或等於最大容量,則要用realloc擴充套件記憶體空間2.判斷插入的位置L是否合法3.如果插入到表頭或表中,則要把元素往後挪。如果

資料結構線性(順序,單鏈,迴圈連結串列,雙向連結串列)-- 圖書管理系統

順序表 #include <iostream> #include <cstring> #include <cstdlib>///exit()標頭檔案exit(0):正常執行程式並退出程式。exit(1):非正常執行導致退出程式 #incl

基於C/C++語言資料結構線性(一)

資料結構學習筆記: 資料結構的重要性:資料結構我感覺很重要,不僅僅是考試很重要,而且在以後程式設計師事業上都是尤為重要的,知乎上有網友評價資料結構是最重要的程式設計基本能力,沒有之一。我感覺這個說法很對,並且大家都知道,資料結構與演算法這種說法常常被大家使用,就是因為資料

資料結構線性的鏈式儲存實現(附完整程式碼)

順序表插入、刪除時需要通過移動資料來實現,影響了執行效率。 而連結串列不要求邏輯上相鄰的兩個資料元素物理上也相鄰,因此對線性表的插入、刪除不需要移動資料元素,只需要修改鏈。 下面介紹帶頭結點的鏈式表: 資料結構: typedef int ElementType; ty

資料結構線性的順序儲存結構(陣列)的插入與刪除

線性表的順序存數結構:指的是用一段地址連續的儲存單元一次儲存線性表的資料元素      在記憶體中找塊記憶體,把相同資料型別的資料元素一次存放在這塊空間中。可以用以為陣列來實現順序儲存結構。陣列的長

資料結構3----線性中鏈式結構的其他幾種實現(霜小刀)

歡迎轉載和引用,若有問題請聯絡 若有問題,請聯絡 Email : [email protected] QQ:2279557541 前言   鏈式結構除了上一篇結構中所講的單項鍊表外, 還有另外幾種。按照<大話資料結構>中所說 包括