数据结构-线性表-链表

这篇具有很好参考价值的文章主要介绍了数据结构-线性表-链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构-线性表-链表

线性表的定义:由n(n>=0)个数据特性相同的元素构成的有限序列,称为线性表。

1.数据类型声明

#include<iostream>

using namespace std;//使用std命名空间,省略后续代码中得到std::前缀

#define OK 1//定义一个宏,使用OK表示操作成功
#define ERROR 0//定义一个宏。使用ERROR表示操作失败
#define OVERFLOW -2//定义宏,表示溢出操作

typedef int Status;//重命名为status用于表示函数的返回状态
typedef int ElemType;//重命名为ElemType用于表示线性表数据元素类型

2.链表

typedef struct Node{
	ElemType data;
	struct Node *next;	
}Node,Link;

3.初始化

初始化只需要把头节点的next给进行初始化即可,data数据直接放空,变成头结点方便下面的数据操作。
也可以理解为放弃一部分空间,提高程序运行速度。文章来源地址https://www.toymoban.com/news/detail-718083.html

/**
 * @brief 初始化
 * 
 * @param pl 
 * 
 * @return 
 **/
Status init(Link* pl){
	pl->next=NULL;
	return OK;
}

4.插入

/**
 * @brief 插值
 * 
 * @param l 链表
 * @param i 位置
 * @param e 元素
 * 
 * @return 
 **/
Status LinkInsert(Link *l,int i,ElemType e){
	Link *p=l,*t;
	int j=0;
	while(p&&j<i-1){//把指针移动到要插入的位置
		//TODO
		p=p->next;
		j++;
	}
	if(!p||i<1){//i的合法性
		//TODO
		return ERROR;
	}
    //创建一个新结点放值,再把新节点放入链表中
	t=new Link;
	t->data=e;
	t->next=NULL;
	t->next=p->next;
	p->next=t;
	return OK;
}

5.取值

/**
 * @brief 取值 
 * 
 * @param h 
 * @param i 
 * 
 * @return 
 **/
ElemType GetElem(Link h,int i){
	Link *p=h.next;
	int j=1;
	while(j<i){//移动指针到要获取的结点
		p=p->next;
		j++;
	}
	return p->data;
}

6.查询

/**
 * @brief 查值 
 * 
 * @param h 
 * @param e 
 * 
 * @return 
 **/
int LocateElemTyp(Link h,ElemType e){
	Link *p=h.next;
	int i=1;
	while(p){//e是否在链表内
		//TODO
		if(p->data==e){
			//TODO
			return i;//也可以返回结点的地址
		}
		p=p->next;
		i++;
	}
	return ERROR;
}

7.删除

/**
 * @brief 删除元素 
 * 
 * @param h 
 * @param i 
 * 
 * @return 
 **/
Status deleteElem(Link *h,int i){
	Link *p=h,*t;
	
	for(int j=1;j<i;j++){//指向要删除结点的前一个结点
		//TODO
		if(p==NULL) return ERROR;
		p=p->next;
	}
	t=p->next;
	p->next=t->next;
	delete t;
	return OK;
}

8.测试

int main(){
	Link link;
	init(&link);
	ElemType e=0;
	cout<<"请输入5个需要放入的元素"<<endl;
	for(int i=1;i<=5;i++){
		//TODO
		cin>>e;
		LinkInsert(&link,i,e);
	}
	cout<<endl;
	cout<<"链表中的元素:";
	for(int i=1;i<=5;i++){
		//TODO
		cout<<"	"<<GetElem(link,i);
	}
	cout<<endl;
	cout<<"请输入要查找的数据:";
	cin>>e;
	cout<<LocateElemTyp(link,e);
	cout<<endl;
	cout<<"输入要删除元素的位置";
	int i;
	cin>>i;
	deleteElem(&link,i);
	cout<<endl;
	cout<<"链表中的元素:";
	for(int i=1;i<=5;i++){
		//TODO
		cout<<"	"<<GetElem(link,i);
	}
	return 0;
}

