資料結構之線性表實現 詳解

2021-08-28 03:24:38 字數 2109 閱讀 2357

1、線性表的概念

線性表是最基本、最簡單、也是最常用的一種資料結構。

線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的(注意,這句話只適用大部分線性表,而不是全部。比如,迴圈鍊錶邏輯層次上也是一種線性表(儲存層次上屬於鏈式儲存),但是把最後乙個資料元素的尾指標指向了哨位結點)。

在資料結構邏輯層次上細分,線性表可分為一般線性表和受限線性表。

(1)一般線性表:就是我們通常所說的「線性表」,可以自由的刪除或新增結點。

(2)受限線性表:主要包括棧和佇列,受限表示對結點的操作受限制。

注:我們說「線性」和「非線性」,只在邏輯層次上討論,而不考慮儲存層次,所以雙向鍊錶和迴圈鍊錶依舊是線性表。

2、線性表的結構特徵及特點

線性表是乙個有限序列。

線性表是乙個含有n≥0個結點的有限序列,對於其中的結點,有且僅有乙個開始結點沒有前驅但有乙個後繼結點,有且僅有乙個終端結點沒有後繼但有乙個前驅結點,其它的結點都有且僅有乙個前驅和乙個後繼結點。

一般地,乙個線性表可以表示成乙個線性序列(k1,k2,…,kn,其中k1是開始結點,kn是終端結點)。

在實際應用中,線性表都是以棧、佇列、串等特殊線性表的形式來使用的。

注:在實現線性表資料元素的儲存方面,一般可用順序儲存結構和鏈式儲存結構兩種方法。

(1)順序儲存結構主要包括順序表(即用一維陣列作為表的儲存結構)。

(2)鏈式儲存結構主要包括單鏈表、迴圈鍊錶和雙向鍊錶。

另外棧、佇列和字串也是線性表的特殊情況,又稱為受限的線性結構。

以下是線性表linearlist 的簡單實現:

// linearlist.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include //linearlist 線性表

//定義

templateclass linearlist

bool isempty() const //判斷是否為空

int length() const //獲取線性表長度

bool find(int k,t& x)const; //返回第k個元素到x中

int search(const t& x)const; //查詢元素值為x

int delete(int k,t& x); //刪除第k個元素,並將值賦值到x

int insert(int k,const t& x); //插入第k個元素,其值為x

void output() ;

private:

int length; //陣列長度

int maxsize; //陣列最大長度

t *elements;//一維動態陣列

};

//實現...

templatelinearlist::linearlist(int maxlistsize)

templatebool linearlist::find(int k,t& x)const

x=elements[k-1];

return true;

}

templateint linearlist::search(const t& x)const

for(int i=length-1;i>=k;i--)

elements[k]=x;

length++;

return k;

}

templatevoid linearlist::output()

執行結果如下:

mysql 線性表 資料結構之線性表

概要 參考 大話資料結構 把常用的基本資料結構梳理一下。線性表定義 線性表 list 零個或多個資料元素的有限序列。若將線性表記為 a 1,cdots,a a i,a cdots,a n 則表中 a 領先於 a i a i 領先於 a 稱 a 是 a i 的直接前驅元素,a 是 a i 的直接後繼元...

資料結構之線性表

從現在開始,我們開始討論如何實現一些常用的資料結構和其中的一些經典演算法.等把資料結構講完了.我可能會繼續討論vc 的程式設計只是以及vs平台下的c c 開發等等.呵呵.我們進入正題吧.我在這裡就只實現線性表的連表結構.當然了,這裡實際上包含了好多知識.我希望大家在引用的時候.一定要領悟裡面的一些變...

資料結構之線性表

線性表是具有相同特性的資料元素的乙個有限序列。該序列中所含元素的個數叫做線性表的長度,用n表示,n 0。當n 0時,表示線性表是乙個空表,即表中不包含任何元素。設序列中第i i表示位序 個元素為ai 1 i n 線性表的一般表示為 a1,a2,ai,ai 1,an include include d...