表项的删除 int Delete( SeqList &L, ListDatax)i ∥/在表中删除己有元素x inti=Find(L,x);∥在表中查找x if(i>=0){ Llengt for( intj=1;j<Llength; j++) Ldata[]=L data[j+1] return 1 ∥/成功删除 return o ∥/表中没有X
◼ 表项的删除 int Delete ( SeqList &L, ListData x ) { //在表中删除已有元素x int i = Find (L, x); //在表中查找x if ( i >= 0 ) { L.length -- ; for ( int j = i; j < L.length; j++ ) L.data[j] = L.data[j+1]; return 1; //成功删除 } return 0; //表中没有x }
顺序表的应用:集合的“并”远算 void Union( SeqList &A, seqlist &B)i int n-Length(A); int m- Length(B )i for( int i=0; i<m; 1++)t intx= GetData(B,i);∥在B中取一元素 intk=Find(A2x);∥在A中查找它 if(k ∥若未找到插入它 iInsert(A,x,n): n++,)
顺序表的应用:集合的“并”运算 void Union ( SeqList &A, SeqList &B ) { int n = Length ( A ); int m = Length ( B ); for ( int i = 0; i < m; i++ ) { int x = GetData ( B, i ); //在B中取一元素 int k = Find (A, x); //在A中查找它 if ( k == -1 ) //若未找到插入它 { Insert ( A, x, n ); n++; } } }
顺序表的应用:集合的“交”远算 void Intersection( SeqList &A, seqlist &B)i int n=Length(A); int m= Length(B ) int 1=0 while (i<n)i intx= GetData(A,1);∥在A中取一元素 intk=Find(B,x);/在B中查找它 if (k==-1 Delete(A, 1); n-i else it+ ∥/未找到在A中删除它
void Intersection ( SeqList &A, SeqList &B ) { int n = Length ( A ); int m = Length ( B ); int i = 0; while ( i < n ) { int x = GetData ( A, i ); //在A中取一元素 int k = Find ( B, x ); //在B中查找它 if ( k == -1 ) { Delete ( A, i ); n--; } else i++; //未找到在A中删除它 } } 顺序表的应用:集合的“交”运算
链表( Linked list) 链接表是线性表的链接存储表示 n单链表 静态链表 循环链表 双向链表
链表(Linked List) 链接表是线性表的链接存储表示 ◼ 单链表 ◼ 静态链表 ◼ 循环链表 ◼ 双向链表
单链表( Singly Linked List) 特点 ●每个元素(表项)由结点Node构成。 data link ◆线性结构 first +a+a2+a+ ◆结点可以连续,可以不连续存储 结点的逻辑顺序与物理顺序可以不一致 表可扩充
单链表 (Singly Linked List) ◼ 特点 ◆ 每个元素(表项)由结点(Node)构成。 ◆ 线性结构 ◆ 结点可以连续,可以不连续存储 ◆ 结点的逻辑顺序与物理顺序可以不一致 ◆ 表可扩充 data link first a0 a1 a2 a3 a4