ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构2.2 线性表链式存储

2022-06-26 11:02:10  阅读:133  来源: 互联网

标签:结点 return 线性表 int List next Ptrl 2.2 数据结构


线性表链式存储

不要求逻辑上相邻的元素物理上也相邻

链式线性表的格式

typedef struct LNode *List;
typedef struct LNode {
telementType data;
List Next;
};
List Ptrl;

操作集:

求表长:

int length(List Ptrl){
List P=Ptrl;//P指向Ptrl的表头。
int j=0;//j为计数器
while(P){//P不为空
P=P->next;//读取P的下一个结点直到最后
j++;

}
return j;
}

查找:

1,按序号查找:

int Findk(int k,List Ptrl){//k是要查找的数值
List P=Ptrl;
while(P!=NULL&&p->data!=k){//判断
p=p->next;
}
if(P!=NULL){
return i;//找到了
}
else
return -1;//未找到
}

 

 

2,按值查找:

int Findk(int k,List Ptrl){//k是要查找数值
List P=Ptrl;
while(P!=NULL&&P->data!=k){//判断数值是否相等
p=p->next;
}
if(P!=NULL){
return i;//找到了
}
else
return -1;//未找到
}

插入:(插入第i个元素的位置)

  • malloc函数申请新空间
  • 寻找第i-1结点的位置,用(临时)p指针指向
  • 插入指针S指向第i个结点:s->next=p->next;
  • 第i-1个结点指向指针S:p->next=s;
List insert(List Ptrl,int i)
{
List p,j;//临时链表j和插入链表p;
if(i==1)//i为1是头指针,要特殊处理
{
P=(List)malloc(sizeof(List));
p=Ptrl;
return p;
}
j=findk(i-1);//查找第i-1个结点的函数
if(j==NULL){//参数错误
return NULL;
}
else{
p=(List)malloc(sizeof(List));
p->next=j->next;//P指向第i个元素
j->next=p;//j指向插入指针p。
return Ptrl;
}
}

时间复杂度为O(n)。

删除:要释放被删除的结点占用的内存空间(free)。

  • 先找到要删除的第i-1个结点,用p临时指针指向。
  • 用s结点指向第i个结点(p要删除的结点)。
  • 删除结点。
  • 用s指针释放内存。

 

标签:结点,return,线性表,int,List,next,Ptrl,2.2,数据结构
来源: https://www.cnblogs.com/dragon246810/p/16413107.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有