链表的基本操作之_增删改查

2024-08-23 23:08

本文主要是介绍链表的基本操作之_增删改查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<span style="font-size:32px;"><strong style="background-color: rgb(51, 255, 51);">链表的基本操作之_增删改查</strong></span>

#include<stdio.h>
#include<string.h>
#include<stdlib.h>typedef struct Node
{int data;struct Node *next;}SLIST;SLIST *Creat_SList();
int SList_Print(SLIST *pHead);
//在节点数值为x的前面插入y
int SList_NodeInsert(SLIST *pHead,int x,int y);
//删除节点为y的链表节点。
int SList_NodeDel(SLIST *pHead,int y);
//销毁链表
int SList_Destory(SLIST *pHead);SLIST *Creat_SList()
{//1.创建头结点并初始化SLIST *pHead =NULL;SLIST *pM=NULL;//辅助指针变量SLIST *pCur;//指向最后一个节点位置的指针int data=0;pHead=(SLIST*)malloc(sizeof(SLIST));pHead->data=0;pHead->next=NULL;//2循环创建结点,结点数据域中的数值从键盘输入
//以-1作为输入结束标志printf("please input the data of node(-1 quit)");scanf("%d",&data);//准备环境 让pCur指向pHeadpCur=pHead;//一开始链表的开始也是链表的结尾;while (data!=-1){//不断的malloc新节点,并且数据域赋值pM=(SLIST*)malloc(sizeof(SLIST));pM->data=data;pM->next=NULL;//不断地新节点进入链表//1.新节点入链表pCur->next=pM;//2.当前节点下移,(新节点变成当前节点)pCur=pCur->next;//如果合法,让用户再次输入需要插入的节点。printf("please input the data of node(-1 quit)");scanf("%d",&data);}return pHead;//一定要返回,不然在以后的输出,增删查改等操作就无法利用。
}<img src="https://img-blog.csdn.net/20150420192944110?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk4OTUzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />//链表的打印:int SList_Print(SLIST *pHead)
{SLIST *p=NULL;//辅助指针,让它移动,依次输出。if(pHead==NULL){return -1;}//准备环境p=pHead->next;printf("\nBegin");while(p){printf("%d",p->data);p=p->next;}printf("End");return 0;
}//销毁链表int SList_Destory(SLIST *pHead)
{//删除当前节点前,需要把后继节点位置缓存SLIST *pTem=NULL;SLIST *pCur=pHead;if(pHead==NULL){return -1;}while(pCur){//缓存后继节点位置pTem=pCur->next;//删除当前节点free(pCur);//当前节点下移pCur=pTem;}return 0;
}
<img src="https://img-blog.csdn.net/20150420193014499?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk4OTUzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
int SList_NodeInsert(SLIST *pHead,int x,int y)//在节点数值为x的前面插入y
{SLIST *pCur = NULL,*pPre=NULL,*pM=NULL;if(pHead==NULL){return -1;}//环境准备;pPre=pHead;pCur=pHead->next;//不断的malloc新节点,并且数据域赋值pM=(SLIST *)malloc(sizeof(SLIST));pM->data=y;//????pM->next=NULL;while(pCur){if(pCur->data==x){break;}//让pPre下移pPre=pCur;//两个节点同时下移//让当前节点下移pCur=pCur->next;}//让新节点链接后继节点pM->next=pPre->next;//让前驱节点连接pMpPre->next=pM;return 0;
}
<img src="https://img-blog.csdn.net/20150420192920984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk4OTUzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

//删除结点为y的链表结点
int SList_NodeDel(SLIST *pHead, int y)
{SLIST *pCur = NULL, *pPre = NULL;if (pHead == NULL){return -1;}//环境准备pPre = pHead;pCur = pHead->next;while(pCur){if (pCur->data == y){break;}//让pPre下移pPre = pCur;//让当前节点下移pCur = pCur->next;}if (pCur == NULL){printf("没有找到节点 y:%d", y);return -2;}//执行操作pPre->next = pCur->next;//让指针的指向越过将要删除的节点。free(pCur);return 0;
}
<img src="https://img-blog.csdn.net/20150420193118475?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk4OTUzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
int main()
{int ret = 0;SLIST *pHead = NULL;//创建 并打印 pHead = Creat_SList();ret = SList_Print(pHead);//插入操作ret = SList_NodeInsert(pHead, 20, 19);ret = SList_Print(pHead);ret = SList_NodeDel(pHead, 19);ret = SList_Print(pHead);ret = SList_Destory(pHead);return 0;
}

这篇关于链表的基本操作之_增删改查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100760

相关文章

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-

建立升序链表

题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2744 解决:1186 题目描述: 建立一个升序链表并遍历输出。 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。 样例输

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

08 增删查功能

划重点: lable 标签keyup:键盘事件标签内添加样式:style使用事件修饰符:preventforEach :遍历 数组indexOf: 可以返回要查询的某个字符串值在整个字符串中首次出现的位置下标findIndex:返回传入一个测试条件(函数)符合条件数组的首个元素的位置splice:向/从数组中添加/删除项目,然后返回被删除后的新的项目数组 黑椒蟹 一对: <!DOCTYPE

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。 示例 1: 输入: nums = [1,2,3], head = [1,2,3,

c++ 链表详细介绍

链表是数据结构的一种,由节点组成,每个节点包含数据和指向下一个节点的指针。链表在C++中的实现可以是单链表、双链表或循环链表。以下是链表的详细介绍: 1. 单链表 结构: 节点(Node):每个节点包含数据和一个指针(next),指向链表中的下一个节点。 示例结构: struct Node {int data;Node* next;Node(int d) : data(d), next(

MongoDB学习—(3)shell的基本操作

一,删除数据库中的集合文档 命令为 db.[documentName].drop() 二,删除数据库 命令为 db.dropDatabase() 执行该命令时,应该先进入想要删除的数据库中,如 三,shell中的help 我们可以运用shell中的help来查询相关的操作,查询数据库相关的就用db.help(),查询集合相关的就用db.[documentName].help