第二讲(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;
}
}