【线性表的基本操作实现及其应用 】

线性表的基本操作实现及其应用

1.实验目的
⑴ 熟练掌握线性表的基本操作在两种存储结构上的实现,其中以熟悉各种链表的操作为重点。
⑵ 巩固高级语言程序设计方法与技术,会用线性链表解决简单的实际问题。
2.实验原理与要求
⑴ 按照数据结构实验任务书,提前做好实验预习与准备工作,独立完成。
⑵ 任选一题,多选者并且保质保量完成适当加分。
⑶ 严格按照数据结构实验报告模板和规范,及时完成实验报告。
3.实验内容(实验内容为多选,请在自己所做题目前打“√” )
⑴ 顺序表的表示与操作实现
完成顺序表建立、输出、插入、删除、查找和统计等基本操作与算法实现
√⑵ 单链表的表示与操作实现
完成单链表建立、输出、插入、删除、查找和统计等基本操作与算法实现
4.实验步骤
(说明:依据实验内容分别说明实验程序中用到的数据类型的定义、主程序的流程以及每个操作(成员函数)的伪码算法、函数实现、程序编码、调试与分析、总结、 附流程图与主要代码)
4.1数据结构与核心算法的设计描述
⑴ 单链表的结点类型定义
/* 定义DataType为int类型 /
typedef int DataType;
/
单链表的结点类型 */
typedef struct LNode
{ DataType data;
struct LNode *next;
}LNode,*LinkedList;
⑵ 初始化单链表,建立一个带头结点的单链表
LinkedList LinkedListInit()
{LinkedList L;
L=(LinkedList)malloc(sizeof(LNode));
L->next=NULL;
printf(“初始化完成!\n”);
return L;
}
⑶ 清空单链表
void LinkedListClear(LinkedList L)
{ L->next=NULL;
}
⑷ 遍历单链表
void LinkedListTraverse(LinkedList L)
{LinkedList p;
p=L->next;
while(p!=NULL)
{printf(“%d “,p->data);
p=p->next; }
}
⑸ 求单链表的长度
int LinkedListLength (LinkedList L)
{LinkedList p;
int j;
p=L->next;
j=0;
while(p!=NULL)
{ j++;p=p->next; }
return j;
}
LinkedList LinkedListGet (LinkedList L, int i)
{LinkedList p;int j;
p=L->next; j=1;
while (p!=NULL && j<i )
{p=p->next; j++; }
if (ji) return p;
else return NULL;
}
⑹ 从单链表表中查找元素
LinkedList LinkedListLocate ( LinkedList L, ElemType x)
{
LinkedList p;
p=L->next;
while ( p!=NULL && p->data != x)
p=p->next;
return p;
}
⑺ 从单链表表中查找与给定元素值相同的元素在链表中的位置
LinkedList LinkedListLocate ( LinkedList L, ElemType x)
{
LinkedList p;
p=L->next;
while ( p!=NULL && p->data != x)
p=p->next;
return p;
}
⑻ 向单链表中插入元素
void LinkedListInsert(LinkedList L, int i, ElemType x)
{LinkedList pre,p,s;int j;
pre=L;j=1;p=L->next;
while(pre&&j<i)
{pre=p;p=p->next;j++;}
if(pre
NULL)
{printf(“给的i值超过了表长”);exit(0);}
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
pre->next=s;
s->next=p;
return ;
}
⑼ 从单链表中删除元素
void LinkedListDel (LinkedList L,ElemType x)
{ LinkedList pre,p;int j;
pre=L;j=1;p=L->next;
while(p&&p->data!=x)
{pre=p;p=p->next;j++;}
if(p==NULL)
{printf(“表中没有值为x的结点”);exit(0);}
pre->next=p->next;
free§;
}
⑽ 用尾插法建立单链表
LinkedList LinkedListCreat( )
{ LinkedList L=LinkedListInit(),p,r;
ElemType x;
r=L;
printf(“please input data,input -1 is end\n”);
scanf(”%d”,&x);
while (x!=flag)
{p=(LinkedList)malloc(sizeof(LNode));
p->data=x;
r->next=p;
r=p;
scanf(“%d”,&x);
}
r->next=NULL;
return L;
}
4.2函数调用及主函数设计
函数的调用关系如下图1所示:
在这里插入图片描述

图1. 函数的调用关系
4.3 程序调试及运行结果分析
⑴ 程序调试过程
在编译过程中出现一处错误。
在这里插入图片描述

在经过调试后发现是129行的分号是中文符号下的,经过修改程序编译正常。
在这里插入图片描述

⑵ 运行结果分析
<1> 程序运行结果:
在这里插入图片描述

<2>选择输入“1” 初始化链表 ,测试结果如下:
在这里插入图片描述

