DS之線性表,ds線性

來源:互聯網
上載者:User

DS之線性表,ds線性

        線性表的定義

        線性表是最常用且最簡單的一種資料結構,一個線性表是n個資料元素的有限序列。至於每個資料元素的具體含義,在不同的情況下各不相同,它可以是一個數或一個符號,也可以是一頁書,甚至其他更複雜的資訊。

        自稍微複雜的線性表中,一個資料元素可以由若干個資料項目組成。在這種情況下,常把資料元素稱為記錄,含有大量記錄的線性表又稱為檔案。

        例如就是一個檔案:表中每個學生的情況為一個記錄,它由姓名,學號,性別,年齡,健康情況五個資料項目組成。

 

        線性表的表示

        在同一線性表中的元素必定具有相同的屬性,即屬於同一資料對象,相鄰資料元素之間存在著序偶關係。若將線性表記為(a1,...,ai-1,ai,ai+1,...,an),則表中ai-1領先於ai,ai領先於ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接後繼元素。當i=1,2,...,n-1時,ai有且僅有一個直接後繼,當i=2,3,...,n時,ai有且僅有一個直接前驅。

        線性表中元素的個數為n(n>=0)定義為線性表的長度,n為0時稱為空白表。在非空表中的每個資料元素都有一個確定的位置,如a1是第一個資料元素,an是最後一個資料元素,ai是第i個資料元素,稱i為資料元素ai線上性表中的位序。

       線性表是一個相當靈活的資料結構,它的長度可根據需要增長或縮短,即對線性表的資料元素不僅可以訪問,還可以進行插入和刪除等。

       對於抽象資料類型線性表,還可以進行一些複雜的操作,將兩個或兩個以上的線性表合并為一個線性表;把一個線性表拆開兩個或兩個以上的線性表;重新複製一個線性表等。

       線性表的基本操作:

<span style="font-size:18px;">//線性表基本操作InitList(&L)//操作結果:構建一個空表LDestroyList(&L)//初始條件:線性表L已經存在 操作結果:銷毀線性表LClearList(&L)//初始條件:線性表L已經存在 操作結果:將L重設為空白表ListEmpty(L)//初始條件:線性表L已經存在 操作結果:判斷L是否為空白表ListLength(L)//初始條件:線性表L已經存在 操作結果:返回L中的資料元素的個數GetElem(L,i,&e)//初始條件:線性表L已經存在,1<=i<=ListLength(L)//操作結果:用e返回L中第i個資料元素的值LocateElem(L,e,compare())//初始條件:線性表L已經存在,compare()是資料元素判定函數//操作結果:判定是否返回L中第一個與e滿足關係compare()的資料元素的位序。ListInsert(&L,i,e)//初始條件:線性表L已經存在,1<=i<=ListLength(L)+1//操作結果:在L中第i個位置插入之前插入新的資料元素e,將L的長度加1ListDelete(&L,i,&e)//初始條件:線性表L已經存在並且為非空,1<=i<=ListLength(L)//操作結果:刪除L中的第I個資料元素,並用e返回其值,L的長度減1ListTraverse(L,visit())//初始條件:線性表L已經存在//操作結果:調用visit()函數將線性表的所有資料元素遍曆輸出</span>

        例一:將La和Lb的資料元素合并到Lb中,並且不能出現重複的資料元素的演算法描述為:

<span style="font-size:18px;">void union(List &La,list Lb){La_len=ListLength(La);//求兩個線性表的長度    Lb_len=ListLength(Lb);for(int i=1;i<=Lb_len;i++){GetElem(Lb,i,e);//取出Lb中的第i個資料元素賦值給eif(!LocateElem(La,e,equal)){ListInsert(La,++La_len,e);//若Lb中不存在和e相同的資料元素則插入}}}</span>

         例二:將La和Lb合并到一個新的線性表Lc中,並且Lc中的資料元素的順序依然為非遞減排列的演算法:

<span style="font-size:18px;">void MergeLIst(List La,List Lb,List &Lc){InitList(Lc);//構建一個空表int i=j=1;int k=0;La_len=ListLength(La);//求兩個線性表的長度    Lb_len=ListLength(Lb);while((i<=La_len)&&(j<=Lb_len)){int ai,bj;GetElem(La,i,ai);        GetElem(Lb,j,bj);if(ai<=bj){ListInsert(Lc,++k,ai);++i;}else{            ListInsert(Lc,++k,bj);++j;}while(i<=La_len){GetElem(La,i++,ai);ListInsert(Lc,++k,ai);}while(j<=Lb_len){GetElem(Lb,j++,bj);ListInsert(Lc,++k,bj);}}}</span>



 

 


 

 

   

 

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.