C++链表的实现以及操作

单链表操作函数C++实现 最近在学习数据结构的链表,包括链表的创建、查询、删除等各种操作,刚开始接触,肯定有某些没发现的错误,欢迎大家指出来。 好了,不说废话了,直接上代码 首先是单链表的.H文件 #pragma once typedef int DataType; #define Node ElemType //定义节点 class Node { public: int value; Node* nex... 阅读详情

链表的声明:

typedef struct node{
	int data;
	node* next;
}Node,*PNode;

 注意:(1).next是指针域,存放下一个节点的存储位置

(2).使用*PNode可以直接使用PNode p定义指针,不需要每一次都Node*p

链表创建:

PNode creat(){
	int len;
	int value;
PNode PHead=(PNode)malloc(sizeof(Node));
PNode PTail=PHead;
PTail->next=NULL;
printf("请输入节点个数:");
scanf_s("%d",&len);
for(int i=0;i<len;i++){
	PNode PNew=(PNode)malloc(sizeof(Node));
	printf("第%d个节点的值:",i+1);
	scanf_s("%d",&value);
	PNew->data=value;
	PTail->next=PNew;
	PNew->next=NULL;
	PTail=PNew;
}
printf("创建链表成功!");
return PHead;
}

注意:(1).尾指针的next是NULL要定义,要不然下面的while循环不会终止

(2).使用PNode PNew=(PNode)malloc(sizeof(Node))申请新节点,sizeof(Node)测算Node类型节点需占用的字节数,(PNode)用来进行类型转换,使malloc函数返回一个新的指向Node节点类型的指针,并把该指针赋给PNew

链表遍历:

void list(PNode List){
	PNode P = List->next;  
    printf("遍历链表的值为:");
    if (P == NULL)
        printf("链表为空");
    while (P != NULL)     
    {
		printf("%d ", P->data);
        P = P->next;
    }
    printf("\n");
}

链表查找:

PNode find(PNode list){
	PNode p=list->next;
	int value=0;
	int i=0;
	printf("请输入要查询的值");
	scanf_s("%d",&value);
	while(p!=NULL&&p->data!=value){
	i++;
	p=p->next;
	}
	if(p!=NULL){
	printf("该节点位置:%d",i+1);
	}else{
		printf("找不到该节点");
	}
	return p;
}

注意:(1).c语言定义局部int变量,一定要赋予初值,要不然会自动生成随机数字,而全局int变量初值为0

(2).while循环里面写条件,要取p->data,一定要先保证p不能为空

(3).当跳出while循环,要么就是找不到(p==NULL)要么就是找到(p->data==value),此时需要在下面多个一个if语句,判断p不为空,即找到

链表插入:

void insert(PNode list,int pos,int value){
	PNode p=list->next;
	int i=0;
	while(p!=NULL){
		i++;
		if(i==pos-1){
		break;
		}
        p=p->next;
	}
	PNode PTemp=(PNode)malloc(sizeof(Node));
	PTemp->data=value;
	PTemp->next=p->next;
	p->next=PTemp;
}

注意:(1).c语言定义局部int变量,一定要赋予初值,要不然会自动生成随机数字,而全局int变量初值为0

(2).while循环里面写条件,要取p->data,一定要先保证p不能为空

(3).要在第i个元素之前插入一个新元素,需要先找到第i-1个节点的位置

删除整个链表:

void deleteAllList(PNode list){
	PNode PTemp,p;
	p=list;
	while(p!=NULL){
		PTemp=p->next;
		free(p);
		p=PTemp;
	}
	printf("删除链表成功!");
}

注意:(1).删除整个链表,要连同头指针要删除掉

(2).要先把p->next存储,要不free(p)后,就找不到p->next,以至于不能循环移动删除节点

删除链表的指定节点:

void deleteList(PNode list,int pos){
	PNode p=list->next;
	int i=0;
	while(p!=NULL){
	i++;
	if(i==pos-1){
	break;
	}
	p=p->next;
	}
	PNode temp=p->next;
	p->next=temp->next;
	free(temp);
}

