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

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

数据结构专栏:数据结构_脑子不好的小菜鸟的博客-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

相关文章

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad