前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构——链表

数据结构——链表

原创
作者头像
ruochen
修改2021-06-28 10:37:05
5960
修改2021-06-28 10:37:05
举报

链式存储结构

  • 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻有关术语
  • 结点:数据元素的存储映像。由数据域和指针域两部分组成 - 数据域:存储元素数值数据 - 指针域:存储直接后继结点的存储位置
  • 链表:n 个结点由指针链组成一个链表。它是线性表的链式存储映像,称为线性表的链式存储结构 - 单链表 - 结点只有一个指针域的链表,称为单链表或线性链表 - 双链表 - 有两个指针域的链表,称为双链表 - 循环链表 - 首尾相接的链表称为循环链表
  • 头指针 - 指向链表中第一个结点的指针
  • 首元结点 - 指链表中存储第一个数据元素a1的结点
  • 头结点 - 在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息 - 设置头结点的好处 - 便于首元结点的处理 - 首元结点的地址保存在头结点的指针域中,所以在链表的第一个位置上的操作和其它位置一致,无须进行特殊处理; - 便于空表和非空表的统一处理 - 无论链表是否为空,头指针都是指向头结点的非空指针,因此空表和非空表的处理也就统一了。

链表的特点

  • 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻
  • 访问时只能通过头指针进入链表,并通过每个结点的指针域向后扫描其余结点,所以寻找第一个结点和最后一个结点所花费的时间不等

链表的优缺点

  • 优点 - 数据元素的个数可以自由扩充 - 插入、删除等操作不必移动数据,只需修改链接指针,修改效率较高
  • 缺点 - 存储密度小 - 存取效率不高,必须采用顺序存取,即存取数据元素时,只能按链表的顺序进行访问(顺藤摸瓜)

顺序表和链表的比较

存储结构比较项目

顺序表

链表

存储空间

预先分配,会导致空间闲置或溢出现象

动态分配,不会出现存储空间闲置或溢出现象

存储密度

不用为表示结点间的逻辑关系而增加额外的存储开销,存储密度等于1

需要借助指针来体现元素间的逻辑关系,存储密度小于1

存取元素

随机存取,按位置访问元素的时间复杂度为O(1)

顺序存取,按位置访问元素时间复杂度为O(n)

插入、删除

平均移动约表中一半元素,时间复杂度为O(n)

不需移动元素,确定插入、删除位置后,时间复杂度为O(1)

适用情况

① 表长变化不大,且能事先确定变化的范围 ② 很少进行插入或删除操作,经常按元素位置序号访问数据元素

① 长度变化较大 ② 频繁进行插入或删除操作

C++代码实现

代码语言:txt
复制
#include<iostream>
#include<stdlib.h>
using namespace std;

#define OVERFLOW -2
#define OK 1
#define ERROR -1

typedef int Status;
typedef int Elemtype;

/* typedef struct LNode{
	Elemtype data;
	struct LNode *next;
}LNode;

typedef struct{
	lnode *l;
}LinkList; */

typedef struct LNode {
	Elemtype data;
	struct LNode* next;
}LNode, * LinkList;


// 构造一个空的单链表
Status InitList(LinkList& L)
{
	L = new LNode; // 头指针L指向头结点
	if (!L) exit(OVERFLOW);
	L->next = NULL;  // 指针域置空
	return OK;
}

// 前插法创建单链表
void CreateList_H(LinkList& L, int n)
{
	LinkList p;
	int i;
	L = new LNode;  
	L->next = NULL;  // 先建立一个带头结点的空链表
	// for(i = 0; i < n; ++i)
	for (i = 1; i < n + 1; ++i)
	{
		cout << "请输入第" << i << "个结点的数据" << endl;
		p = new LNode;  // 生成新结点*p
		cin >> p->data;  // 输入元素赋值给新结点*p的数据域
		p->next = L->next;
		L->next = p; // 将新结点*p插入到头结点之后
	}
}


