//单链表存储结构
typedef struct LNode{
ElemType data;
struct LNode * next;
}LNode, *LinkList;;
statue GetElem_L(LinkList L, int i, ElemType e)
{
p = L->next; j = 1;
while(p && j < i) {p = p->next; j++;}
if(!p) return ERROR;
e = p->data;
return OK;
}
//:时刻检测p的值
//链表的插入,在第i个之前插入e
status ListInsert_L(ListLink L, int i, ElemType e)
{
p = L; j = 0;
while(p && j < i - 1) {p = p->next; j++;}
if(!p) return ERROR;
s = (ListLink)mallo(sizeof(LNode));
s.data = e;
s->next = p->next;
p->next = s;
return OK;
}
//删除第i个元素
status ListDelet_L(ListLink L, int i, ElemType &e)
{
p = L; j = 0;
while(p->next && j < i - 1) {p = p->next; j++;}
if(!p->next) return ERROR;
q = p->next;
p->next = q->next;
free(q);
return OK;
}
//逆序创建链表
void CreateList_l(LinkList &L, int n)
{
L = (LinkList)malloc(sizeof(LNode));
L->next = null;
for(i = n; i > 0; i --)
{
p = (LinkList)malloc(sizeof(LNode));
scanf(&p->data);
p->next = L->next; L->next = p;
}
}
//非递减merge
void mergeList_L(LinkList &La, LinkList &Lb, LinkList &Lc)
{
pa = La->next; pa = Lb->next;
Lc = pc = pa;
while(pa && pb)
{
if(pa->data <= pa->data) {pc->next = pa; pc = pa; pa = pa->next;}
else {pc->next = pb; pc = pb; pa = pb->next;}
}
pc->next = pa ? pa : pb;
free(Lb);
}
//时间复杂度和单链表相同,但是减少了空间复杂度
本文详细介绍了单链表的基本存储结构及操作方法,包括获取指定位置元素、插入元素、删除元素、逆序创建链表、非递减排序等功能,并讨论了其时间和空间复杂度。
673

被折叠的 条评论
为什么被折叠?



