数据结构_链表基本操作的实现_代码_例题

news2025/1/13 2:45:50

一、基本操作实现

1.按位序插入(带头节点)

2.按位序插入(不带头节点)

3.指定结点的后插操作

4.指定结点的前插操作

5.按位序删除(带头节点)

6.指定结点的删除

7.按位查找,返回第i个元素(带头结点)

8.按值查找

9.求表的长度

10.尾插法建立单链表

11.头插法建立单链表(可用于链表的逆置) 

二、例题

1.有序链表的合并,不允许有重复数据


一、基本操作实现

1.按位序插入(带头节点)

typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;

//按位序插入(带头节点)
bool ListInsert(LinkList &L,int i,ElemType e){
	if(i<1) return false;
	LNode *p;	//指针p指向当前扫描到的结点 
	int j = 0;	//当前p指向的是第几个结点 
	p = L;	//L指向头结点,头结点不存数据 
	while(p != NULL && j<i-1){
		p = p->next;
		j++;
	}
	if (p == NULL) return false;
	LNode *s = (LNode *)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	return true;
} 

2.按位序插入(不带头节点)

//按位序插入(不带头节点)
bool ListInsert(LinkList &L,int i,ElemType e){
	if(i<1) return false;
	if (i == 1){	//插入第1个结点的操作与其他结点不一样 
		LNode *s = (LNode *)malloc(sizeof(LNode));
		s->data = e;
		s->next = L;
		L = s;
		return true;
	} 
	LNode *p;	//指针p指向当前扫描到的结点 
	int j = 0;	//当前p指向的是第几个结点 
	p = L;	//L指向头结点,头结点不存数据 
	while(p != NULL && j<i-1){
		p = p->next;
		j++;
	}
	if (p == NULL) return false;
	LNode *s = (LNode *)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	return true;
} 

3.指定结点的后插操作

//指定结点的后插操作
bool InsertNextNode(LNode *p,ElemType e){
	if (p == NULL) return false;
	LNode *s = (LNode *)malloc(sizeof(LNode));
	if (s == NULL) return false;
	s->data = e;
	s->next = p->next;
	p->next = s;
	return true;
} 

4.指定结点的前插操作

思路:先后插将位置占住,然后再交换前后两个的结点的data。

//指定结点的前插操作
bool InsertNextNode(LNode *p,ElemType e){
	if (p == NULL) return false;
	LNode *s = (LNode *)malloc(sizeof(LNode));
	if (s == NULL) return false;
	s->next = p->next;
	p->next = s;
	s->data = p->data;
	p->data = e; 
	return true;
} 

5.按位序删除(带头节点)

//按位序删除(带头节点)
bool ListDelet(LinkList &L,int i,ElemType &e){
	if(i<1) return false;
	LNode *p;	//指针p指向当前扫描到的结点 
	int j = 0;	//当前p指向的是第几个结点 
	p = L;	//L指向头结点,头结点不存数据 
	while(p != NULL && j<i-1){
		p = p->next;
		j++;
	}
	if (p == NULL) return false;
	if (p->next == NULL) return false;
	LNode *q = p->next;
	e = q->data;	//用e返回删除元素的值 
	p->next = q->next;
	free(q);
	return true;
} 

6.指定结点的删除

//指定结点的删除
bool DeletNode(LNode *p){
	if (p == NULL) return false;
	LNode *q = p->next;
	p->data = p->next->data;
	p->next = q->next;
	free(q);
	return true;
} 

7.按位查找,返回第i个元素(带头结点)

//按位查找,返回第i个元素(带头结点)
LNode * GetElem(LinkList L,int i){
	if(i<0) return NULL;
	LNode *p;
	int j = 0;
	p = L;
	while(p != NULL && j<i){
		p = p->next;
		j++;
	}
	return p;
} 

8.按值查找

//按值查找
LNode * LocateElem(LinkList L,ElemType e){
	LNode *p = L->next;
	while(p != NULL && p->data != e){
		p = p->next;
	}
	return p;
} 

9.求表的长度

//求表的长度
int Length(LinkList L){
	int len = 0;
	LNode *p = L;
	while(p->next != NULL){
		p = p->next;
		len ++;
	}
	return len;
} 

10.尾插法建立单链表

//尾插法建立单链表
LinkList List_TailInsert(LinkList &L){
	int x;
	L = (LinkList)malloc(sizeof(LNode));
	LNode *s,*r = L;
	scanf("%d",&x);
	while(x != 9999){
		s = (LNode *)malloc(sizeof(LNode));
		s->data = x;
		r->next = s;
		r = s;
		scanf("%d",&x);
	}
	r->next = NULL;
	return L;
}

11.头插法建立单链表(可用于链表的逆置) 