// 尾插法创建单链表
Status CreateList_L(LinkList& L, int n)
{
	LinkList r, p;
	int i;
	L = new LNode;
	L->next = NULL;
	// 尾结点指向头结点
	r = L;
	for (i = 1; i < n + 1; ++i)
	{
		cout << "请输入第" << i << "个结点的数据" << endl;
		p = new LNode;  // 生成新结点
		cin >> p->data;
		p->next = NULL;
		r->next = p;
		r = p;
	}
	return OK;
}

// 取值
Status GetElem(LinkList L, int i, Elemtype& e)
{
	// 根据序号i获取元素的值,用e返回值
	int j;
	LinkList p;
	for (p = L->next, j = 1; j < i && p; j++)
		p = p->next;
	if (!p || j > i) return ERROR;
	e = p->data;
	return OK;
}

// 在链表中查找值为e的元素的位置,返回其地址
LinkList LocateElem_L(LinkList L, Elemtype e)
{
	LinkList p;
	p = L->next;
	while (p && p->data != e)
	{
		p = p->next;
	}
	return p;
}

// 插入
Status ListInsert(LinkList& L, int i, Elemtype& e)
{
	LinkList p, s;
	int j;
	for (p = L, j = 0;j < i - 1 && p; j++)
		p = p->next;
	if (!p || j > i) return ERROR;
	s = new LNode;
	s->data = e;
	s->next = p->next;
	p->next = s;
	return OK;
}

// 删除
Status ListDelete(LinkList& L, int i, Elemtype& e)
{
	LinkList p, q;
	int j;
	for (p = L, j = 0;j < i - 1 && p; j++)
		p = p->next; 
	if (!p || j > i) return ERROR;
	q = p->next;
	p->next = q->next;
	e = q->data;
	delete q;
	return OK;
}

// 销毁
Status DestroyList(LinkList& L)
{
	LinkList p;
	while (L)
	{
		p = L;
		L = L->next;
		delete p;
	}
	return OK;
}

// 清空
Status ClearList(LinkList& L)
{
	LinkList p, q;
	p = L->next; // p指向第一个结点
	while (p)  // 没到表尾
	{
		q = p->next;
		delete p;
		p = q;
	}
	L->next = NULL;  // 头结点指针域为空
	return OK;
}

// 求表长
int ListLength_L(LinkList L){
	// 返回L中数据元素的个数
	int i;
	LinkList p;
	p = L->next;  // p指向第一个结点
	i = 0;
	while (p)  // 遍历单链表,统计结点数
	{
		i++;
		p = p->next;
	}
	return i;
}

// 判断表是否为空
int ListEmpty(LinkList L) {
	// 若L为空,返回1;否则,返回0
	if (L->next)
		return 0;
	else
		return 1;
}

int main()
{
	LinkList L;
	Elemtype e;
	int i, n;

	// 创建链表测试
	cout << "请输入表长:";
	cin >> n;
	// 尾插法创建
	CreateList_L(L, n);

	cout << "表长为:";
	cout << ListLength_L(L) << endl;

	// 查找测试
	cout << "请输入您需要查找元素的位置:";
	cin >> i;
	GetElem(L, i, e);
	cout << e;

	// 删除测试
	cout << "请输入您要删除的元素的位置:";
	cin >> i;
	ListDelete(L, i, e);
	cout << e;

	return 0;
}

Python代码实现

  • SingleNode
