我們知道,數據結構當中分為邏輯結構和物理結構。邏輯結構里面又分為好幾個結構。其中有一個是線性結構。
線性結構中的數據元素之間是一對一的關系。線性表和這個很類似,也是一對一,像極了物理結構當中的順序存儲結構。
線性表的定義是這樣的就是它的含義:零個或多個數據元素的有限序列。線性表(List)
那什么是數據元素呢?
1、數據是描述客觀事物的符號,是計算機可以操作的對象,是能被計算機識別,並輸入給計算機處理的符號集合。
2、數據元素:數據元素是組成數據的有一定意義的基本單位,也被稱之為記錄。
就是相當於狗,貓,老虎,大象這些動物是禽類的數據元素。
3、數據項:一個數據元素由多個數據項組成,數據項是最小的單位,它是不可分割的,一定存在的。
通俗點說:數據項就相當於人的鼻子,耳朵,頭腦,大腿這些器官,是這些器官組合成了一個人。同理你懂得。
他們有個關系鏈是這樣的:數據是由多個數據元素組合而成,一個數據元素由多個數據項組成。
#暫時就這樣理解吧
剛剛我們講解了線性結構。線性表和它類似。而且我們還介紹他的定義。但是印象應該不怎么深刻,讓我們圖解:
這就是線性表,這里長度為4,這是有限序列。他們的關系是這樣的:
1是2的直接前驅元素
3是2的直接后驅元素
長度肯定是:(n>=0) //n=0的時候,線性表為空
現在我們知道了線性表是什么,線性表里面的一些關系。
現在我們再說說數據類型。
數據類型:是指一組性質相同的值的集合及定義在此集合上的一些操作的總稱。
簡單點說意思就是他們的數據類型相同並且在相同的集合上。
1<2 //True 都是數字/整數類型之間比較,他們性質是相同的
'a'<2 //False甚至會報錯 字符串和數字/整數類型之間比較,兩個類型不同所以會報錯或者返回False,一般會報錯a未定義。
數據類型可以分為兩類:
用C的來講解說明:
1、原子類型:是不可以再分解的基本類型,包括整型,實型,字符型。
2、結構類型:由若干個類型組合而成。是可以再分解的。例如整型數組由若干個整型數據組成。
現在我們介紹了數據類型。
下面介紹抽象
抽象是指抽出事物具有普遍性的本質。它是抽出問題的特征而忽略非本質的細節,是對具體事物的一個概括。
簡單點說就是保留最核心最重要的部分,其他的邊邊角角全部扔掉
下面介紹抽象數據類型
我們對已有的數據類型進行抽象,就有了抽象數據類型。
抽象數據類型:是指一個數學模型定義在該模型上的一組操作。
//在這里抽象的意義在於數據類型的數學抽象特性
本質,最核心的是:數學,其余的非本質/非核心都會被忽略。
講解了數據類型和抽象數據類型相信大家很清楚了吧。
下面我們開始講解線性表的抽象數據類型。
這里最核心的就是線性表啦,他們都是一對一的存在,在我們前面的基礎學習當中,我們已經慢慢知道了抽象是什么。
關於線性表抽象數據類型的定義如下所示,貼上代碼code:
這里用的是C寫的線性表抽象數據類型定義和利用
#include <studio.h>
/* 操作方法: InitList(*L):初始化操作,建立一個空的線性表 ListEmpty(L):若線性表為空,返回True,否則返回False ClearList(*L):將線性表清空。 GetElem(L,i,e):將線性表L中的第i個位置元素賦值給e LocateElem(L,e):在線性表L中查找與給定值e相等的元素,如果查找成功 返回該元素在表中序號表示成功,否則,返回0表示失敗 ListInsert(*L,i,e):在線性表L中的i個位置插入新元素e ListDelete(*L,i,*e):刪除線性表L中地i個位置元素,並用e返回其值 ListLength(L):返回線性表L的元素個數 */
void union(List *La,List Lb)//union在這里只是個名字
{ int La_len,Lb_len,i; ElemType e;/*聲明一個與La和Lb相同的數據元素e*/ La_len=ListLength(La);//求線性表的長度
Lb_len=ListLength(Lb);//求線性表的長度
for(i=1;i<Lb_len;i++)//循環遍歷Lb的長度
{ GetElem(Lb,i,e); //取出第i個數據元素把它賦值給e
if(!LocateElem(La,e,equal))//如果La不存在和e相同的元素
ListInsert(La,++La_len,e);//就向線性表的長度里面插入新元素e
} }
//為注釋,我想注釋部分講解的很清楚,這段代碼並不能正常運行。因為這只是算法的一個方法,而不是實際的代碼編程,在這里和代碼還是有點區別的。