当前位置:首页 > > 充电吧
[导读]1、对单链表结构和顺序存储结构做对比---- 1)存储分配方式-- 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素。-- 单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。---

1、对单链表结构和顺序存储结构做对比

---- 1)存储分配方式

-- 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素。

-- 单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。

---- 2)时间性能

-- 查找:顺序存储结构O(1),单链表O(n)

-- 插入和删除:

    顺序存储结构需要平均移动表长一半的元素,时间为O(n)。单链表在找出某位置的指针后,插入和删除时间仅为O(1)。

---- 3)空间性能

-- 顺序存储结构需要预分配存储空间,分大了,浪费,分小了易发生上溢。

-- 单链表不需要预分配存储空间,只要有就可以分配,元素个数也不受限制。

从空间限制来看,顺序表在静态存储分配的情形下,一旦存储空间装满不能扩充,如果再加入新元素将出现存储溢出;在动态存储分配的

情形下虽然存储可以扩充,但需要移动大量元素,将导致操作效率降低。

线性链表的结点空间只有在需要的时候才申请,无需事先分配,因此只要还有空间可分配,就没有存储溢出问题,操作效率也优于顺序表。

---- 4)访问方式

-- 顺序表可以顺序存取,也可以直接存取。

-- 线性链表只能从链头顺序存取。

---- 5)逻辑顺序与物理位置的关系

-- 顺序表中表元素的逻辑顺序与它们的物理存储顺序是完全相同的。

-- 线性链表中各个表元素的逻辑顺序与物理存储顺序不一定相同。

---- 6)查找速度

-- 由于线性链表只能沿链逐个比较,而顺序表可以按照元素序号(下标)直接访问,故顺序表查找速度比线性链表要快。

-- 从插入和删除速度来看,如果要求插入和删除后表中其他元素的相对逻辑顺序保持不变,则顺序表平均需要移动大约一半元素,

而线性链表只需修改链接指针,不需要移动元素,因此线性链表比顺序表的插入和删除速度快。

---- 7)C指针的使用

-- 顺序表的情形下,指针p指示数据元素存储位置,用*p可取得该数据元素的值,用p++可以顺序进到物理上下一个数据元素的位置;

-- 在线性链表的情形下,指针p指示链表结点的地址,用*p不能取得该结点数据的值,用p++也不能进到下一个结点的位置,只能使用

p->data取得结点数据的值,用p=p->next进到下一个结点。

2、结论

---- 通过上面的对比,我们可以得出下列结论:

--- 1)若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。

           若需要频繁插入和删除时,宜采用单链表结构。

--- 2)当线性表中的元素个数变化较大或者根本不知道有多大时,最好用单链表结构,这样可以不需要考虑存储空间的大小问题。

           如果事先知道线性表的大致长度,用顺序存储结构效率会高很多。

3、静态链表

---- 用数组描述的链表叫做静态链表,也叫游标实现法。

数组的元素都是由两个数据域组成,data和cur。即数组的每个下标都对应一个data和一个cur。数据域data,用来存放数据元素,是我们

要处理的数据;游标cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。

4、已知带有头结点的循环链表中头指针为head,试写出删除并释放数据域值为x的所有结点的DelNode函数。


typedef struct node
{
	int data;
	struct node *next;
} Node;
//删除结点的数据域值为x的结点
void DelNode(Node *head,int x)
{
	Node *p,*q,*s;
	p = head;
	q = p->next;
	while(q!=head)
	{
		if(q->data==x)
		{
			p->next=q->next;
			s=q;
			q=q->next;
			free(s);
		}
		else //不相等,向后移动
		{
			p=q;
			q=q->next;
		}
	}
}

5、某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。


现出库(销售)m台价格为h的电视机,试编写算法修改原链表。

typedef struct node
{
	float price; //价格
	int num; //数量
	struct node *next;
} Node;
//销售m台价格为h的电视机
void DelNode(Node * head,float h,int m)
{
	Node *p,*q,*s;
	p = head;
	q = p->next;
	int i=0;
	while(q->pricenext;		
	}
	if(q->price==h&&q->num>=m)
	{
		q->num=q->num-m;
		if(p->num==0)
		{
			p->next=q->next;
			free(q);
		}
	}
	else if(q->price==h&&q->num<m)
	{
		cout<<"此价格的产品不足%d台。"<<m<<endl;
	}
	else 
	{
		cout<<"无此产品。"<<endl;
	}
}






本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