具有n个元素的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法时间复杂度为()(1≤i≤n+1)
typedef struct
{
int data[MaxSize];
int length;
} SqList;
bool ListInsert(SqList *&L, int i, int e)
{
int j;
if (i < 1 || i > L->length+1)
{
return false;
}
//这里将从1开始的序号(逻辑序号)转为从0开始(物理序号)
i--;
//将data[i]及后面的元素后移一个位置倒着后移
for (j = L->length;j > i;j--)
{
L->data[j] = L->data[j-1];
}
//插入元素
L->data[i] = e;
//链表长度增长1
L->length++;
return true;
} 扩展:链式存储方式,时间复杂度也是o(n),最坏的情况是查找到元素的末尾。typedef struct LNode
{
int data;
struct LNode *next;
} LinkNode;
bool ListInsert(LinkNode *&L, int i, int e)
{
int j = 0;
//p指向头结点
LinkNode *p = L, *s;
if (i <= 0)
{
return false;
}
//查找第i-1个结点p
while (j < i-1 && p!=NULL)
{
j++;
p = p->next;
}
//没有找到第i个元素返回false
if (p == NULL)
{
return false;
}
else
{
s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = e;
//将新结点s插入到第i个结点后
s->next = p->next;
p->next = s;
return true;
}
}