线性链表 查找 插入 删除 创建 merge

本文详细介绍了单链表的基本存储结构及操作方法,包括获取指定位置元素、插入元素、删除元素、逆序创建链表、非递减排序等功能,并讨论了其时间和空间复杂度。

//单链表存储结构

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);

}

//时间复杂度和单链表相同,但是减少了空间复杂度

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值