注意:(1).删除第i节点,同样也要先获取第i-1个节点

(2).同样,也要把p->next先存储,如果使用p->next=p->next->next,等会free(p->next),就会出错,此时的p->next不是一开始的那个

完整代码:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct node{
	int data;
	node* next;
}Node,*PNode;
PNode creat();
void list(PNode PHead);
PNode find(PNode list);
void insert(PNode list,int pos,int value);
void deleteAllList(PNode list);
void deleteList(PNode list,int pos);
int main(){
PNode PHead=creat();
list(PHead);
find(PHead);
insert(PHead,2,5);
deleteList(PHead,3);
deleteAllList(PHead);
system("pause");
return 0;
}
PNode creat(){
	int len;
	int value;
PNode PHead=(PNode)malloc(sizeof(Node));
PNode PTail=PHead;
PTail->next=NULL;
printf("请输入节点个数:");
scanf_s("%d",&len);
for(int i=0;i<len;i++){
	PNode PNew=(PNode)malloc(sizeof(Node));
	printf("第%d个节点的值:",i+1);
	scanf_s("%d",&value);
	PNew->data=value;
	PTail->next=PNew;
	PNew->next=NULL;
	PTail=PNew;
}
printf("创建链表成功!");
return PHead;
}

void list(PNode List){
	PNode P = List->next;    
    printf("遍历链表的值为:");
    if (P == NULL)
        printf("链表为空");
    while (P != NULL)        
    {
		printf("%d ", P->data);
        P = P->next;
    }
    printf("\n");
}

PNode find(PNode list){
	PNode p=list->next;
	int value=0;
	int i=0;
	printf("请输入要查询的值");
	scanf_s("%d",&value);
	while(p!=NULL&&p->data!=value){
	i++;
	p=p->next;
	}
	if(p!=NULL){
	printf("该节点位置:%d",i+1);
	}else{
		printf("找不到该节点");
	}
	return p;
}
void insert(PNode list,int pos,int value){
	PNode p=list->next;
	int i=0;
	while(p!=NULL){
		i++;
		if(i==pos-1){
		break;
		}
        p=p->next;
	}
	PNode PTemp=(PNode)malloc(sizeof(Node));
	PTemp->data=value;
	PTemp->next=p->next;
	p->next=PTemp;
}

void deleteAllList(PNode list){
	PNode PTemp,p;
	p=list;
	while(p!=NULL){
		PTemp=p->next;
		free(p);
		p=PTemp;
	}
	printf("删除链表成功!");
}

void deleteList(PNode list,int pos){
	PNode p=list->next;
	int i=0;
	while(p!=NULL){
	i++;
	if(i==pos-1){
	break;
	}
	p=p->next;
	}
	PNode temp=p->next;
	p->next=temp->next;
	free(temp);
}

注意:(1).需要引入3个包

(2).system("pause");可以实现暂停,按任意键进行下一步,可以防止黑色窗口自动关闭,

C++实现单链表的16种基本操作 C++实现单链表的16种基本操作 链表初始化,头插法创建链表,尾插法创建链表,取值,查找(第i个节点的数据域或者数据域为某个特定值的节点),有顺序的合并两个链表,无顺序的合并两个链表,插入,删除,逆置链表,求链表的节点个数,删除数据域重复的节点,输出链表,判空,置空链表。 以下是我写的头文件的代码 #ifndef DANLIANBIAO_H #define DANLIANBIAO_H #endif #include<iostream> #include<stdio.h> #inclu 阅读详情

相关推荐

C++实现单链表的基本操作

C++实现单链表的基本操作 包含了单链表的创建、插入、删除、排序、输出等功能。 //C++实现单链表的基本操作 #include&lt;iostream&gt; #include&lt;algorithm&gt; using namespace std; #define ERROR 1; typedef int ElemType; typedef int Status; //定义单链表中每个节点...

yoko_tadzio的博客 1万+

C++实现链表

C++实现链表。本文介绍两种实现方法:一、使用指针自定义实现;二、使用C++ STL(标准模板库)中的list容器实现。