代码语言:txt
复制
```python
代码语言:txt
复制
#!/usr/bin/env python
代码语言:txt
复制
# -*- coding: utf-8 -*-
代码语言:txt
复制
# @Date    : 2019-10-02 09:32:38
代码语言:txt
复制
# @Author  : Your Name (you@example.org)
代码语言:txt
复制
# @Link    : http://example.org
代码语言:txt
复制
# @Version : $Id$
代码语言:txt
复制
class SingleNode(object):
代码语言:txt
复制
	def __init__(self, item):
代码语言:txt
复制
		self.item = item
代码语言:txt
复制
		self.next = None
代码语言:txt
复制
class SingleLinkList(object):
代码语言:txt
复制
	def __init__(self):
代码语言:txt
复制
		self._head = None
代码语言:txt
复制
	def isEmpty(self):
代码语言:txt
复制
		return self._head == None
代码语言:txt
复制
	def length(self):
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		count = 0
代码语言:txt
复制
		while cur:
代码语言:txt
复制
			count += 1
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
		return count
代码语言:txt
复制
	def travel(self):
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		while cur:
代码语言:txt
复制
			print(cur.item, end=" ")
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
		print()
代码语言:txt
复制
		return None
代码语言:txt
复制
	def addFirst(self, item):
代码语言:txt
复制
		node = SingleNode(item)
代码语言:txt
复制
		node.next = self._head
代码语言:txt
复制
		self._head = node
代码语言:txt
复制
	def append(self, item):
代码语言:txt
复制
		node = SingleNode(item)
代码语言:txt
复制
		if self.isEmpty():
代码语言:txt
复制
			self._head = node
代码语言:txt
复制
		else:
代码语言:txt
复制
			cur = self._head
代码语言:txt
复制
			while cur.next:
代码语言:txt
复制
				cur = cur.next
代码语言:txt
复制
			cur.next = node
代码语言:txt
复制
	def insert(self, pos, item):
代码语言:txt
复制
		if pos <= 0:
代码语言:txt
复制
			self.addFirst(item)
代码语言:txt
复制
		elif pos > (self.length() - 1):
代码语言:txt
复制
			self.append(item)
代码语言:txt
复制
		else:
代码语言:txt
复制
			node = SingleNode(item)
代码语言:txt
复制
			count = 0
代码语言:txt
复制
			pre = self._head
代码语言:txt
复制
			# 数据从0开始
代码语言:txt
复制
			# 从1开始 应该为 pos - 2
代码语言:txt
复制
			while count < (pos - 1):
代码语言:txt
复制
				count += 1
代码语言:txt
复制
				pre = pre.next
代码语言:txt
复制
			node.next = pre.next
代码语言:txt
复制
			pre.next = node
代码语言:txt
复制
	def remove(self, item):
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		pre = None
代码语言:txt
复制
		while cur:
代码语言:txt
复制
			if cur.item == item:
代码语言:txt
复制
				if not pre:
代码语言:txt
复制
					self._head = cur.next
代码语言:txt
复制
				else:
代码语言:txt
复制
					pre.next = cur.next
代码语言:txt
复制
				break
代码语言:txt
复制
			else:
代码语言:txt
复制
				pre = cur
代码语言:txt
复制
				cur = cur.next
代码语言:txt
复制
	def search(self, item):
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		while cur:
代码语言:txt
复制
			if cur.item == item:
代码语言:txt
复制
				return True
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
		return False
代码语言:txt
复制
if __name__ == '__main__':
代码语言:txt
复制
	sll = SingleLinkList()
代码语言:txt
复制
	sll.addFirst(10)
代码语言:txt
复制
	sll.addFirst(20)
代码语言:txt
复制
	sll.append(30)
代码语言:txt
复制
	sll.travel()
代码语言:txt
复制
	sll.remove(10)
代码语言:txt
复制
	sll.travel()
代码语言:txt
复制
	print(sll.search(30))
代码语言:txt
复制
	print(sll.search(10))
代码语言:txt
复制
	sll.insert(2, 40)
代码语言:txt
复制
	sll.travel()
代码语言:txt
复制
	print(sll.length())
代码语言:txt
复制
	print(sll.isEmpty())
代码语言:txt
复制
	sll.insert(2, 50)
代码语言:txt
复制
	sll.travel()
代码语言:txt
复制
```
代码语言:txt
复制
	20 10 30 
代码语言:txt
复制
	20 30 
代码语言:txt
复制
	True
代码语言:txt
复制
	False
代码语言:txt
复制
	20 30 40 
代码语言:txt
复制
	3
