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

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

数据结构专栏:数据结构_脑子不好的小菜鸟的博客-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中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

C++打印 vector的几种方法小结

《C++打印vector的几种方法小结》本文介绍了C++中遍历vector的几种方法,包括使用迭代器、auto关键字、typedef、计数器以及C++11引入的范围基础循环,具有一定的参考价值,感兴... 目录1. 使用迭代器2. 使用 auto (C++11) / typedef / type alias

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

C#实现插入与删除Word文档目录的完整指南

《C#实现插入与删除Word文档目录的完整指南》在日常的办公自动化或文档处理场景中,Word文档的目录扮演着至关重要的角色,本文将深入探讨如何利用强大的第三方库Spire.Docfor.NET,在C#... 目录Spire.Doc for .NET 库:Word 文档处理利器自动化生成:C# 插入 Word

MySQL中的DELETE删除数据及注意事项

《MySQL中的DELETE删除数据及注意事项》MySQL的DELETE语句是数据库操作中不可或缺的一部分,通过合理使用索引、批量删除、避免全表删除、使用TRUNCATE、使用ORDERBY和LIMI... 目录1. 基本语法单表删除2. 高级用法使用子查询删除删除多表3. 性能优化策略使用索引批量删除避免

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE