標籤:
資料對象集:線性表是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】線性表