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 2 3 4 5 6
List MakeEmpty( ){ List PtrL; PtrL = (List )malloc( sizeof(struct LNode) ); PtrL->Last = -1; return PtrL; }
查找
1 2 3 4 5 6 7
intFind( ElementType X, List PtrL ){ int i = 0; while( i <= PtrL->Last && PtrL->Data[i]!= X ) i++; if (i > PtrL->Last) return-1; /* 如果没找到,返回-1 */ elsereturn i; /* 找到后返回的是存储位置 */ }
插入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
voidInsert( ElementType X, int i, List PtrL ){ int j; if ( PtrL->Last == MAXSIZE-1 ){ /* 表空间已满,不能插入*/ printf("表满"); return; } if ( i < 1 || i > PtrL->Last+2) { /*检查插入位置的合法性*/ printf("位置不合法"); return; } for ( j = PtrL->Last; j >= i-1; j-- ) PtrL->Data[j+1] = PtrL->Data[j]; /*将 ai~ an倒序向后移动*/ PtrL->Data[i-1] = X; /*新元素插入*/ PtrL->Last++; /*Last仍指向最后元素*/ return; }
删除
1 2 3 4 5 6 7 8 9 10 11
voidDelete( int i, List PtrL ){ int j; if( i < 1 || i > PtrL->Last+1 ) { /*检查空表及删除位置的合法性*/ printf (“不存在第%d个元素”, i ); return ; } for ( j = i; j <= PtrL->Last; j++ ) PtrL->Data[j-1] = PtrL->Data[j]; /*将 ai+1~ an顺序向前移动*/ PtrL->Last--; /*Last仍指向最后元素*/ return; }
线性表的链式存储实现
定义结构类型
1 2 3 4 5 6 7
typedefstructLNode *List; structLNode{ ElementType Data; List Next; }; structLnodeL; List PtrL;
求表长
1 2 3 4 5 6 7 8 9
intLength( List PtrL ){ List p = PtrL; /* p指向表的第一个结点*/ int j = 0; while ( p ) { p = p->Next; j++; /* 当前p指向的是第 j 个结点*/ } return j; }
查找
(1)按序号查找: FindKth
1 2 3 4 5 6 7 8 9 10 11 12
List FindKth( int K, List PtrL ){ List p = PtrL; int i = 1; while (p !=NULL && i < K ){ p = p->Next; i++; } if ( i == K ) return p; /* 找到第K个,返回指针 */ elsereturnNULL; /* 否则返回空 */ }
(2)按值查找: Find(更常用)
1 2 3 4 5 6
List Find( ElementType X, List PtrL ){ List p = PtrL; while ( p!=NULL && p->Data != X ) p = p->Next; return p; }
插入
先做s->Next = p->Next,后做p->Next = s,不要写反了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
List Insert( ElementType X, int i, List PtrL ){ List p, s; if ( i == 1 ) { /* 新结点插入在表头 */ s = (List)malloc(sizeof(struct LNode)); /*申请、填装结点*/ s->Data = X; s->Next = PtrL; return s; /*返回新表头指针*/ } p = FindKth( i-1, PtrL ); /* 查找第i-1个结点 */ if ( p == NULL ) { /* 第i-1个不存在,不能插入 */ printf("参数i错"); returnNULL; }else { s = (List)malloc(sizeof(struct LNode)); /*申请、填装结点*/ s->Data = X; s->Next = p->Next; /*新结点插入在第i-1个结点的后面*/ p->Next = s; return PtrL; }