这是一个关于数据结构 线性表的问题

想不明白数据结构线性表有什么意义,感觉有数组就够用了。为啥非要研究出来个线性表呢?数据实现还简单,也能封装增删查改的代码

线性表是数组的一个应用。
你的问题好比问
面包有什么意义,有面粉就行了。
线性搜索有什么意义,有for循环就行了。

线性表主要实现动态分配空间, 在实际空间不确定时很有用, 你不可能为一个不确定大小的
空间分配一个无限大的空间

您好,早期编译器不支持动态数组,比如C89就只支持静态数组,在编译的时
候须要知道数组大小。如果数组大小须要在程序运行时才能确认大小,就须要
用到线性链表。C99支持动态数组,但它们还是有一些区别和应用场景的。
线性表:属于逻辑结构中的线性结构,它包括顺序表和链表。
顺序表:线性表中的一种,它是用数组来实现的一种线性表,所以它的存储结构(物理结构)是连续的。
链表:线性表中的一种,它的存储结构是用任意一组存储单元来存储数据元素。所以它的存储结构可以是连续的,也可以不是连续的。
数组:一种物理结构,它的存储单元是连续的。
当内存中只有一些离散的可用空间时,想连续存储数据就困难了, 这时用链表解决问题。

线性表又叫 链表 ,是 动态储存 ;数组的储存方式叫 顺序储存

线性表主要解决的是空间问题,空间多少手动增加。

  • 线性表: 以时间换空间,就如你说用的麻烦,时间花费很多,但空间多少可以中途增加减少。
  • 数组: 以空间换时间,虽然用起来方便快捷,但开头必须开足够大的空间(还要注意爆内存),否则会出现不够用、越界。

提示一下: 其实把线性表的操作改成函数方便些。

数组:(int a[7] = {3,3331,-29,666,23456)
0x0100: 3
0x0104: 3331
0x0108: -29
0x010B: 666
0x010E: 23456
0x0111: 0
0x0115: 0
线性表:
//*head = new __Node;
//head->next = NULL;
//tail = head;
0x0100: { ;head,tail
 0x0100: 0 ;data
 0x0104: {0} ;__Node next = NULL;
}
/*
 ptr = new __Node;
 ptr->data = 666;
 ptr->next = NULL;
 tail->next = ptr;
 tail = ptr;
*/
0x....: { ;ptr
 0x....: 666 ;data
 [0x.... + 4]: {0} ;next
}

;然后将ptr接到tail后一个指向的位置。
;tail后移到ptr。

我上面举了个例子,当然RAM不会这么有顺序地分配内存。