期末考试必备----数据结构----顺序表之链表的模拟和相关操作(创建,头插,尾插,删除,定位,打印)

本文主要是介绍期末考试必备----数据结构----顺序表之链表的模拟和相关操作(创建,头插,尾插,删除,定位,打印),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据结构专栏:数据结构_脑子不好的小菜鸟的博客-CSDN博客 

					/*链表的相关操作*/#define ok 1
#define error 0
#define overflow -2typedef int status;
typedef int elemtype;typedef struct node
{elemtype data;struct node* next;
}Lnode, *Llist;/*status*/void create01(Llist& L, int n)
{int i;L = (Llist)malloc(sizeof(Lnode));/**///if (L == NULL)//	return error;L->next = NULL;Llist p, s;//p:追踪链尾,s:新建节点p = L;/**/printf("请输入你要创建的%d个元素的值(尾插,顺序创建)\n", n);for (i = 0; i < n; i++){s = (Llist)malloc(sizeof(Lnode));//if (s == NULL)//	return error;scanf("%d", &s->data);p->next = s;//尾插p = p->next;}p->next = NULL;/**///return ok;
}void create02(Llist& L)
{L = (Llist)malloc(sizeof(Lnode));/*创建头节点*/L->next = NULL;//尾部插入节点printf("请输入你要创建的元素值,以0结尾(尾插,顺序创建)\n");int val;scanf("%d", &val);Llist s, p;p = L;while (val){s = (Llist)malloc(sizeof(Lnode));s->data = val;//尾插p->next = s;p = p->next;scanf("%d", &val);}p->next = NULL;/**/
}void create03(Llist& L)
{L = (Llist)malloc(sizeof(Lnode));/**/L->next = NULL;printf("请输入你要创建的元素值,以0结尾(头插,逆序创建)\n");int val;scanf("%d", &val);Llist s;while (val){s = (Llist)malloc(sizeof(Lnode));s->data = val;//头插s->next = L->next;L->next = s;scanf("%d", &val);}
}void print(Llist& L)
{Llist q;/*注意不是Lnode,因为要指向next指针*/q = L->next;printf("打印链表元素\n");while (q){printf("%d ", q->data);q = q->next;}printf("\n");
}int getnum(Llist L)
{Llist q;/*注意不是Lnode,因为要指向next指针*/int n = 0;q = L->next;while (q){q = q->next;n++;}return n;
}status myinsert(Llist& L, int i, int e)
{if (i < 1)return error;Llist q = L;int j = 0;while (q != NULL && j < i - 1){j++;q = q->next;}if (q == NULL)return error;Llist s = (Llist/*注意:不要打星号*/)malloc(sizeof(Lnode));s->data = e;s->next = q->next;q->next = s;return ok;
}status myerase(Llist& L, int i)
{if (i < 1)return error;int j = 0, e;Llist q = L;while (q != NULL && j < i - 1){j++;q = q->next;}if (q == NULL)return error;e = q->next->data;Llist p = q->next;q->next = q->next->next;free(p);p = NULL;return e;
}Llist locat(Llist& L, int i)
{if (i < 1)return NULL;int j = 0;Llist q = L;while (q != NULL && j < i/**/){j++;q = q->next;}if (q == NULL)return NULL;return q;
}int main()
{Llist L1;int n;//尾插---->正向输出----->都需要一个指针p去跟踪链表末尾//已知元素个数创建//printf("请输入你要创建的链表元素个数:\n");//scanf("%d", &n);//create01(L1, n);create02(L1);print(L1);printf("链表元素个数为:%d\n", getnum(L1));//Llist L2;头插---->逆序输出以0为结尾输入的创建//create03(L2);//print(L2);//printf("链表元素个数为:%d\n",getnum(L2));int i, e;//注意插入和删除数据都是要定位到该位置的前面一个//插入数据printf("请输入你要插入的位置和数据\n");scanf("%d%d", &i, &e);myinsert(L1, i, e);print(L1);//删除数据printf("请输入你要删除的位置\n");scanf("%d", &i);e = myerase(L1, i);if (e == 0)printf("删除位置非法,删除失败\n");else{printf("删除的数据为:%d,删除成功\n", e);print(L1);}//定位printf("请输入你要定位的元素位置\n");scanf("%d", &i);Llist q = locat(L1, i);if (q == NULL)printf("定位非法,定位失败\n");elseprintf("%p\n", q);return 0;
}

这篇关于期末考试必备----数据结构----顺序表之链表的模拟和相关操作(创建,头插,尾插,删除,定位,打印)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