cnds123的专栏 6182

C++ 实现链表类(链表的各种操作)

Node.h: #ifndef NODE_H #define NODE_H template <class T> class Node { public: Node<T> *next; Node<T> *prev; T data; }; #endif //TEST1_NODE_H List.h: #ifndef LINK_...

zhouzzz000的博客 6万+

链表的实现(C++版)

对于链表的学习,之前在C语言部分的时候就已经有学习过,也学会了使用C语言来打造一个链表.如今学了C++ 则想通过C++来打造一个链表,以达到锻炼自己的目的.

Striveforsublime的博客 2572

C++实现链表的四个基本操作

链表的基本操作无非四种情况:1.创建链表;2.查找元素;3.插入元素;4.删除元素。下面对这四个操作用C++实现一波。已调试验证完毕,读者仔细领会!!! #include<stdio.h> #include<stdlib.h> struct node{ int data; node* next; }; //创建链表 node* create(int array[]...

bogedaye的博客 628

C++实现循环单链表的基本操作

领会循环单链表存储结构和掌握循环单链表中的各种基本运算算法设计,实现循环单链表的各种基本运算和整体建表算法。

henry594xiaoli的博客 6978

C语言/C++实现链表的详细教程

链表是一种常用的数据结构,它由一系列节点组成,每个节点包含两部分内容:数据和指向下一个节点的指针,最后一个节点指向空。链表的节点可以动态添加和删除,因此可以方便地进行插入、删除等操作。链表有多种类型,包括单向链表、双向链表和循环链表等。

qq_43884946的博客 1万+

Yolov5s可视化网络结构图

Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:点击查看 ...

江南研习社 15万+

链表基础【C++实现】

链表的定义以及基本操作

weixin_41930950的博客 3762

QGC二次开发实战指南(一):从零构建自定义地面站界面

本文详细介绍了QGC二次开发实战指南,从零开始构建自定义地面站界面。通过QT和QML技术结合MAVLINK协议,开发者可以打造适合特定业务场景的无人机监控系统,提升操作效率与用户体验。文章包含环境搭建、界面设计、数据绑定等完整开发流程,是QGC二次开发的实用教程。

weixin_28693683的博客 496

微信小程序返回按钮的隐藏玩法:用onShow实现数据自动刷新(附完整代码)

本文深入探讨了微信小程序中用户点击返回按钮后,如何利用onShow生命周期函数实现页面数据的自动刷新。文章对比了onLoad与onShow的差异,提供了从基础的本地存储标记到进阶的EventChannel事件通信,再到状态管理库的多种解决方案,并附有完整的代码示例,帮助开发者构建流畅的用户体验。

agile9scrum的博客 925

数据结构——链表(C++代码实现)

链表的介绍 链表是由元素之间互相依赖,串联而成的。链表存储的每一个元素,都是由数据域和指针域两部分组成,称为链表的一个结点。数据域存储数据,指针域存储下一结点的地址。 链表的特点 链表的内存空间是不连续的,这导致链表无法做随机访问的操作,获取数据只能从头往后遍历;数组与链表相比,不是查询快,而是数组可以随机访问,很多人会把查询和随机访问混淆了,查询是查找存储的特定数据,随机访问是访问指定位置的内容。 链表的实现 下面来用C++代码实现链表的构建、插入、遍历、删除功能。 1.单链表 #include <

m0_47965537的博客 3017

02-基于ART-PI开发板创建USB CDC 虚拟串口设备

本例在ART-PI开发板上,基于RT-Thread 5.0,5虚拟了一个USB32 CDC串口设备。

arm_fan的专栏 1886

链表的基本操作C++实现

头文件ListNode.h struct ListNode{ int m_nValue; ListNode* m_pNext; }; // 用于声明导入导出函数 // __declspec(dllexport) 声明一个导出函数,一般用于dll中 // __declspec(dllimport) 声明一个导入函数,一般用于使用某个dll的exe中 __declspec(dlle...

hiahia28的博客 471

Matlab图像处理频域滤波实现——高斯低通、高通、带通带阻滤波器

