“线性表(Linear List)”:由同类型数据元素构成有序序列的线性结构
表中元素个数称为线性表的长度线性表没有元素时,称为空表表起始位置称表头,表结束位置称表尾} ```
+ 按值查找 ``` List Find(ElementType X, List PtrL) { List p = PtrL; while (p != NULL && p->Data != X) p = p->Next; return p;} ```
> 平均时间复杂度 O(n)(1)先构造一个新结点,用s指向; (2)再找到链表的第 i-1个结点,用p指向; (3)然后修改指针,插入结点 ( p之后插入新结点是s)
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); if (p == NULL) { printf("参数i错"); return NULL; } else { s= (List)malloc(sizeof(struct LNode)); s->Data = X; s->Next = p->Next; p->Next = s; return PtrL; } } > 平均时间复杂度 O(n)(1)先找到链表的第 i-1个结点,用p指向; (2)再用指针s指向要被删除的结点(p的下一个结点); (3)然后修改指针,删除s所指结点; (4)最后释放s所指结点的空间。
List Delete(int i, List PtrL) { List p, s; if (i == 1) { s = PtrL; if (PtrL != NULL) PtrL = PtrL->Next; else return NULL; free(s); return PtrL; } p = FindKth(i-1, PtrL); if (p == NULL) { printf("第%d个节点不存在", i - 1); return NULL; } else if (p->Next == NULL) { printf("第%d个节点不存在", i); return NULL; } else { s = p->Next; p->Next = s->Next; free(s); return PtrL; } } > 平均时间复杂度 O(n)