单链表实现“插入”和“删除”操作-创新互联

在单链表中,又如何实现“插入”和“删除”操作呢?

创新互联自2013年创立以来,先为博爱等服务建站,博爱等地企业,进行企业商务咨询服务。为博爱企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

插入操作:

  假设我们要在线性表的两个数据元素a和b之间插入一个数据元素x,已知p为其单链表存储结构中指向结点a的指针。为插入数据元素x,首先要生成一个数据域为x的结点,然后插入在单链表中。根据插入操作的逻辑定义,还需修改结点a中的指针域,令其指向结点x,而结点x中的指针域应该指向b结点,从而实现3个元素a,b和x之间逻辑关系的变化。

  假设s为指向结点x的指针。则上述指针修改用语句描述即为:

  s->next=p->next;

  p->next=s;

删除操作:

  如果在线性表中删除元素b时,为在单链表中实现元素a,b和c之间逻辑关系的变化,仅需要修改结点a中的指针域即可。假设p为指向结点a的指针,则修改指针的语句为:

  p->next=p->next->next;

 由以上可知,在已知链表中元素插入或删除的确切位置的情况下,在单链表中插入或删除一个结点时,仅需修改指针为不需要移动元素。

 插入函数ListInsert_L:要求是在已知链表中的确切位置插入一个结点。所以需要向函数内传递已知链表L,插入的确切位置i,以及即将插入的结点数据元素e。

  ListInsert_L(LinkList &L,int i,ElemType e)

 //第一步:将链表的头结点的指针域单链表存储结构的指针p

 p=L;//&L即为链表L的的头结点地址

 j=0;//计数器

 //第二步:找到在将在链表i处,即要插入新结点的位置。

 //方法:先找到链表i-1处的结点。此结点的指针域即指向i处结点的指针域

 while(p&&j

 {

 p=p->next;//p->next是指向第j+1个数据元素的指针

 ++j;//

 }

 //第三步:判断是否越界已知链表

 //如果i小于1或者大于表长+1,即越界,则返回错误

 if(!p||j>i-1)

 return ERROP;

 //第四步:找到i出结点,新建一个结点(包括数据域和指针域)代表即将插入的结点

 //生成新结点

 s=(LinkList)malloc(sizeof(LNode));//新结点s

 s->data=e;//新结点的数据域赋值为将插入的数据元素e

 //因为原来i处结点指针域p保存着指向下一个i+1处结点的指针域。

 //要插入新结点,即原来i+1处的结点变为i+2处的几点,新建结点变为i+1处的结点

 //即新建结点指向原来i+1处的结点的指针域,所以s->next=p->next

 //因为此时p代表的是i处的结点,p->代表i+1处的结点指针域赋值给新结点指针域

 s->next=p->next;

 //因为此时p代表的是i处的结点,p->next代表i+1处的结点指针域赋值给新结点指针域

 //完成插入操作时,新建结点s变为i+1处的结点。所以p->next指向s,即将s赋值给p->next.

 p->next=s;

 return OK;

}

  

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:单链表实现“插入”和“删除”操作-创新互联
网站链接:http://scjbc.cn/article/hgdsh.html