到了这里,关于数据结构-线性表-链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构(二)----线性表(顺序表,链表)

    目录 1.线性表的概念 2.线性表的基本操作 3.存储线性表的方式 (1)顺序表 •顺序表的概念 •顺序表的实现 静态分配: 动态分配: 顺序表的插入: 顺序表的删除: 顺序表的按位查找: 顺序表的按值查找: 顺序表的特点: (2)单链表 •单链表的实现 不带头结点的单链表

    2024年04月16日
    浏览(51)
  • 数据结构:线性表之-单向链表(无头)

    目录 什么是单向链表 顺序表和链表的区别和联系 顺序表: 链表: 链表表示(单项)和实现 1.1 链表的概念及结构 1.2单链表(无头)的实现 所用文件 将有以下功能: 链表定义 创建新链表元素 尾插 头插 尾删 头删 查找-给一个节点的指针 改 pos位置之前插入 删除pos位置的值 成品

    2024年02月09日
    浏览(63)
  • 5分钟学会数据结构中的线性链表

    除了一些算法之外,我们还要掌握一些常见的数据结构,比如 数组、链表、栈、队列、树等结构。 在之前的文章中,已经带着大家学习了Java里的一维数组和多维数组,所以对此我就不再细述了。 接下来我会给大家讲解一下线性结构中的链表,希望你能喜欢哦。 全文大约【

    2024年02月08日
    浏览(51)
  • 数据结构:线性表之-循环双向链表(万字详解)

    目录 基本概念 1,什么是双向链表 2,与单向链表的区别 双向链表详解 功能展示: 1. 定义链表 2,创建双向链表 3,初始化链表 4,尾插 5,头插 6,尾删 判断链表是否被删空 尾删代码 7,头删 8,pos位置之前插入 优化后的头插 优化后的尾插 9,删除pos位置的节点 优化后的尾删 优

    2024年02月09日
    浏览(49)
  • 数据结构第三课 -----线性表之双向链表

    🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉🎉🎉🎉🎉 🎂 🎂作者id:老秦包你会, 🎂 简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂 喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂

    2024年02月05日
    浏览(47)
  • 【数据结构篇】线性表1 --- 顺序表、链表 (万字详解!!)

    目录  顺序表(ArrayList) 什么是顺序表?  代码实现 (MyArrayList) --- 打印顺序表  --- 新增元素  1.新增元素,默认在数组最后新增 2.在指定位置新增元素  --- 判断是否包含某个元素 --- 查找某个元素具体位置(下标) --- 获取 pos 位置的元素 --- 给pos位置 的值设为 value  -

    2024年02月10日
    浏览(33)
  • 【数据结构】——线性表(顺序表加链表),万字解读(加链表oj详解)

    前言 由于之前存在过对两者的区别考虑,所以把他们放在一起来说,更加容易区别和理解 对于有关线性表的概念这里就不展示了,这里主要是介绍线性表里面的这两个结构的知识点 一.顺序表 1.顺序表介绍 顺序表的存储结构和逻辑结构都是相邻的, 这里如果我们把a1的地址

    2024年03月22日
    浏览(86)
  • 【数据结构篇C++实现】- 线性表 - 顺序表和链表

    友情链接:C/C++系列系统学习目录 故事导入: 幼儿园放学时,一个班级的小朋友,一个跟着一个排队出校,有一个打头,有一个收尾,当中的小朋友每一个都知道他前面和后面的一个是谁,就如同一根线把他们串联了起来。如此具有像线一样的性质的表就叫线性表 线性表(

    2024年02月07日
    浏览(54)
  • 【数据结构 | 入门】线性表与链表 (问题引入&实现&算法优化)

    🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 本文是浙大数据结构学习笔记专栏 这里我们引入一个问题,最常见的多项式,我们如何使用编程将多项式表示出来呢? 我们可以使用数组来表示,但是会随着一个问题,如下图底

    2024年01月21日
    浏览(67)
  • 【数据结构初阶】四、线性表里的链表(带头+双向+循环 链表 -- C语言实现)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】三、 线性表里的链表(无头+单向+非循环链表 -- C语言实现)-CSDN博客  ====

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包