链式线性表实现

线性表的链式存储结构的实现 #include #include #include using namespace std; typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LinkList; LinkList *p, *q, *L; //链表的初始化,创建一个带头结点的 阅读详情

1.链式线性表头文件

#ifndef _LINK_LIST_H
#define _LINK_LIST_H 

//定义一个节点
typedef struct _tag_LinkListNode
{
	_tag_LinkListNode *next; 

}LinkListNode;

//定义一个链表@1链表包含一个头部节点@ 包含链表的长度
typedef struct _LinkList
{
	LinkListNode Head;
	int nLen;//长度
}LinkList;

LinkList *linkList_Create();

int  linkList_Insert(LinkList *pList,int nPos,LinkListNode *pNode);

int linkList_Length(LinkList* pList);

LinkListNode* linkList_Get(LinkList* pList,int nPos);

LinkListNode* linkList_Del(LinkList* pList,int nPos);

void linkList_Destroy(LinkList *pList);

void linkList_Clear(LinkList* pList);


#endif //_LINK_LIST_H

2.链式线性表源文件

#include "LinkList.h"
#include <iostream>

using namespace std;

LinkList * linkList_Create()
{
	LinkList *pList=new LinkList;
	if (pList==NULL)
	{
		cout<<" linkList_Create() is error "<<endl;
		return NULL;
	}

	memset(pList,0,sizeof(LinkList));
	pList->nLen=0;
	pList->Head.next=NULL;
	return pList;
}

int linkList_Insert(LinkList *pList,int nPos,LinkListNode *pNode)
{
	if (pList==NULL||nPos<0||pNode==NULL)
	{
		cout<<" linkList_Insert() parameter is error "<<endl;
		return -1;
	}
	//插入一个元素

	//定义一个头节点
	LinkListNode *current=NULL;
	current=(LinkListNode*)&pList->Head;
	for (int i=0;i<nPos;i++)
	{
		current=current->next;
	}

	//工两步操作
	pNode->next=current->next;//currents->next赋值为pNote->next

	current->next=pNode;//将pNode节点赋值给currentNext节点

	pList->nLen++;

	return 0;

}

int linkList_Length(LinkList* pList)
{
	if (pList==NULL)
	{
		cout<<" linkList_Length() parameter is error "<<endl;
		return -1;
	}
	return pList->nLen;
	return 0;
}

LinkListNode* linkList_Get(LinkList* pList,int nPos)
{
	if (pList==NULL||nPos<0||nPos>linkList_Length(pList))
	{
		cout<<" linkList_Get() parameter is error "<<endl;
		return NULL;
	}

	LinkListNode *pCurrent=NULL;
	//pCurrent=(LinkListNode*)&pList->Head;
	pCurrent=(LinkListNode*)&pList->Head.next;
	

	for (int i=0;i<nPos;i++)
	{
		pCurrent=pCurrent->next;
	}
	return pCurrent->next;


	/*下面是测试用
	// 	LinkListNode *pCurrent1=NULL;
	// 	LinkListNode *pCurrent2=NULL;
	// 	pCurrent1=(LinkListNode*)&pList->Head;
	// 	pCurrent2=(LinkListNode*)&pList->Head.next;
	// 
	// 	cout<<"pCurrent1"<<pCurrent1<<endl;
	// 	cout<<"pCurren2"<<pCurrent2<<endl;
	*/
}

LinkListNode* linkList_Del(LinkList* pList,int nPos)
{
	if (pList==NULL||nPos<0||nPos>linkList_Length(pList))
	{
		cout<<" linkList_Del() parameter is error "<<endl;
		return NULL;
	}
	LinkListNode *pCurrent=NULL;
	pCurrent=(LinkListNode*)&(pList->Head);
	//LinkListNode* pNode=linkList_Get(pList,nPos);
	for (int i=0;i<nPos;i++)
	{
		pCurrent=pCurrent->next;
	}

	LinkListNode* pDelNode=pCurrent->next;

	pList->nLen--;

	return pDelNode;
}

void linkList_Destroy(LinkList *pList)
{
	if (pList==NULL)
	{
		cout<<" LinkList_Destroy() parameter is error "<<endl;
		return;
	}
	if (pList!=NULL)
	{
		delete pList;
	}
	pList=NULL;
}

void linkList_Clear(LinkList* pList)
{
	if (pList==NULL)
	{
		cout<<" linkList_Clear() parameter is error "<<endl;
		return;
	}

	pList->Head.next=NULL;
	pList->nLen=0;
}
3.链式线性表 测试框架