<3>选择输入“10” ,尾插法建立单链表 ,运行结果如下:
在这里插入图片描述

<4>选择输入“3” ,求单链表长度 ,运行结果如下:
在这里插入图片描述

<5>选择输入“4”,运行结果如下:
在这里插入图片描述

<6>选择输入“5”,遍历单链表,运行结果如下:
在这里插入图片描述

<7>选择输入“6”,从链表中查找元素,运行结果如下:
在这里插入图片描述

<8>选择输入“7”,查找与给定元素值相同的元素在表中的位置,运行结果如下:
在这里插入图片描述

<9>选择输入“8”,向链表插入元素,运行结果如下:

在这里插入图片描述

<10>选择输入“9”,从链表中删除元素,运行结果如下:
在这里插入图片描述

4.4 实验总结
本次实验是在多次思考调试后才做出来的。经过这次单链表基本操作实验自己的编程能力有了进一步提高,认识到自己以前在思考问题上思路不够开阔,不能灵活的表达出自己的想法。
通过这次实验我知道了只有在切身编程中才能真正地理解掌握。今后更应勤加学习、练习,多看、多练、勤思考,以便更好的掌握数据结构这门至关重要的课程。
5主要算法流程图及程序清单
⑴ 主要算法流程图:
插入算法:
在这里插入图片描述

删除算法:
在这里插入图片描述

