数据结构与算法(2)链表的初始化,插入,打印和删除——C语言实现

目录:
1.头文件
2.单链表的定义
3.菜单栏的设置
4.单链表的初始化
5.添加元素
6.打印元素
7.插入元素
8.删除元素
9.主函数

1.头文件

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef int ElemType;
typedef struct node;void menu();
LinkList init();//初始化链表
void add(LinkList L);//添加元素
void print(LinkList L);//打印元素
void insert(LinkList L);//插入元素
void delete(LinkList L);//删除元素

2.单链表的定义

typedef struct LNode
{ElemType data;//结点的数据域struct LNode* next;//结点的指针域int n;
}LNode,*LinkList;//LinkList为指向结构体LNode的指针类型LinkList L;//L为单链表的头指针

3.菜单栏的设置

void menu()
{{int option;printf("----链表的基本操作---\n");printf("----0.初始化顺序表----\n");printf("----1.添加元素--------\n");printf("----2.打印元素--------\n");printf("----3.删除元素--------\n");printf("----4.插入元素--------\n");printf("----------------------\n");printf("请输入选择的操作:");scanf_s("%d", &option);switch (option){case 0:L=init();break;case 1:add(L);break;case 2:print(L);break;case 3:delete(L);break;case 4:insert(L);break;default:printf("你选择的菜单项不存在,请重新选择\n");}system("pause");//暂停,不然控制台程序会一闪即过,你来不及看到执行结果//system("cls");}
}

4.单链表的初始化

LinkList init()
{printf("********初始化单链表********\n");LinkList L = (LinkList)malloc(sizeof(LNode));//生成新结点作为头结点,用头指针L指向头结点L->next = NULL;//头结点的指针域置空printf("链表初始化成功!\n");//system("pause");//暂停,不然控制台程序会一闪即过,你来不及看到执行结果//system("cls");清屏return L;//LinkList与*LNode本质上是等价的,若定义LinkList L,则L为单链表的头指针,若定义LNode *p,则p为指向单链表中某个结点的指针,*p代表该结点。}

5.添加元素

void add(LinkList L)
{int  m, x;LNode* p;//p为指向单链表中某个结点的指针p = L->next;//初始化,p指向首元结点 printf("********添加元素********\n");printf("请输入要添加元素的个数:");scanf("%d", &m);for (int i = 1; i <= m; i++){p = (LNode*)malloc(sizeof(LNode));//初始化printf("请输入第%d个元素的值:",i);scanf("%d", &x);p->data= x;//将插入元素的数据域存放在p中p ->next = L->next;//将p的指针域指向下一个结点L->next = p;//使头结点指向的下一个结点是pL->n++;printf("恭喜您,添加成功");}system("cls");//清屏
}

6.打印元素

void print(LinkList L)
{	printf("********打印元素********");LNode* p;//p为指向单链表中某个结点的指针p = L->next;//初始化,p指向首元结点while (p)//直到最后一个结点后停止{printf("%d ", p->data);p = p->next;//使p指向下一个结点}printf("\n");
}

7.插入元素

void insert(LinkList L)
{LNode* p,*q;//p为指向单链表中某个结点的指针int x, y,i;printf("********插入元素********\n");printf("请输入插入元素的个数:");scanf("%d", &x);for (int s = 0; s < x; s++){	int j = 0;p = L->next;//初始化p,使p指向首元结点printf("请输入要插入元素的位置:");scanf("%d", &i);printf("请输入要插入元素的数据域:");scanf("%d", &y);while(p&&(j<i-1))//直到p为空(最后一个元素的数据域为空)或p指向第i个元素{p = p->next;//查找第i-1个结点,p指向该结点++j;}if (!p || j>i-1)//若p为空,意思是指向了最后一个元素或是输入的位置不合法{printf("您输入的位置不合法\n");}else{q = (LNode*)malloc(sizeof(LNode));//为新节点开辟地址q->data = y;//将输入的值赋给qq->next = p->next;//将*q的指针域指向下一个结点p->next = q;//使p指向qprintf("插入成功\n");}}}

8.删除元素

void delete(LinkList L)
{	printf("********删除元素********\n");printf("请输入要删除的位置:");int i;scanf("%d", &i);LNode* p;//指针p指向当前扫描到的结点int j = 0;//当前p指向的是第几个结点p = L;//L指向头结点,头结点是第0个结点(不存储数据)while (p != NULL && j < i - 1)//循环找到第i-1个结点{p = p->next;++j;}if (!p || j > i - 1){printf("您输入的位置已越界\n");}else{LNode* q = p->next;//令q指向被删除结点p->next = q->next;//将p结点的指针域直接指向被删除的下一个结点free(q);//删除结点printf("删除成功\n");}
}

9.主函数

int main()
{while(1){menu();}return 0;
}

注意:链表和顺序表不同,链表中逻辑相邻的结点并没有在存储在物理相邻的单元中,这样,根据给定的结点位置序号i,在链表中获取该结点的值不能像顺序表那样随机访问,而只能从链表的首元素结点出发,顺着链域next逐个结点向下访问。因此,需要用while循环来找到该结点

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

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

相关文章

为什么好的产品经理极度稀缺?

目录 简介 对于个体 对于企业 作者简介 简介 要回答这个问题&#xff0c;一是要界定是谁提出的这个问题。 如果是企业负责人提问的。 这个问题的本质更多的是出在了企业的内部流程和管理上。 说明企业对产品经理的定位多数是有问题的或者是不清晰的。 而且内部也缺乏明…

学习计划.

每周打cf&#xff0c;每天保持刷一到两道题目&#xff0c;完成实验室安排的任务 第六周 Java集合&#xff0c;JavaFx 第七周 范型、异常处理 第八周 MySQL数据库和JDBC编程、多线程 第九周 网络编程、观看视频学习如何写项目 并尝试开始Java项目 第十周 完成项目

JAVA面试大全之微服务篇

目录 1、Spring Cloud 1.1、什么是微服务?谈谈你对微服务的理解? 1.2、什么是Spring Cloud? 1.3、springcloud中的组件有那些? 1.4、具体说说SpringCloud主要项目

编曲知识13:弦乐技法应用 合成器应用 声场摆位

弦乐技法 技法分类 Sustain(长音)类: Legato、Port、Gliss、Tremolo、Trills Staccato(短音)类: Staccato、Pizzicato、Spiccato Legato:连奏 Port:滑音 Gliss:慢速滑音 Tremolo:震音 Trills:颤音 Staccato:顿弓 Pizzicato:拨奏 Spiccato:跳弓 长音类技法 主…

如何调整Node内存限制

Node为什么会出现内存溢出&#xff0c;如何优化&#xff1f;如何调整Node内存限制&#xff1f; 一、内存限制以及溢出原因 Node.js默认的内存限制 Node.js默认的内存限制取决于你的操作系统和Node.js的版本。在大多数情况下&#xff0c;Node.js默认的内存限制应该是1.4GB&#…

从0到1:兼职招聘小程序开发笔记(一)

可行性分析 兼职招聘小程序&#xff1a;为雇主和求职者提供便利的平台&#xff0c;旨在帮助雇主招聘兼职员工&#xff0c;并让求职者寻找合适的兼职工作。提供简单、快捷的方式来匹配兼职岗位和候选人&#xff0c;节省了招聘和求职的时间和精力。其主要功能模块包括&#xff1…

机器视觉系统在工业零件检测中的应用

随着工业自动化和智能制造的不断发展&#xff0c;工业零件检测的准确性和效率变得越来越重要。传统的检测方法通常依赖人工目检或使用简单的机械工具&#xff0c;这种方法不仅效率低下&#xff0c;而且容易受到人为因素的干扰&#xff0c;难以保证检测的准确性。相比之下&#…

C练习题(1)

变种水仙花&#xff08;来自牛课网&#xff09; 题目 变种水仙花数 - Lily Number&#xff1a;把任意的数字&#xff0c;从中间拆分成两个数字&#xff0c;比如1461 可以拆分成&#xff08;1和461&#xff09;,&#xff08;14和61&#xff09;,&#xff08;146和1),如果所有拆…

精进TypeScript--private真的能隐藏信息吗?

JavaScript缺乏一种使类的属性成为私有的方法。 private访问修饰符只有通过类型系统才能被强制执行。它在运行时没有效果&#xff0c;可以被一个类型断言轻松绕过。不要以为它能保持数据的隐蔽性。 通常的变通方法是将下划线作为不属于公共API的字段的前缀&#xff1a; class …

C++经典面试题目(十五)

1、什么是面向对象编程&#xff08;OOP&#xff09;&#xff1f;请解释其基本概念。 当谈论面向对象编程&#xff08;OOP&#xff09;时&#xff0c;我们指的是一种软件开发范式&#xff0c;其中程序被组织为一组对象的集合&#xff0c;这些对象之间通过消息传递来进行交互。 …

索引失效的场景有哪些

索引失效的场景有以下几种: 1.联合索引非最左匹配:当使用联合索引时&#xff0c;未遵循最左匹配原则&#xff0c;则不能正常使用索引&#xff0c;也就是索引失效了 2.不当模糊查询:模糊查询 like 的常见用法有3种(只有第1种的会走索引&#xff0c;其他都会导致索引失效): a.模…

力扣刷题Days29-128.最长连续数列(js)

目录 1&#xff0c;题目 2&#xff0c;代码 2.1自己实现 2.2哈希表 3&#xff0c;学习与收获 枚举思想&#xff1a; 遍历的核心逻辑 碎碎念 本题 先是想到利用数组排序&#xff0c;从而简化遍历处理逻辑&#xff0c;再在提交错误提醒的情况下&#xff0c;考虑到数组中存…

zookeeper如何保证数据强一致性的?

原子广播特性用来保证zookeeper集群数据强一致性的机制。 数据的强一致性是当一个外部客户端去请求一个分布式系统中的数据时一旦这个数据允许被查询&#xff0c;那么我们在任何一个被要求存储该数据的分布式节点上在任何时候都能够查到这份数据且数据内容要求一摸一样。 原子广…

基于FreeRTOS系统的STM32简易遥控器设计

项目说明 该项目是一个基于FreeRTOS系统的Stm32遥控器设计。使用该项目主要是自己学习FreeRTOS的使用&#xff0c;以及模块化编程的思想。这个项目应该长期会有更新。 项目开源 github:https://github.com/snqx-lqh/Stm32RemoteControl gitee:https://gitee.com/snqx-lqh/S…

Electron安全防护实战:应对常见安全问题及权限控制措施

Electron安全防护实战&#xff1a;应对常见安全问题及权限控制措施 引言常见安全问题及其危害提升 Electron 应用安全性的措施限制渲染进程权限防止XSS与内容注入加固应用更新流程严格管理硬件权限使用安全的第三方模块加密敏感数据存储实现进程间通信&#xff08;IPC&#xff…

【无标题】331

2024年3月31日19:26:09 和一个好感度为40的女生完成了一次基础的对话 2024年3月31日19:26:26 在群里完成了一个毫无所谓的对话 2024年3月31日19:40:04开始准备写论文了 2024年3月31日19:40:11好感度为40的女生回复了我本质上是回复率只有40的人回复了我那应该感到高兴才对 …

Github 2024-04-01 开源项目月报 Top20

根据Github Trendings的统计,本月(2024-04-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目9TypeScript项目2非开发语言项目2Jupyter Notebook项目2HTML项目1CSS项目1C#项目1Shell项目1Lua项目1JavaScript项目1C项目1Java项目…

程序员赚钱线索,百度的AI灵感中心,有个命理,3.6w人使用

百度的AI灵感中心&#xff0c;有个命理&#xff0c;3.6w人使用。&#xff08; 比其他全部数据都要高&#xff0c;别人都是几百几千&#xff0c;这一个3.6w属于异常值。 思路&#xff1a; 是否可以根据这个做个插件或者小程序&#xff1f;用ChatGPT接口来进行解梦&#xff0c;…

了解 LoadRunner 性能测试软件及其基础使用

目录 一、了解LoadRunner 1、什么是Loadrunner&#xff1f; 2、Loadrunner包括什么组件&#xff1f; &#xff08;1&#xff09;前台组件 &#xff08;2&#xff09;后台组件 二、LoadRunner三大组件 1、VuGen&#xff08;虚拟用户脚本生成器&#xff09; &#xff08;…

详细分析Mysql中的STR_TO_DATE基本知识(全)

目录 前言1. 基本知识2. Demo3. 实战Demo4. Sql彩蛋4.1 LPAD函数4.2 SUBSTRING_INDEX函数 5. Java彩蛋 前言 对于该知识点&#xff0c;主要因为数据库类型为String&#xff08;类似2024-03-26&#xff09;&#xff0c;放置于后端操作后&#xff0c;需要自定义比较&#xff0c;…