数据结构 链式储存

//浙江大学数据结构//

1.求表长

int Length(List PtrL)
{
List p=PtrL;//使p指向其头节点
int j=0;
while(p)//当p没有指向空时
{
p=p->next;
j++;
}
return j;
}

2.查找(分为按序号查找,以及按值查找)

List FindKth(int K,List PtrL)//查找第K个元素
{
List p=PtrL//指向头节点
int i=1;
while(p!=NULL&&i<k)//当指针没指向空,并且i没有到达k,遍历
{
p=p->Next;
i++;
}
if(i==K)//找到
return p;
else
return NULL;//没找到
}
List Find(ElementType X,List PtrL)
{
List p=PtrL;
while(p!=NULL&&p->Data!=X)
p=p->Next;
return p;
}

3.插入(在第i-1个节点后插入一个值为X的新节点)

(1)malloc申请新节点空间并且用s指向

(2)之后找到第i-1个节点,用p指向

(3)s的next改为p的next,p的next改为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;//返回的是新表的头指针
}
调用find函数找到第i-1个节点,并用p指向其
p=FindKth(i-1,PtrL)
if(p==NULL)//先判断是否有第i-1个结点,若没有则不能插入
{printf("error");return NULL;}
else
{
s=(List)malloc(sizeof(struct LNode));
s->Data=X;
s->Next=p->Next;
p->Next=s;
return PtrL;
}

}

4.删除

(1)找到要删除结点的前一个节点(i-1)用p指向

(2)用s指向要删除的结点

(3)p的next变为s的next

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);//看有没有第i-1个结点
if(p==NULL)
printf("i-1不存在");
else if(p->Next==NULL)
printf("i不存在");
else {
   s=p->Next;
   p->Next=s->Next;
   free(s);//记得释放内存
   return PtrL;//返回头结点
     }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值