【数据结构】线性表(包括有序表)在顺序表和链表上的插入、删除、逆置操作算法

线性表(包括有序表)在顺序表和链表上的插入、删除、逆置操作算法Java版... 线性表(包括有序表)在顺序表和链表上的插入、删除、逆置操作算法
Java版
展开
 我来答
山水阿锐
2015-06-16 · TA获得超过34.3万个赞
知道顶级答主
回答量:23.7万
采纳率:91%
帮助的人:3.2亿
展开全部
1)初始化指针p和q,分别指向链表中相邻的两个元素;

2)当p->next不为空时,做如下处理:
①若相邻两元素不相等时,p和q都向后推一步;
②否则,当相邻元素相等时,删除多余元素。
【算法源代码】
void Delete_Equal(LinkList *L)
{ p=(*L)->next;q=p->next; /*p和q指向相邻的两个元素*/
 while(p->next)
  { if(p->data!=q->data) /*若相邻两元素不相等时,p和q都向后推一步*/
    { p=p->next; q=p->next; }
    else
    { while(q->data==p->data) /*当相邻元素相等时删除多余元素*/
         { r=q;
           q=q->next;
           free(r);
         }
        p->next=q;p=q;q=p->next;
    }/*else*/
  }/*while*/
}/*Delete_Equal */
试设计一个算法,对带头结点的单链表实现就地逆置。

【算法分析】
1)空表或长度为1的表,不做任何处理;
2)表长大于2时,做如下处理:
①首先将整个链表一分为二,即从链表的第一元素结点处断开;
②逐个地把剩余链表的当前元素q插入到链表的头部。
【算法源代码】
void LinkList_reverse(LinkList L)
{ if(!L->next||!L->next->next) return;
 p=L->next; q=p->next; s=q->next; p->next=NULL; /*从链表的第一元素结点处断开*/
 while(s->next)
  {q->next=p;p=q;
   q=s;s=s->next; /*把L的元素逐个插入新表表头*/
  }
 q->next=p;  s->next=q;L->next=s;
}/*LinkList_reverse*/
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式