如果你想要进一步了解更多的相关知识,

小嘤熊的博客 1万+

深度学习论文: Cultivated Land Extraction from High-Resolution Remote Sensing Image

深度学习论文: Cultivated Land Extraction from High-Resolution Remote Sensing Image The Winning Solution to the iFLYTEK Challenge 2021 Cultivated Land Extraction from High-Resolution Remote Sensing Image PDF: https://arxiv.org/pdf/2202.10974.pdf PyTorch代码: https:

mingo_敏 3481

C++实现单链表基本操作

C++实现单链表基本操作 本博客按照上篇博客线性表单链表的基本操作而写出的完整代码,详情请看单链表基础概念 #include<iostream> using namespace std; //函数结果状态代码 #define OK 1 #define ERROR 0 typedef int Status; // Status 相当于 int typedef ...

diviner_s的博客 5758

基于YOLO26深度学习框架的人脸识别门禁系统的算法研究实现方法

本文研究了基于YOLO26深度学习框架的人脸识别门禁系统实现方法。系统采用YOLO26目标检测算法,通过CSPDarknet53主干网络、特征金字塔结构和注意力机制实现高效人脸检测。研究内容包括数据预处理、模型训练优化和身份验证等关键技术,使用迁移学习策略和CIoU损失函数提升检测精度。该系统可应用于智能安防场景,具有实时性强、识别准确的特点,为门禁管理提供了智能化解决方案。

一键难忘的博客 766

【链表】c++实现链表的各种操作

C++实现单链表(含完整代码) 使用C++实现单链表的基本操作 1、创建单链表 2、获取单链表的长度 3、获取单链表index位置的元素值 4、单链表index位置插入val 5、删除单链表index位置的元素 6、删除链表中值val的节点 7、打印单链表 8、销毁链表 完整代码: #include <iostream> using namespace std; //定义表结点的数据结构:数据 + 指针 struct ListNode { int val; ListNode*

yizhizainulii的博客 2462

91、Windows网络配置:动态更新与名称解析全攻略

本文全面解析了Windows XP Professional系统中的网络配置方法,重点介绍了动态更新和名称解析两大核心功能。动态更新部分涵盖DHCP客户端、静态配置客户端、远程访问客户端和多宿主客户端的配置方法,并提供禁用动态更新和编辑Hosts文件的注意事项。名称解析部分详细讲解了NetBIOS名称解析的基础知识、WINS配置方法、B节点广播与Lmhosts文件的使用,以及WINS代理的作用和配置要点。通过操作建议流程图和关键操作步骤回顾,帮助用户快速掌握网络配置的核心技巧,适用于不同网络环境的实际需求。

blue42的博客 234

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

利用C++实现双向链表的基本操作

本文采用利用C++实现了对双向链表的基本操作。操作包括:双向链表的构建、链表指定位置的插入、链表指定位置的删除、链表长度的获取、链表指定位置元素的获得及指定元素位置的获得、整体链表的删除。

weixin_43165699的博客 4336

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

链表常用操作--C++实现

一、头文件,每个结点包括数据和指针 #pragma once #include&amp;lt;iostream&amp;gt; struct Node { int data; Node *next; }; class Linlist { private: Node * Head; public: Linlist(); void CreatList1(int n); ...

六道的博客 271

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

c++ 实现双链表基本操作

#include #include #include #include /*c++实现双链表的基本操作*/ using namespace std; typedef struct student { int data; struct student *pre; struct student *next; }dnode; //创立链表 dn

cfan0801的专栏 5284

【链表】链表的定义以及基本操作的C++实现

链表的简单总结

m0_67341167的博客 1320

C++模板实现单链表基本操作

#ifndef LINKLIST_H #define LINKLIST_H #include <iostream> using namespace std; template <typename T> struct Node{ T data; struct Node* next; }; template <typename T> class...

starzyh的博客 1121
上一篇: js_ajax简单例子_基于json的实现
下一篇: C++双向循环链表的实现以及操作
h芃666
博客等级 码龄12年 39粉丝 159原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值