//头插法建立单链表(可用于链表的逆置) 
LinkList List_HeadInsert(LinkList &L){
	LNode *s;
	int x;
	L = (LinkList)malloc(sizeof(LNode));
	L->next = NULL;	//初始为空链表 
	scanf("%d",&x);
	while(x != 9999){
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		s->next = L->next;
		L->next = s;
		scanf("%d",&x);
	}
	return L;
} 

二、例题

1.有序链表的合并,不允许有重复数据

#include<stdio.h>
#include<stdlib.h>

typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;

//尾插法建立单链表
LinkList List_TailInsert(LinkList &L){
	int x;
	L = (LinkList)malloc(sizeof(LNode));
	LNode *s,*r = L;
	scanf("%d",&x);
	while(x != 9999){
		s = (LNode *)malloc(sizeof(LNode));
		s->data = x;
		r->next = s;
		r = s;
		scanf("%d",&x);
	}
	r->next = NULL;
	return L;
}

void ListPrint(LinkList L){
	LNode *p;
	p = L->next;
	while(p != NULL){
		printf("%d ",p->data);
		p = p->next;
	}
	printf("\n");
}

void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC){
	LNode *pa,*pb,*pc;
	pa = LA->next;
	pb = LB->next;
	LC = LA;
	pc = LC;
	while(pa && pb){
		if(pa->data < pb->data){
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
		else if(pa->data > pb->data){
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
		//这里解决了不允许有重复数据的要求 
		else{
			pc->next = pa;
			pc = pa;
			pa = pa->next;
			pb = pb->next;
		}
	}
	pc->next = pa?pa:pb;
	delete LB;
}

int main(){
	LinkList LA,LB,LC;
	List_TailInsert(LA);
	ListPrint(LA);
	List_TailInsert(LB);
	ListPrint(LB);
	MergeList_L(LA,LB,LC);
	ListPrint(LC);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优雅谈论大模型8:神经网络与矩阵

向量与矩阵 上个章节的神经网络是为了解Transformer或者Mamba做好铺垫&#xff0c;在和后辈交流过程中发现有个障碍&#xff0c;那就是向量和矩阵。其实向量和矩阵的表达方式不是所有人都很习惯。在继续下面的章节之前小编认为有必要将向量、矩阵和神经网络做下补充解释。 向…

【完美恢复】修复计算机中丢失emp.dll的多个详细方法

最近&#xff0c;在尝试运行某款游戏时&#xff0c;我遭遇了一个令人头痛的问题——“emp.dll文件丢失”。这个错误通常意味着游戏的某个关键文件没有被正确加载或已损坏。以下是我解决问题的步骤和一些心得体会&#xff0c;希望对遇到类似问题的玩家们有所帮助。 emp.dll是一…

BI软件超实用功能揭秘

面对海量数据、复杂的指标计算和分析&#xff0c;BI软件都能轻而易举地达成&#xff0c;并且所用时间远远低于一般的分析软件。这背后自然是得益于一众强大的功能&#xff0c;接下来就来一起了解下BI软件那些超实用的功能。 1、标准化方案&#xff0c;更新数据源&#xff0c;立…

Anaconda下载安装

看到这篇文章的同学们&#xff0c;说明你们是要下载Anaconda&#xff0c;这篇文章讲的就是下载安装教程。 Anaconda下载网址&#xff1a; Download Now | Anaconda 根据我们需要的系统版本下载&#xff0c;我的电脑是window&#xff0c;所以选择第一个&#xff0c;如下图&am…

MIT 6.5840(6.824) Lab2:Key/Value Server 设计实现

1 实验要求 在本次 Lab 中&#xff0c;你将在单机上构建一个键/值服务器&#xff0c;以确保即使网络出现故障&#xff0c;每个操作也只能执行一次&#xff0c;并且操作是可线性化的。 客户端可以向键/值服务器发送三个不同的 RPC&#xff1a; Put(key, value) 、 Append(key,…

项目中使用Elasticsearch的API相关介绍

项目中使用Elasticsearch的API相关介绍 0、域映射类型 text&#xff1a;会分词&#xff0c;不支持聚合对当前搜索关键词&#xff0c;先自身分词&#xff0c;分成多个词&#xff0c;然后去一个一个的词去利用倒排索引去查询es索引库一般应用在搜索关键字匹配的字段的类型。 商…

如何解决 CentOS 双网卡配置的内外网通信问题?

&#x1f42f; 如何解决 CentOS 双网卡配置的内外网通信问题&#xff1f;&#x1f43e; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的…

Spring学习①__Spring初识

Spring Spring初识一、框架二、Spring&#xff08;春天&#xff09;简介Spring官网Spring是什么?Spring介绍拓展 Spring初识 一、框架 ​框架就是一些类和接口的集合&#xff0c;通过这些类和接口协调来完成一系列的程序实现。 JAVA框架可以分为三层&#xff1a; 表示层业务…

【网络安全】【Frida实战案例】某图xx付费功能逆向分析(二)

文章目录 一、目标应用二、环境三、步骤1、重打包2、运行打包后apk3、找到签名信息&#xff08;1&#xff09;、查看apk签名信息&#xff08;2&#xff09;、hook Android方法获取apk签名信息&#xff08;3&#xff09;、转为md5验证 4、hook apk签名信息 四、总结五、相关源码…

【稳定检索|投稿优惠】2024年医学、药学与生物工程国际会议(ICMPB 2024)

2024年医学、药学与生物工程国际会议&#xff08;ICMPB 2024&#xff09; 2024 International Conference on Medicine, Pharmacy, and Biotechnology 【会议简介】 2024年医学、药学与生物工程国际会议将于长沙召开。此次会议将汇聚全球医学、药学与生物工程领域的顶尖学者…

【BOSS直聘爬取系统功能介绍】

完整代码关注公众号 &#xff1a; 爬取网站&#xff1a;BOSS直聘&#xff1a;https://www.zhipin.com/ 难点 1. boss直聘不论什么岗位都只会展示10页数据&#xff0c;就算在网页里加到了11&#xff0c;内容也会和10一样。 2.多次访问会有验证码需要登录&#xff0c;这部分需…

香港电讯高效网络,助力新消费品牌抓住拓展香港市场新风口

自今年初香港与内地全面恢复通关&#xff0c;两地同胞跨境消费热潮持续升温。港人“北上”消费掀起风潮的同时&#xff0c;香港市场也成为内地新消费品牌拓展的热门目标。从糕点、茶饮、连锁餐饮到服饰&#xff0c;越来越多内地品牌进驻香港。新消费品牌要想在香港开设门店&…

jdk安装多个版本,但是java -version显示最早安装的版本,换掉Path或者JAVA_HOME不生效问题

问题一&#xff1a;当你的电脑上又多个jdk版本&#xff0c;如17 或者8时&#xff0c;使用命令行 java -version显示最早安装的&#xff0c;如下图所示&#xff1a;环境变量配置的17&#xff0c;但是命令行显示的是8。 原因&#xff1a;windows电脑装jdk17后 会在你的环境变量…

【吊打面试官系列】Java高并发篇 - 并发编程三要素?

大家好&#xff0c;我是锋哥。今天分享关于 【并发编程三要素&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 并发编程三要素&#xff1f; 1、原子性 原子性指的是一个或者多个操作&#xff0c;要么全部执行并且在执行的过程中不被其他操作打断&#xff0c;要…

2024年5月18日(星期六)骑行香杆箐

2024年5月18日 (星期六&#xff09;骑行香杆箐&#xff0c;早8:30到9:00&#xff0c;郊野公园西门集合&#xff0c;9:30准时出发【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:郊野公园西门集合 &#xff0c;家住东&#xff0c;西&#xff0c;南…

字节跳动发布豆包大模型,主力模型比行业价格低99.3%

5月15日&#xff0c;字节跳动豆包大模型在火山引擎原动力大会上正式发布。火山引擎是字节跳动旗下云服务平台&#xff0c;据火山引擎总裁谭待介绍&#xff0c;经过一年时间的迭代和市场验证&#xff0c;豆包大模型正成为国内使用量最大、应用场景最丰富的大模型之一&#xff0c…

Chromium 调试指南2024 Windows11篇-条件断点、函数断点(十一)

1. 前言 在调试过程中&#xff0c;步进代码和条件断点/函数断点是非常有用的工具和技术&#xff0c;它们可以帮助开发者更加精确地定位和解决问题。本文将介绍步进代码的常用工具以及条件断点/函数断点的设置方法&#xff0c;帮助开发者更加高效地进行调试工作。 2. 步进代码…

MySQL创建索引报错 Specified key was too long;max key length is 1000 bytes.

MySQL对创建索引的大小有限制&#xff0c;一般索引键最大长度总和不能超过1000个字节。 问题描述 MySQL创建索引时报错 Specified key was too long;max key length is 1000 bytes. 解决办法 (1) 修改存储引擎 InnoDB的索引字段长度限制大于MyISAM&#xff0c;可以尝试改成…

欧拉公式的讲解

啊&#xff0c;哈喽&#xff0c;小伙伴们大家好。我是#张亿&#xff0c;今天呐&#xff0c;学的是欧拉公式 在不同的学科中有着不同的含义和应用。在复变函数中&#xff0c;欧拉公式表述为e^(ix)(cos xisin x)&#xff0c;其中e是自然对数的底&#xff0c;i是虚数单位&#x…

Springboot+Vue项目-基于Java+MySQL的制造装备物联及生产管理ERP系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…