数据结构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