导航:首页 > 源码编译 > 顺序表的前驱算法

顺序表的前驱算法

发布时间:2023-01-19 12:29:08

1. 请分别对顺序表和单链表写出求线性表中下标为i的(第i+1个)元素的前驱和后续的算法

顺序表:前驱a[i-1],后继a[i+1]
线性表:p=head;
int j=0;
while(j!=i)
{
j++;
p=p->next ;
}
前驱p->data,后继p->next->next->data

2. 顺序表的前驱和后继是指什么

顺序表的前驱与后继指的是当前元素前一个元素与后一个元素分别是什么。如图所示,a[i-1]与a[i+1]分别是a[i]的前驱与后继。

顺序表的实现一般都是使用数组完成,故而在顺序表上进行插入、删除与排序操作是都需要对整个顺序表进行操作;只有在访问第i个元素时,只需要将i-1或i+1就可以轻松访问到该元素的前驱和后继,耗时与n无关。

(2)顺序表的前驱算法扩展阅读:

线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。其中,线性表是逻辑结构,顺序表是其一种存储结构。

顺序表具有按数据元素的序号随机存取的特点。

在顺序表中,逻辑关系相邻的两个元素在物理位置上也相邻。

顺序表用物理逻辑上的相邻实现数据元素之间的逻辑相邻关系是既简单又自然的。

3. 顺序表、单链表的删除算法

单链表的删除操作是指删除第i个结点,返回被删除结点的值。删除操作也需要从头引用开始遍历单链表,直到找到第i个位置的结点。如果i为1,则要删除第一个结点,则需要把该结点的直接后继结点的地址赋给头引用。对于其它结点,由于要删除结点,所以在遍历过程中需要保存被遍历到的结点的直接前驱,找到第i个结点后,把该结点的直接后继作为该结点的直接前驱的直接后继。删除操作如图

单链表的删除操作示意图

删除操作的算法实现如下:
public T Delete(int i)
{
if (IsEmpty()|| i < 0)
{
Console.WriteLine("Link is empty or Position is error!");
return default(T);
}
Node q = new Node();
if (i == 1)
{
q = head;
head = head.Next;
return q.Data;
}
Node p = head;
int j = 1;
while (p.Next != null&& j < i)
{
++j;
q = p;
p = p.Next;
}
if (j == i)
{
q.Next = p.Next;
return p.Data;
}
else
{
Console.WriteLine("The ith node is not exist!");
return default(T);
}
}
算法的时间复杂度分析:单链表上的删除操作与插入操作一样,时间主要消耗在结点的遍历上。如果表为空则不进行遍历。当表非空时,删除第i个位置的结点, i等于1遍历的结点数最少(1个),i等于n遍历的结点数最多(n个,n为单链表的长度),平均遍历的结点数为n/2。所以,删除操作的时间复杂度为O(n)。

阅读全文

与顺序表的前驱算法相关的资料

热点内容
古玩哪个app好卖 浏览:146
u盘内容全部显示为压缩包 浏览:517
编译固件时使用00优化 浏览:356
速借白条app怎么样 浏览:756
用纸张做的解压东西教程 浏览:12
求圆的周长最快算法 浏览:190
安卓热点怎么减少流量 浏览:270
北京代交社保用什么app 浏览:855
第一眼解压视频 浏览:726
文件夹err是什么 浏览:97
qt4编程pdf 浏览:572
局域网服务器下如何连续看照片 浏览:254
经过加密的数字摘要 浏览:646
加密锁9000变打印机 浏览:694
程序员的职业发展前途 浏览:639
安卓是世界上多少个程序员开发 浏览:45
解压器官方免费 浏览:85
单片机p10开发 浏览:487
做什么app赚钱 浏览:85
博途编译失败联系客户支持部门 浏览:930