线性表
类型名称: 线性表(list)
数据对象集:线性表是n(≥0)个元素构成的有序序列(a1,a2,...,an)
操作集:线性表 L €(属于) list,整数 i 表示位置,元素X € ElementType,
线性表基本操作主要有:
1、List MakeEmpty():初始化一个空线性表L;
2、ElementType FindKth(int K,List L):根据位序K,返回相应元素;
3、int Find(ElementType X,List L):在线性表L中查找X的第一次出现位置;
4、void Insert(ElementType X,int i,List L):在位序 i 前面插入一个新元素X;
5、void Delete(int i,List L):删除指定位序 i 的元素;
6、int Length(List L):返回线性表L的长度n。
例:
1 typedef struct LNode *List; 2 struct LNode{ 3 ElementType Data[MAXSIZE]; 4 int Last; 5 }; 6 struct LNode L; 7 List PtrL; 8 9 10 11 //1.初始化(建立空的顺序表) 12 List MakeEmpty() 13 { 14 List PtrL; 15 PtrL = (List)malloc( sizeof(struct LNode)); 16 PtrL->Last = -1; 17 return PtrL; 18 } 19 20 //2.查找 21 int Find(ElementType X, List PtrL) 22 { 23 int i=0; 24 while(i <= PtrL->Last && PtrL->Data[i]!=X) 25 i++; 26 if(i > PtrL->Last) return -1; /*如果没找到,返回-1*/ 27 else return i; 28 } 29 30 //3.插入(第i(1<=i && i<=n+1)个位置上插入一个值为X的新元素) 31 void Insert(ElementType X,int i,List PtrL) 32 { 33 int j; 34 if( PtrL->Last == MAXSIZE-1){ /*表空间已满,不能插入*/ 35 printf(" 表满“ ); 36 return ; 37 } 38 if(i<1 || i>Ptr->Last+2){ 39 printf( " 位置不合法 " ); 40 return ; 41 } 42 for(j=PtrL->Last;j>=i-1;j--) 43 PtrL->Data[j+1] = PtrL->Data[j];/*将a[i]~a[n]倒序向后移动*/ 44 PtrL->Data[i-1] = X; /*Last仍指向最后元素*/ /*新元素插入*/ 45 PtrL->Last++; 46 return; 47 } 48 49 50 //4.删除(删除表的第i(1<=i && i<=n)个位置上的元素) 51 void Delete(int i,List PtrL) 52 { 53 int j; 54 if(i < 1 || i > PtrL->Last){ /*检查空表及删除位置的合法性*/ 55 printf( "不存在第%d个元素",i); 56 return ; 57 } 58 for(j=i;j<=PtrL->Last;j++) 59 PtrL->Data[j-1] = PtrL->Data[j]; /*将a[i+1]~a[n]顺序向前移动*/ 60 PtrL->Last--; /*Last仍指向最后元素*/ 61 return ; 62 } 63 64 65