代码语言:txt
复制
	False
代码语言:txt
复制
	20 30 50 40 
代码语言:txt
复制
	[Finished in 0.6s]
  • SingleCycLinkedList
代码语言:txt
复制
```python
代码语言:txt
复制
#!/usr/bin/env python
代码语言:txt
复制
# -*- coding: utf-8 -*-
代码语言:txt
复制
# @Date    : 2019-10-02 11:13:14
代码语言:txt
复制
# @Author  : Your Name (you@example.org)
代码语言:txt
复制
# @Link    : http://example.org
代码语言:txt
复制
# @Version : $Id$
代码语言:txt
复制
class SingleNode(object):
代码语言:txt
复制
	def __init__(self, item):
代码语言:txt
复制
		self.item = item
代码语言:txt
复制
		self._head = None
代码语言:txt
复制
class SingleCysLinkedList(object):
代码语言:txt
复制
	def __init__(self):
代码语言:txt
复制
		self._head = None
代码语言:txt
复制
	def is_empty(self):
代码语言:txt
复制
		return self._head == None
代码语言:txt
复制
	def length(self):
代码语言:txt
复制
		if self.is_empty():
代码语言:txt
复制
			return 0
代码语言:txt
复制
		count = 1
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		while cur.next != self._head:
代码语言:txt
复制
			count += 1
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
		return count
代码语言:txt
复制
	def travel(self):
代码语言:txt
复制
		if self.is_empty():
代码语言:txt
复制
			return
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		print(cur.item, end=" ")
代码语言:txt
复制
		while cur.next != self._head:
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
			print(cur.item, end=" ")
代码语言:txt
复制
		print()
代码语言:txt
复制
	def addFirst(self, item):
代码语言:txt
复制
		node = SingleNode(item)
代码语言:txt
复制
		if self.is_empty():
代码语言:txt
复制
			self._head = node
代码语言:txt
复制
			node.next = self._head
代码语言:txt
复制
		else:
代码语言:txt
复制
			node.next = self._head
代码语言:txt
复制
			cur = self._head
代码语言:txt
复制
			while cur.next != self._head:
代码语言:txt
复制
				cur = cur.next
代码语言:txt
复制
			cur.next = node
代码语言:txt
复制
			self._head = node
代码语言:txt
复制
	def append(self, item):
代码语言:txt
复制
		node = SingleNode(item)
代码语言:txt
复制
		if self.is_empty():
代码语言:txt
复制
			self._head = node
代码语言:txt
复制
			node.next = self._head
代码语言:txt
复制
		else:
代码语言:txt
复制
			node.next = self._head
代码语言:txt
复制
			cur = self._head
代码语言:txt
复制
			while cur.next != self._head:
代码语言:txt
复制
				cur = cur.next
代码语言:txt
复制
			cur.next = node
代码语言:txt
复制
			node.next = self._head
代码语言:txt
复制
	def insert(self, pos, item):
代码语言:txt
复制
		if pos<= 0:
代码语言:txt
复制
			self.addFirst(item)
代码语言:txt
复制
		elif pos > (self.length() - 1):
代码语言:txt
复制
			self.append(item)
代码语言:txt
复制
		else:
代码语言:txt
复制
			node = SingleNode(item)
代码语言:txt
复制
			cur = self._head
代码语言:txt
复制
			count = 0
代码语言:txt
复制
			while count < (pos - 1):
代码语言:txt
复制
				count += 1
代码语言:txt
复制
				cur = cur.next
代码语言:txt
复制
			node.next = cur.next
代码语言:txt
复制
			cur.next = node
代码语言:txt
复制
	def remove(self, item):
代码语言:txt
复制
		if self.is_empty():
代码语言:txt
复制
			return
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		pre = None
代码语言:txt
复制
		if cur.item == item:
代码语言:txt
复制
			# 删除第一个元素
代码语言:txt
复制
			if cur.next != self._head:
代码语言:txt
复制
				while cur.next != self._head:
代码语言:txt
复制
					cur = cur.next
代码语言:txt
复制
				cur.next = self._head.next
代码语言:txt
复制
				self._head = self._head.next
代码语言:txt
复制
			else:
代码语言:txt
复制
				# 只有一个元素
代码语言:txt
复制
				self._head = None
代码语言:txt
复制
		else:
代码语言:txt
复制
			pre = self._head
代码语言:txt
复制
			while cur.next != self._head:
代码语言:txt
复制
				if cur.item == item:
代码语言:txt
复制
					pre.next = cur.next
代码语言:txt
复制
					return
代码语言:txt
复制
				else:
代码语言:txt
复制
					pre = cur
代码语言:txt
复制
					cur = cur.next
代码语言:txt
复制
			if cur.item == item:
代码语言:txt
复制
				pre.next = cur.next
代码语言:txt
复制
	def search(self, item):
代码语言:txt
复制
		if self.is_empty():
代码语言:txt
复制
			return False
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		if cur.item == item:
代码语言:txt
复制
			return True
代码语言:txt
复制
		while cur.next != self._head:
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
			if cur.item == item:
代码语言:txt
复制
				return True
代码语言:txt
复制
		return False	
代码语言:txt
复制
if __name__ == '__main__':
代码语言:txt
复制
	ll = SingleCysLinkedList()
代码语言:txt
复制
	ll.addFirst(1)
代码语言:txt
复制
	ll.addFirst(2)
代码语言:txt
复制
	ll.append(3)
代码语言:txt
复制
	ll.insert(2, 4)
代码语言:txt
复制
	ll.insert(4, 5)
代码语言:txt
复制
	ll.insert(0, 6)
代码语言:txt
复制
	print("length: {0}".format(ll.length()))
代码语言:txt
复制
	ll.travel()
代码语言:txt
复制
	print(ll.search(3))
代码语言:txt
复制
	print(ll.search(7))
代码语言:txt
复制
	ll.remove(1)
代码语言:txt
复制
	print("length:", ll.length())
代码语言:txt
复制
	ll.travel()
代码语言:txt
复制
```
代码语言:txt
复制
	length: 6