#include <iostream>
#include "LinkList.h"
using namespace std;


typedef struct _Teacher
{
	LinkListNode node;
	char name[64];
	int nAge;
}Teacher;

int main()
{
	LinkList *pList=linkList_Create();
	if (pList==NULL)
	{
		cout<<"create LinkList Fail"<<endl;
		return -1;
	}

	Teacher t1,t2,t3;
	t1.nAge=10;
	strcpy(t1.name,"小李");

	t2.nAge=11;
	strcpy(t2.name,"小张");

	t3.nAge=12;
	strcpy(t3.name,"小刘");

	int nRect=linkList_Insert(pList,0,(LinkListNode*)&t1);

	 nRect=linkList_Insert(pList,1,(LinkListNode*)&t2);

	 nRect=linkList_Insert(pList,2,(LinkListNode*)&t3);

	 int nLen=linkList_Length(pList);
	 cout<<"共"<<nLen<<"节点"<<endl;

	 for (int i=0;i<nLen;i++)
	 {
		Teacher *pteacher= (Teacher*)linkList_Get(pList,i);
		if (pteacher==NULL)
		{
			return -1;
		}

		cout<<pteacher->name<<" "<<pteacher->nAge<<endl;
	 }

	 cout<<"删除节点"<<endl;
	 while(linkList_Length(pList)>0)
	 {
		 linkList_Del(pList,0);
	 }
	  nLen=linkList_Length(pList);
	 cout<<"共"<<nLen<<"节点"<<endl;

	 for (int i=0;i<nLen;i++)
	 {
		 Teacher *pteacher= (Teacher*)linkList_Get(pList,i);
		 if (pteacher==NULL)
		 {
			 return -1;
		 }

		 cout<<pteacher->name<<" "<<pteacher->nAge<<endl;
	 }
    return 0;
}



线性表的实现(链式存储) 线性表的实现1.结构体定义-链式2.表长3.查找(按序号)4.查找(按值)5.插入6.删除7.打印整表测试完整代码 1.结构体定义-链式 typedef struct LNode { ElementType Data; struct LNode* next; }*List; List PtrL; 或者 typedef struct LNode *List; struct LNode ... 阅读详情

相关推荐

C++实现链式线性表的类方式详细教程

节点是链式线性表的基本单元,它通过指针与其他节点相连,形成一个链表。在C++中,节点通常由一个类来实现。节点的数据成员包含两部分:存储数据的部分和链接其他节点的部分。下面是一个典型的节点类定义:private:int data;// 存储数据部分Node* next;// 链接其他节点的部分public:// 构造函数、析构函数以及其他成员函数的声明将放在公有部分其中,data成员用于存储链表节点的实际数据,类型可以是整型、浮点型、字符型或用户定义的复杂类型。next。

weixin_34535286的博客 743

C语言Link_List简单实现

