第二讲(1)
线性表顺序结构
const int MaxSize = 100 ;
struct LNode
{
int Data[ MaxSize] ;
int Last;
} ;
LNode* MakeEmpty ( )
{
LNode* L = new LNode;
L-> Last = - 1 ;
}
int Find ( LNode L, int elem)
{
bool tag{ false } ;
for ( int i{ 0 } ; i < L. Last + 1 ; i++ )
{
if ( elem == L. Data[ i] )
{
tag = true ;
return i;
}
}
if ( tag == false ) return - 1 ;
}
LNode* Insert ( LNode* L, int pos, int elem)
{
int len = L-> Last + 1 ;
if ( len > 100 ) return nullptr ;
for ( int i{ len } ; i > pos - 1 ; i-- )
{
L-> Data[ i] = L-> Data[ i - 1 ] ;
}
L-> Data[ pos - 1 ] = elem;
return L;
}
LNode* Delete ( LNode* L, int pos)
{
int len = L-> Last + 1 ;
if ( pos > len) return nullptr ;
for ( int i{ pos - 1 } ; i < len- 1 ; i++ )
{
L-> Data[ i] = L-> Data[ i + 1 ] ;
}
return L;
}
线性表链式结构
LpNode* Find ( LpNode* L, int find_elem)
{
if ( L == nullptr ) return 0 ;
while ( L&& L-> elem!= find_elem)
{
L = L-> next;
}
if ( L) return L;
else return nullptr ;
}
bool Insert ( LpNode* L, int pos, int elem)
{
if ( L == nullptr ) return false ;
int pre = pos - 1 ;
for ( int i{ 0 } ; ( i < pre) && L; i++ )
{
L = L-> next;
}
if ( L)
{
LpNode* newL = new LpNode{ elem, nullptr } ;
newL-> next = L-> next;
L-> next = newL;
}
else
{
LpNode* newL = new LpNode{ elem, nullptr } ;
newL-> next = L; }
return true ;
}
bool Delete ( LpNode* L, int pos)
{
int pre = pos - 1 ;
for ( int i{ 0 } ; ( i < pre) && L; i++ )
{
L = L-> next;
}
if ( L)
{
L-> next = L-> next-> next;
delete L-> next;
return true ;
}
else
{
return false ;
}
}