【c】線性表

來源:互聯網
上載者:User

標籤:

資料對象集:線性表是N(>=0)個元素構成的有序序列,a1,a2,a3.....a(N-1),aN,a(N+1)

 

 線性表上的基本操作有:


⑴ 線性表初始化:Init_List(L)
初始條件:表L不存在操作結果:構造一個空的線性表

⑵ 求線性表的長度:Length_List(L)
初始條件:表L存在
操作結果:返回線性表中的所含元素的個數

⑶ 取表元:Get_List(L,i)
初始條件:表L存在且1<=i<=Length_List(L)
操作結果:返回線性表L中的第i個元素的值或地址

⑷ 按值尋找:Locate_List(L,x),x是給定的一個資料元素。
初始條件:線性表L存在
操作結果:在表L中尋找值為x的資料元素,其結果返回在L中首次出現的值為x的那個元素的序號或地址,稱為尋找成功; 否則,在L中未找到值為x的資料元素,返回一特殊值表示尋找失敗。

⑸ 插入操作:Insert_List(L,i,x)
初始條件:線性表L存在,插入位置正確(1<=i<=n+1,n為插入前的表長)。
操作結果:線上性表L的第i 個位置上插入一個值為x 的新元素,這樣使原序號為i , i+1, ... , n 的資料元素的序號變為i+1,i+2, ... , n+1,插入後表長=原表長+1。

⑹ 刪除操作:Delete_List(L,i)
初始條件:線性表L存在,1<=i<=n。
操作結果:線上性表L中刪除序號為i的資料元素,刪除後使序號為i+1, i+2,..., n的元素變為序號為i, i+1,...,n-1,新表長=原表長-1。

 

線性表的儲存:順序儲存

 1 #include<stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4  5 #define max 10 6 typedef struct{ 7     int data[max];  //數組  8     int last;        //最後一個資料在數組中的位置  9 }LIST;10 11 //初始化 12 LIST * makeEmpty();13 //尋找,返回資料在數組中的位置,不存在返回-114 int find(int,LIST *); 15 //插入,成功1,失敗-116 int insert(int site,int num,LIST * Ptrl); 17 //列印資料結構18 void dump(LIST *); 19 //刪除20 int del(int site,LIST * Ptrl); 21 22 void main(void)23 {24     int num;25     LIST * demo;26     demo = makeEmpty();27     28     29 }30 31 //初始化 32 LIST * makeEmpty()33 {34     LIST * Ptrl;35     Ptrl = (LIST*)malloc(sizeof(LIST));36     Ptrl->last = -1;    //為空白時last為1 37     return Ptrl; 38 }39 //尋找,返回資料在數組中的位置,不存在返回-140 int find(int num,LIST * Ptrl)41 {42     int i=0;43     while(i<=Ptrl->last && Ptrl->data[i]!=num)44     {45         i++;46     }47     //如果i大於資料的長度,則就是沒有找到 48     if(i > Ptrl->last)49         return -1;50     //返回資料的位置 51     return i; 52 }53 //插入,成功1,失敗-154 int insert(int site,int num,LIST * Ptrl)55 {56     //1、判斷是否已經滿了,最後的位置=長度-157     if(Ptrl->last == max-1){58         return -1;59     } 60     //2、判斷要插入的位置是否大於等於長度 site >= max61     if(site<0 || Ptrl->last >= max){62         return -1;63     } 64     //3、從最後一個資料開始移動,下一位填充上一位的資料 ,data[n+1] = data[n],data[n]=data[n-1],直到n>=site 65     int i;66     for(i=Ptrl->last;i>=site;i--)67     {68         Ptrl->data[i+1] = Ptrl->data[i];69     }70     Ptrl->data[site] = num;71     Ptrl->last += 1;72     return 1; 73 } 74 75 //列印資料結構76 void dump(LIST * Ptrl){77     int i=0;78     while(i<=Ptrl->last)79     {80         printf("%d=>%d---%d\n",i,Ptrl->data[i],Ptrl->last);81         i++;82     }83 }84 //刪除85 int del(int site,LIST * Ptrl)86 {87     //檢測刪除的位置是否存在88     if(site > Ptrl->last || site<0){89         return -1;90     } 91     92     int i;93     for(i=site;i<=Ptrl->last;i++)94     {95         Ptrl->data[i] = Ptrl->data[i+1];96     } 97     Ptrl->last--;98     return 1;99 } 

 

線性表的儲存:鏈式儲存

 

【c】線性表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.