⑵ 程序清单
/* 定义ElemType为int类型 /
typedef int ElemType;
#define TRUE 1
#define FALSE 0
#define NULL 0
#define flag -1
/
单链表的结点类型 */
typedef struct LNode
{ElemType data;
struct LNode *next;
} LNode,LinkedList;
/
初始化单链表 /
LinkedList LinkedListInit()
{LinkedList L;
L=(LinkedList)malloc(sizeof(LNode));
L->next=NULL;
printf(“初始化完成!\n”);
return L;
}
/
清空单链表 /
void LinkedListClear(LinkedList L)
{ L->next=NULL;
}
/
检查单链表是否为空 /
int LinkedListEmpty(LinkedList L)
{if(L->next==NULL) return TRUE;
else return FALSE;
}
/
遍历单链表 */
void LinkedListTraverse(LinkedList L)
{LinkedList p;
p=L->next;
while(p!=NULL)
{printf(“%d “,p->data);
p=p->next;
}
}
// 求单链表的长度
int LinkedListLength (LinkedList L)
{LinkedList p;
int j;
p=L->next;
j=0;
while(p!=NULL)
{ j++;p=p->next; }
return j;
}
LinkedList LinkedListGet (LinkedList L, int i)
{LinkedList p;int j;
p=L->next; j=1;
while (p!=NULL && j<i )
{p=p->next; j++; }
if (ji) return p;
else return NULL;
}
// 从单链表表中查找与给定元素值相同的元素在链表中的位置
LinkedList LinkedListLocate ( LinkedList L, ElemType x)
{
LinkedList p;
p=L->next;
while ( p!=NULL && p->data != x)
p=p->next;
return p;
}
// 向单链表中插入元素
void LinkedListInsert(LinkedList L, int i, ElemType x)
{LinkedList pre,p,s;int j;
pre=L;j=1;p=L->next;
while(pre&&j<i)
{pre=p;p=p->next;j++;}
if(pre
NULL)
{printf(“给的i值超过了表长”);exit(0);}
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
pre->next=s;
s->next=p;
return ;
}
// 从单链表中删除元素
void LinkedListDel (LinkedList L,ElemType x)
{ LinkedList pre,p;int j;
pre=L;j=1;p=L->next;
while(p&&p->data!=x)
{pre=p;p=p->next;j++;}
if(p==NULL)
{printf(“表中没有值为x的结点”);exit(0);}
pre->next=p->next;
free§;
}
// 用尾插法建立单链表
LinkedList LinkedListCreat( )
{ LinkedList L=LinkedListInit(),p,r;
ElemType x;
r=L;
printf(“please input data,input -1 is end\n”);
scanf(”%d”,&x);
while (x!=flag)
{p=(LinkedList)malloc(sizeof(LNode));
p->data=x;
r->next=p;
r=p;
scanf(“%d”,&x);
}
r->next=NULL;
return L;
}
int scan()
{int d;
printf(“please input the operation\n”);
printf(“1.初始化\n”);
printf(“2.清空\n”);
printf(“3.求链表长度\n”);
printf(“4.检查链表是否为空\n”);
printf(“5.遍历链表\n”);
printf(“6.从链表中查找元素\n”);
printf(“7.从链表中查找与给定元素值相同的元素在链表中的位置\n”);
printf(“8.向链表中插入元素\n”);
printf(“9.从链表中删除元素\n”);
printf(“10.尾插法建立单链表\n”);
printf(“其他键退出\n”);
scanf(“%d”,&d);
return(d);
}
main()
{int quit=0;
int i;
ElemType e;
LinkedList L;
while(!quit)
switch(scan())
{case 1:L=LinkedListInit();break;
case 2:LinkedListClear(L);break;
case 3:printf(“the length is%d\n”,LinkedListLength(L));break;
case4:if(LinkedListEmpty(L))printf(“true\n”);else printf(“false\n”);break;
case 5:LinkedListTraverse(L);break;
case 6:printf(“please input the location.\n”);
scanf(“%d”,&i);
printf(“the num.is %d\n”,LinkedListGet(L,i));
break;
case 7:printf(“please input the element.\n”);
scanf(“%d”,&e);
printf(“the location.is %d\n”,LinkedListLocate(L,e));
break;
case 8:printf(“please input the insert location and insert num.\n”);
scanf(“%d%d”,&i,&e);
LinkedListInsert(L,i,e);
break;
case 9:printf(“please input the deleted element.\n”);
scanf(“%d”,&e);
LinkedListDel(L,e);
break;
case 10:L=LinkedListCreat();break;
default:quit=1;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】书生·浦语大模型实战营——第四课(XTuner 大模型单卡低成本微调实战)

【参考&#xff1a;tutorial/xtuner/README.md at main InternLM/tutorial】 【参考&#xff1a;(4)XTuner 大模型单卡低成本微调实战_哔哩哔哩_bilibili-【OpenMMLab】】 总结 学到了 linux系统中 tmux 的使用 了解了 XTuner 大模型微调框架的使用 pth格式参数转Hugging …

【量化交易故事】小明开启了量化创业之旅-01

故事开始于2023年的春天&#xff0c;小明是一位对金融市场充满热情的IT工程师。在经历了数次基于主观判断和个人情绪进行投资却收获平平后&#xff0c;他意识到传统交易方式中的人为因素难以避免&#xff0c;而这往往成为影响投资决策稳定性和准确性的关键障碍。在一次偶然的机…

工作压力测试

每个职场人都会遇到工作压力&#xff0c;在企业人力资源管理的角度来看&#xff0c;没有工作压力是人力资源的低效&#xff0c;适当的工作压力可以促使员工不断进取&#xff0c;然而每个人的抗压能力是不同的&#xff0c;同样的工作量和工作难度&#xff0c;不同的人在面对相同…

【Java语言基础②】Java基本语法——Java程序基本格式,注释,标识符,常量

通过前面的学习&#xff0c;大家对Java语言有了一个基础认识&#xff0c;但现在还无法使用Java语言编写程序&#xff0c;要熟练使用Java语言编写程序&#xff0c;必须充分掌握Java语言的基础知识。今天咱们就来聊一聊Java的基本语法。 1.java程序的基本格式 Java程序代码必须…

在win11中安装“mingw-w64-gcc-13.2-stable-r40”

在windows系统中&#xff0c;安装完VSCode后&#xff0c;还需要安装mingw&#xff0c;才可以使用C和C编译。 1、从MinGW-w64镜像站点&#xff1a;http://files.1f0.de/mingw&#xff0c;下载“mingw-w64-gcc-13.2-stable-r40”&#xff0c;见下图&#xff1a; 2、将“mingw-w6…

Centos7编译Python3.11源码并安装完成的详细教程

Python3.11的Linux源码&#xff1a; Index of /ftp/python/https://www.python.org/ftp/python/由于Centos7里自带的openssl是1.0版本的&#xff0c;而Centos Stream8和9用的是openssl-1.1.1版本的。 注意&#xff1a;openssl必须是openssl-1.1.1版本的&#xff0c;虽然最高版…

【大厂秘籍】 - Java多线程面试题

Java多线程面试题 友情提示&#xff0c;看完此文&#xff0c;在Java多线程这块&#xff0c;基本上可以吊打面试官了 线程和进程的区别 进程是资源分配的最小单位&#xff0c;线程是CPU调度的最小单位 线程是进程的子集&#xff0c;一个进程可以有很多线程&#xff0c;每条线…

10.9.2 std::function 存储函数对象 Page184

41行&#xff0c;pending只是inc的复制品&#xff0c;所以43&#xff0c;44行&#xff0c;不会改变inc()的值 demo_function2()的运行结果&#xff1a; 59行&#xff0c;pending是inc的引用&#xff0c;所以61,62行将会改变inc()的值

CloudFlare平台下载的WARP一直连不上(warp无法连接)解决办法

遇到问题&#xff1a; 解决办法&#xff1a; 下载一个warp选ip的文件夹&#xff0c;选一下ip就行了。 下载链接如下&#xff1a; https://pan.kejicode.cn/d/Onedrive/WIN%E7%AB%AFwarp%E8%87%AA%E9%80%89IP(%E6%89%8B%E5%8A%A8%2B%E8%87%AA%E5%8A%A8).rar?signRqBdHIMyyhg…

查询和结果处理的Java代码

match_all查询&#xff1a; //查询所有文档 match_all查询Testvoid testMatchAll() throws IOException {// 1.准备RequestSearchRequest request new SearchRequest("hotel");// 2.准备DSLrequest.source().query(QueryBuilders.matchAllQuery());// 3.发送请求Sea…

Apollo之原理和使用讲解

文章目录 1 Apollo1.1 简介1.1.1 背景1.1.2 简介1.1.3 特点 1.2 基础模型1.3 Apollo 四个维度1.3.1 application1.3.2 environment1.3.3 cluster1.3.4 namespace 1.4 本地缓存1.5 客户端设计1.5.1 客服端拉取原理1.5.2 配置更新推送实现 1.6 总体设计1.7 可用性考虑 2 操作使用…

海外媒体宣发:新闻媒体发稿引爆社交媒体的7个诀窍-华媒舍

社交媒体的崛起已经改变了新闻媒体的传播方式。从Facebook到Twitter&#xff0c;从Instagram到LinkedIn&#xff0c;社交媒体平台为新闻媒体提供了一个巨大且潜力无限的受众群体。要在这个竞争激烈的环境中引爆社交媒体&#xff0c;需要一些技巧和诀窍。在本篇文章中&#xff0…

【CSS】保持元素宽高比

保持元素的宽高比&#xff0c;在视频或图片展示类页面是一个重要功能。 本文介绍其常规的实现方法。 实现效果 当浏览器视口发生变化时&#xff0c;元素的尺寸随之变化&#xff0c;且宽高比不变。 代码实现 我们用最简单的元素结构来演示&#xff0c;实现宽高比为4&#xf…

WorkPlus卓越的即时通讯工具,助力企业提升工作效率

在当今快节奏的商业环境中&#xff0c;高效沟通和协作是企业成功的关键。而即时通讯作为实现高效沟通的利器&#xff0c;成为了现代企业不可或缺的一部分。作为一款领先的即时通讯工具&#xff0c;WorkPlus以其卓越的性能和独特的功能&#xff0c;助力企业打造高效沟通和协作的…

初始化数组

一、静态初始化格式&#xff1a; 数据类型[ ] 数组名 new 数据类型[ ]{元素1&#xff0c;元素2&#xff0c;元素3......} 等号后面的new 数据类型可以省略 注意&#xff1a;什么类型的数组只能存放什么类型的数据 直接打印a或b会显示其地址 数组的元素个数&#xff1a;arr…

Android Studio 如何设置中文

Android Studio 是一个为 Adndroid 平台开发程序的集成开发环境&#xff08;IDE&#xff09;。 如何安装中文插件 在 Jetbrains 家族的插件市场上&#xff0c;是能够搜到语言包插件的&#xff0c;正常情况下安装之后只需要重启即可享受中文界面&#xff0c;可AndroidStudio 中…

SOLID 原则

单一功能原则 单一功能原则&#xff08;Single responsibility principle&#xff09;规定每个类都应该有一个单一的功能&#xff0c;并且该功能应该由这个类完全封装起来。所有它的&#xff08;这个类的&#xff09;服务都应该严密的和该功能平行&#xff08;功能平行&#x…

ospf-gre隧道小练习

全网可达,R5路由表没有其他路由器的路由条目 注:每个路由器都添加了自己的环回,如R1就是1.1.1.1 R1可以分别ping通与R2,R3,R4之间的隧道 R1路由表上有所有路由器环回的路由条目 R5路由表上没有其他路由器的路由条目 实现代码: 首先将各个接口IP配好 边上3个路由器:[R6][R7][R…

Linux-命名管道

文章目录 前言一、命名管道接口函数介绍二、使用步骤 前言 上章内容&#xff0c;我们介绍与使用了管道。上章内容所讲的&#xff0c;是通过pipe接口函数让操作系统给我们申请匿名管道进行进程间通信。 并且这种进程间通信一般只适用于父子进程之间&#xff0c;那么对于两个没有…

mysql原理--redo日志1

1.redo日志是个啥 我们知道 InnoDB 存储引擎是以页为单位来管理存储空间的&#xff0c;我们进行的增删改查操作其实本质上都是在访问页面&#xff08;包括读页面、写页面、创建新页面等操作&#xff09;。我们前边唠叨 Buffer Pool 的时候说过&#xff0c;在真正访问页面之前&a…
最新文章