C语言Link_List简单实现,不做线程控制 Link_List.h /**************************************************************************** 作者:代浩然 时间:2017-8-2 该文件定义为非线性链表相关的实现 线性链表的特性: 1、在内存中的存放地址是非连续的,随机分配 优点: 1、由于地址的非连

lengyue2015的博客 1万+

图解链表 —— JAVA中的单链表基本操作

文章目录1. 什么是链表2. 链表的种类3. 创建单链表3.1 创建 Node 类(车厢类)3.2 创建 MySingleList (火车类)4. 单链表的基本操作4.1 增加链表元素4.1.1 在链表头部添加元素4.1.2 在链表任意位置添加元素4.1.3 在链表尾部添加元素4.2 删除链表元素4.2.1 删除第一个节点元素4.2.2 删除任意位置 index 元素4.2.3 删除链表中指定元素的第一个节点4.2.4 删除链表的所有指定元素4.3 查找链表元素4.3.1 判断链表中是否包含元素 data4

AlinaQ05的博客 2501

数据结构 链式线性表的构建(C语言)

//线性链表结构 typedef struct Node { int data; struct Node *next; }Node; typedef struct LinkedList { Node* head_node; Node* current_node; }LinkedList; //初始化 LinkedList* Init_Linked() { LinkedList *ll = malloc(sizeof(LinkedList)); Node *head_node=malloc(s

櫆溟的博客 773

RKNN3588——YOLOv8的PT模型转RKNN模型

1. 首先克隆rknn修改后的ultralytics版本项目到本地主要是修改了源码的ultralytics/nn/modules/head.py和ultralytics/engine/exporter.py两个文件。2. 使用修改后的ultralytics对pt模型进行模型转换,此处的format=rknn代表支持rknn后续的转换,而不是用onnx,一定要注意!!!

张飞飞的博客 7172

Unity URP项目里Post Processing死活没效果?别急,这5个坑我帮你踩过了

本文详细解析了Unity URP项目中Post Processing效果不显示的5个常见问题及解决方案,包括管线配置、Volume设置、摄像机选项、Layer冲突和Shader兼容性。通过专业排查步骤和实用代码片段,帮助开发者快速定位并修复后处理效果失效问题,提升项目开发效率。

weixin_28693309的博客 233

线性表-链式结构

昨天在学习顺序结构的内容时感觉并不难,但是你会在编写代码的时候发现他的结构的弊端 只要是扩容,或者中间插入,那么你必须把数组拷贝来拷贝去的麻烦 昨天在测试一千万还是五千万的时候,由于需要分配内存空间,直接涨上1G的使用空间,如果你电脑没有这个内存富余,那么分配空间很可能会会失败掉 为了克服上面的问题,那么我们今天来学习饿线性表的链式结构 什么...

weixin_34019144的博客 205

【异常】插入Milvus时出现无法插入的情况提示io.milvus.exception.ParamException: The field: meta is not provided.

在使用 Milvus 进行向量搜索时遇到 io.milvus.exception.ParamException: The field: meta is not provided 错误通常意味着在创建集合(Collection)或者插入数据(Insert)时,某些必需的元数据字段没有被正确提供。检查集合创建,确保在创建集合时,你已经定义了所有必需的字段,并且正确地使用了 SchemaField 来定义这些字段。例如,如果你在创建集合时没有正确设置元数据字段,就会出现这个错误。请严格按照这个表结构创建。

奶爸的编程之路,也就一周冷个三天 924

线性表的链式结构创建与实现(一)

个人理解,仅供参考 创建链表的步骤: 1:创建头指针 2:将头指针指向空,防止野指针 3:将新的指针移动到头指针(我习惯认为是将头指针赋值给它) 4:建立新结点 5:让新指正指向空,防止野指针 6:给新指针赋值 7:让尾指针指向当前指针,实现链表的连接(我习惯认为是让上一指针指向它) 8:将尾指针移向当前指针(我习惯认为将当前指针赋值给它) ***每次创建新指针的时候都要将指针

ACM77的博客 1756

python中使用squarify包可视化treemap图:为treemap图添加标题并自定义标题的字体大小、自定义设置treemap中标签字体的大小、添加数值数值标签、自定义设置边框的色彩

python中使用squarify包可视化treemap图:treemap将分层数据显示为一组嵌套矩形自定义设置每一个数据格的颜色、添加数值数值标签、自定义设置边框的色彩、自定义设置边框线条的粗细、为treemap图添加标题并自定义标题的字体大小、自定义设置treemap中标签字体的大小

data+scenario+science+insight 1064

SE模块理解+SE-Resnet模块pytorch实现

文章目录SE模块理解SE实现注意力机制原因SE-resnet网络pytorch实现定义residual定义SE模块 SE模块理解 SENet是Squeeze-and-Excitation Networks的简称,拿到了ImageNet2017分类比赛冠军,其效果得到了认可,其提出的SE模块思想简单,易于实现,并且很容易可以加载到现有的网络模型框架中。SENet主要是学习了channel之间的相关性,筛选出了针对通道的注意力,稍微增加了一点计算量,但是效果比较好。 SE模块广泛应用于去噪,去雨方向,利用SE模

qq_42754919的博客 2万+

创建链式线性表

package com.base.java; public class LinkList {     //定义一个内部类Node,Node实例代表链表的节点     private class Node{         //保存节点的数据         private T data;         //指向下个节点的引用         private Node next;

lovezhaohaimig的博客 782

STM32入门教程:WiFi通信

第四步:初始化串口 在生成的代码中,您可以找到一个名为 "USARTx_Init" 的函数,其中 "x" 是您选择的串口号。然后,我们使用 "AT+CIPSEND" 命令发送UDP数据,接收到服务器的回复,并在终端上显示收到的数据。在配置向导中,您可以选择启用USART串口功能,并根据您的硬件连接,将串口设置为与WiFi模块连接的串口。在上述代码中,我们使用了 "HAL_UART_Receive" 函数来接收串口数据,并使用 printf 来在终端上显示收到的数据。如果有任何问题,请随时向我提问。

2401_85258012的博客 1074

链式线性表的java实现

链式线性表将采用一组地址任意的存储单元存放线性表中的数据元素。链式结构的线性表不会按线性的逻辑顺序保存数据元素,它需要在每一个数据元素里保存一个指向下一个数据元素的引用。 链式结构克服了顺序结构需要预先知道数据大小的缺点,可以充分利用计算机的内存空间,实现内存的动态分配。在插入和删除操作上,比顺序结构简单,但是失去了顺序结构的随机存取特性,并且由于每个节点增加了一个引用,所以空间开销也比较大。

小楼一夜听春雨 963

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

线性表的链式实现

用链式实现的线性表,公共接口ADT跟上一篇一样 1,有序链表 成员变量和构造函数: private LinearNode front;private int count; public LinkedOrderedList(){ front = null; count = 0; 实现清单(将ADT和有序链表扩展的独有操作分别作了注释): Li...

dianlu7964的博客 259

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

线性表的链式表示和实现

线性表的链式表示和实现

浮生若梦 为欢几何 1319

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

线性表--顺序和链式实现

要点 1.1线性表的基本概念 线性表是由n (n>= 0) 个数据元素(节点)a1,a2,a3, … an 组成的有限序列。 线性表中每个元素必须具有相同的结构(即拥有相同的数据项)。线性表是线性结构中最常用而又最简单的一种数据结构。比如表1.1就是一个线性表。 ​ 表1.1员工信息表 员工信息 姓名 年...

Austin_的博客 906

【数据结构】链式线性表的C语言代码实现(包括两表合并)

V家镇楼!!! ps.(我知道程序员中二次元的很少,但还是想要找到和我志同道合的人, 所以我之后的博客中都会有一张图片,不喜欢可以略过) 这次是链式线性表的实现代码,其中涉及到线性表的基本操作和两个线性表的合并。 以下是代码以及代码的使用情况演示。 #include <stdio.h> #include <malloc.h> #include <windows.h&...

weixin_43922093的博客 2952

C++链式线性表的代码实现

C++链式线性表的代码实现 1.结构体定义 typedef struct Node { ElemType data; //单链表中的数据域 struct Node *next; //单链表的指针域 }Node, *LinkList;//LinkList为指向结构体Node的指针 2.单链表的初始化 单链表的初始化——构造一个空表。下面是代码: int InitList(...

Wannna的博客 985

线性表--链式实现方式

清明节感冒了,休息了几天。前面实现了顺序方式的线性表,这篇文章笔者会简单的实现          链式方式的线性表。                     在实现之前首先需要对其线性表的链式方式的特点做一个了解:             通俗的讲链式线性表就是元素之间逻辑相邻但是物理位置不一定相邻,那么既然物理位置不相邻             又是如何来体现其逻辑位置的呢?其逻辑关系是

LCore的专栏 2278

线性表的链式存储与实现

本文介绍线性表的链式存储与实现,包括通过单链表实现和双向链表的实现

Gavin 3045

带头结点的线性表的链式实现

复习了顺序实现后,自己模仿着写了链式实现 /** * @author lirui 带头结点的线性表的链式实现 */ public class MyLinkList { // 内部类LNode,代表链表结点 class LNode { private T data; private LNode next; public LNode() { } public LNod

Ray的专栏 944

线性表——链式存储实现

什么是链式存储: 1:用一组任意的存储单元存储线性表的数据元素,这组存储单元可以存在内存中未被占用的任意位置。 2:链式存储结构中,除了要存储数据元素信息外,还要存储它的后继元素的存储地址(指针)。 3:存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。这两部分信息组成数据元素称为存储映像,称为结点(Node)。 单链表的删除插入操作: 代码实现:查找,初始化,插入,删除—操作实现 /*srand(time(0))?;//先设置种子 rand();//然后产生随机数 Srand是种下

qq_44923545的博客 657

线性表的顺序和链式实现

这里,如果是指针型,则使用L->data[i],引用型则使用L.data[i];在最后,是指针型结构体和普通结构体的区别。值得一提的是,使用指针必须使用。而不能使L->NULL;这样无法进行后续操作。线性表的顺序实现基于数组完成,比较简单。

qq_73882414的博客 169
上一篇: C++中替代sprintf的std::ostringstream输出流详解
下一篇: 链式线性表C++ 实现
ToConnection
博客等级 码龄16年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值