代码语言:txt
复制
	6 2 1 4 3 5 
代码语言:txt
复制
	True
代码语言:txt
复制
	False
代码语言:txt
复制
	length: 5
代码语言:txt
复制
	6 2 4 3 5 
代码语言:txt
复制
	[Finished in 0.4s]
  • DLinkList ```python #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-10-02 12:10:18 # @Author : Your Name (you@example.org) # @Link : http://example.org # @Version : $Id$
代码语言:txt
复制
class Node(object):
代码语言:txt
复制
	def __init__(self, item):
代码语言:txt
复制
		self.item = item
代码语言:txt
复制
		self.next = None
代码语言:txt
复制
		self.prev = None
代码语言:txt
复制
class DLinkList(object):
代码语言:txt
复制
	def __init__(self):
代码语言:txt
复制
		self._head = None
代码语言:txt
复制
	def is_empty(self):
代码语言:txt
复制
		return self._head == None
代码语言:txt
复制
	def length(self):
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		count = 0
代码语言:txt
复制
		while cur:
代码语言:txt
复制
			count += 1
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
		return count
代码语言:txt
复制
	def travel(self):
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		while cur:
代码语言:txt
复制
			print(cur.item, end=" ")
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
		print()
代码语言:txt
复制
	def add(self, item):
代码语言:txt
复制
		node = Node(item)
代码语言:txt
复制
		if self.is_empty():
代码语言:txt
复制
			self._head = node
代码语言:txt
复制
		else:
代码语言:txt
复制
			node.next = self._head
代码语言:txt
复制
			self._head.prev = node
代码语言:txt
复制
			self._head = node
代码语言:txt
复制
	def append(self, item):
代码语言:txt
复制
		node = Node(item)
代码语言:txt
复制
		if self.is_empty():
代码语言:txt
复制
			self._head = node
代码语言:txt
复制
		else:
代码语言:txt
复制
			cur = self._head
代码语言:txt
复制
			while cur.next:
代码语言:txt
复制
				cur = cur.next
代码语言:txt
复制
			cur.next = node
代码语言:txt
复制
			node.prev = cur
代码语言:txt
复制
	def search(self, item):
代码语言:txt
复制
		cur = self._head
代码语言:txt
复制
		while cur:
代码语言:txt
复制
			if cur.item == item:
代码语言:txt
复制
				return True
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
		return False
代码语言:txt
复制
	def insert(self, pos, item):
代码语言:txt
复制
		if pos <= 0:
代码语言:txt
复制
			self.add(item)
代码语言:txt
复制
		elif pos > (self.length() - 1):
代码语言:txt
复制
			self.append(item)
代码语言:txt
复制
		else:
代码语言:txt
复制
			node = Node(item)
代码语言:txt
复制
			cur = self._head
代码语言:txt
复制
			count = 0
代码语言:txt
复制
			# 移动到指定位置的前一个位置
代码语言:txt
复制
			while count < (pos - 1):
代码语言:txt
复制
				count += 1
代码语言:txt
复制
				cur = cur.next
代码语言:txt
复制
			# 将node的prev指向cur
代码语言:txt
复制
			node.prev = cur
代码语言:txt
复制
			# 将node的next指向cur的下一个结点
代码语言:txt
复制
			node.next = cur.next
代码语言:txt
复制
			# 将cur的下一个结点的prev指向node
代码语言:txt
复制
			cur.next.prev = node
代码语言:txt
复制
			# 将cur的next指向node
代码语言:txt
复制
			cur.next = node
代码语言:txt
复制
	def remove(self, item):
代码语言:txt
复制
		if self.is_empty():
代码语言:txt
复制
			return
代码语言:txt
复制
		else:
代码语言:txt
复制
			cur = self._head
代码语言:txt
复制
			if cur.item == item:
代码语言:txt
复制
				if cur.next == None:
代码语言:txt
复制
					self._head = None
代码语言:txt
复制
			else:
代码语言:txt
复制
				cur.next.prev = None
代码语言:txt
复制
				self._head = cur.next
代码语言:txt
复制
			return
代码语言:txt
复制
		while cur:
代码语言:txt
复制
			if cur.item == itme:
代码语言:txt
复制
				cur.prev.next = cur.next
代码语言:txt
复制
				cur.next.prev = cur.prev
代码语言:txt
复制
				break
代码语言:txt
复制
			cur = cur.next
代码语言:txt
复制
if __name__ == '__main__':
代码语言:txt
复制
	ll = DLinkList()
代码语言:txt
复制
	ll.add(1)
代码语言:txt
复制
	ll.add(2)
代码语言:txt
复制
	ll.append(3)
代码语言:txt
复制
	ll.insert(2, 4)
代码语言:txt
复制
	ll.insert(4, 5)
代码语言:txt
复制
	ll.insert(0, 6)
代码语言:txt
复制
	print("length:", ll.length())
代码语言:txt
复制
	ll.travel()
代码语言:txt
复制
	print(ll.search(3))
代码语言:txt
复制
	print(ll.search(4))
代码语言:txt
复制
	ll.remove(1)
代码语言:txt
复制
	print("length: {}".format(ll.length()))
代码语言:txt
复制
	ll.travel()
代码语言:txt
复制
```
代码语言:txt
复制
	length: 6
代码语言:txt
复制
	6 2 1 4 3 5 
代码语言:txt
复制
	True
代码语言:txt
复制
	True
代码语言:txt
复制
	length: 5
代码语言:txt
复制
	2 1 4 3 5 
代码语言:txt
复制
	[Finished in 0.1s]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 链式存储结构
    • 链表的特点
      • 链表的优缺点
        • 顺序表和链表的比较
        • C++代码实现
        • Python代码实现
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档