IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构与算法---线性表---链表(MOOC) -> 正文阅读

[数据结构与算法]数据结构与算法---线性表---链表(MOOC)

线性表

链表

  • 通过指针把它的一串存储结点链接成一个链
  • 存储结点有两个部分组成:
    — 数据域+指针域(后继地址)
    data next

分类(根据链接方式和指针多寡)

  • 单链
  • 双链
  • 循环链表

单链表

简单的单链表

— 整个单链表:head
— 第一个结点:head
— 空表判断: head==NULL
— 当前结点a : curr

带头结点的单链表

  • 整个单链表:head
  • 第一个结点:head->next,head!=NULL
  • 空表判断:head->next=NULL
  • 当前结点a:fence->next(curr隐含)

单链表的结点类型

template<class T>
class Link {
public:
	T data;
	Link<T>* next;

	Link(const T info, const Link<T>* nextValue = NULL) {
		data = info;
		next = nextValue;
	}
	Link(const Link<T>* nextValue) {
		next = nextValue;
	}
};

单链表类定义

template<class T>
class LinkList :public List<T> {
private:
	Link<T>* head, * tail;					//单链表的头,尾指针
	Link<T>* setPos(const int k);			//第k个元素指针
public:
	LinkList(int s);						//构造函数
	~LinkList();							//析构函数
	bool IsEmpty();							//判断链表是否为空
	bool Clear();							//将链表存储的内容清除,成为空表
	int Length();							//返回此顺序表的的当前实际长度
	bool Append(const T value);				//表尾添加一个元素value,表的长度增1
	bool Insert(const int k, const T value);//位置k上插入一个元素
	bool Delete(const int k);				//删除位置k上的元素,表的长度减1
	bool GetValue(const int k, T& value);	//返回位置k的元素值
	bool GetPos(int& k, const T value);		//查找值为value的元素
};

查找单链表中第i个结点

//查找单链表中第i个结点
//查找返回值是找到的结点指针
template<class T>
Link<T>* LinkList<T>::setPos(int i) {
	int count = 0;
	if (i == -1) {
		return head;					//i为-1则定位到头结点
	}

	//循环定位,若i为0则定位到第一个结点
	Link<T>* k = head->next;
	while (k != NULL && count < i) {
		k = k->next;
		count++;
	}
	//指向第i结点,i=0,1,...,当链表中结点数小于i时返回NULL
	return k;
}

单链表的插入

  • 创建新结点
  • 新结点指向右边的结点
  • 左边结点指向新结点
//单链表插入算法
//插入数据内容为value的新结点作为第i个结点
template<class T>
bool LinkList<T>::Insert(const int i, const T value) {
	Link<T>* p, * q;
	if ((p = setPos(i - 1)) == NULL) {
		//p是第i个结点的前驱
		cout << "非法插入点" << endl;
		return false;
	}
	q = new Link<T>(value, p->next);
	p->next = q;
	if (p == tail) {					//插入点在链尾,插入结点成为新的链尾
		tail = q;
	}
	return false;
}

单链表的删除

  • 从链表中删除结点x
    — 用p指向元素x的结点的前驱结点
    — 删除元素为x的结点
    — 释放x占据的空间
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 12:27:46  更:2021-08-30 12:30:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:50:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码