实验报告 线性表的基本操作及应用(单链表的创建,插入、删除、查找和打印算法)修改之前i=i+1问题

简介: 实验报告 线性表的基本操作及应用(单链表的创建,插入、删除、查找和打印算法)修改之前i=i+1问题

修改之前的一些小毛病 (很长一段时间都没有检查这个代码,抱歉)

修改位置:在进行查找时将指针p直接指向L->next,避免使用i=i+1

打印删除元素的数据域

查找和删除元素时,P=L,不能出现P=P->next,因为插入删除时可以是在第一个有效数据节点之前,此时的j要保持j=0;

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define FALSE 0
typedef int Status;
typedef float ElemType;
typedef struct LNode
{
  ElemType data;
  struct LNode *next;
 } LNode,* LinkList;
LinkList s,r,P;
Status i;
//创建单链表    尾插法 
void CreatListTail(LinkList &L,Status n)
{
  r=L=(LinkList)malloc(sizeof(LNode));
  L->next=NULL;
  for(i=1;i<=n;++i)
  {
    s=(LinkList)malloc(sizeof(LNode));
    scanf("%f",&s->data);
    s->next=NULL;
    r->next=s;
    r=s;
  }
}
//查找 
ElemType GetElem(LinkList &L,Status i)
{
  LinkList P;
  Status j;
  P=L->next;
  j=1;
  while(P&&j<i)
  {
    P=P->next;
    j++;
  }
  return P->data;
}
//插入 
ElemType ListInsert(LinkList &L,int  i,ElemType e)
{
  Status j;
  P=L;
  j=0;
  while(P&&j<i-1)
  {
    P=P->next;
    ++j;
  }
  if(!P||j>i-1)
  {
    return FALSE;
  }
  s=(LinkList)malloc(sizeof(LNode));
  s->data=e;
  s->next=P->next;
  P->next=s;
  return OK;
}
//打印 
void print(LinkList &L)
{
  printf("打印单链表:");
  LinkList P;
  P=L->next;
  while(P!=NULL)
  {
    printf("%.2f ",P->data);
    P=P->next;
  }
  printf("\n");
}
//删除 
Status ListDelete(LinkList &L,int i)
{
  ElemType e;
  Status j;
  LinkList q;
  P=L;
  j=0;
  while(P->next&&j<i-1)
  {
    P=P->next;
    ++j;
  }
  if(!(P->next)||j>i-1)
  {
    return FALSE;
  }
  q=P->next;
  P->next=q->next;
  e=q->data;
  printf("删除的节点数据为:%.2f\n",e);
  free(q);
  return e;
}
//菜单 
menu(LinkList L)
{
  printf("            欢迎您使用单链表操作系统             \n");
  printf("\n");
  printf("*************************************************\n");
  printf("*1:                打印单链表                   *\n");
  printf("-------------------------------------------------\n");
  printf("*2:        查找单链表中某个位置的元素           *\n");
  printf("-------------------------------------------------\n");
  printf("*3:             在单链表中插入元素              *\n");
  printf("-------------------------------------------------\n");
  printf("*4:             在单链表中删除元素              *\n");
  printf("*************************************************\n");
  Status val,n,i;
  ElemType e;
  printf("\n");
  printf("请按下相应数字进行选择:"); 
  scanf("%d",&val);
  switch(val)
  {
    case 1:print(L);
           break; 
      case 2:
         printf("请输入需要查找元素的位置:");
         scanf("%d",&n);
             printf("获取第%d个元素的值为:%.2f\n",n,GetElem(L,n));
             break;
      case 3:
           printf("请输入需要插入的值:");
         scanf("%f",&e);
         printf("请输入插入的位置:");
         scanf("%d",&i); 
             ListInsert(L,i,e);
             print(L);
             break;
      case 4:printf("请输删除的节点位置:");
           scanf("%d",&i); 
           ListDelete(L,i);
           print(L);
           break;
  }
}
int main()
{
  Status n,i,j,k;
  LinkList L,P;
  printf("请输入节点个数:"); 
  scanf("%d",&n);
  printf("创建单链表(输入每个结点的数据域):"); 
  CreatListTail(L,n);
  for(j=0;j<100;j++)
  {
    printf("是否执行程序(1代表继续执行,0代表终止执行)\n");
    scanf("%d",&k);
    if(k==1)
    {
      menu(L);
    }
    else
    {
        break;
    }
  }
  return 0;
}
相关文章
|
21天前
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
45 15
|
1月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
5天前
|
分布式计算 并行计算 算法
MapReduce在实现PageRank算法中的应用
总结来说,在实现PageRank算法时使用MapReduce能够有效地进行大规模并行计算,并且具有良好的容错性和可扩展性。
113 76
|
15天前
|
人工智能 自然语言处理 供应链
从第十批算法备案通过名单中分析算法的属地占比、行业及应用情况
2025年3月12日,国家网信办公布第十批深度合成算法通过名单,共395款。主要分布在广东、北京、上海、浙江等地,占比超80%,涵盖智能对话、图像生成、文本生成等多行业。典型应用包括医疗、教育、金融等领域,如觅健医疗内容生成算法、匠邦AI智能生成合成算法等。服务角色以面向用户为主,技术趋势为多模态融合与垂直领域专业化。
|
14天前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
23天前
|
存储 人工智能 算法
通过Milvus内置Sparse-BM25算法进行全文检索并将混合检索应用于RAG系统
阿里云向量检索服务Milvus 2.5版本在全文检索、关键词匹配以及混合检索(Hybrid Search)方面实现了显著的增强,在多模态检索、RAG等多场景中检索结果能够兼顾召回率与精确性。本文将详细介绍如何利用 Milvus 2.5 版本实现这些功能,并阐述其在RAG 应用的 Retrieve 阶段的最佳实践。
通过Milvus内置Sparse-BM25算法进行全文检索并将混合检索应用于RAG系统
|
17天前
|
人工智能 自然语言处理 算法
从第九批深度合成备案通过公示名单分析算法备案属地、行业及应用领域占比
2024年12月20日,中央网信办公布第九批深度合成算法名单。分析显示,教育、智能对话、医疗健康和图像生成为核心应用领域。文本生成占比最高(57.56%),涵盖智能客服、法律咨询等;图像/视频生成次之(27.32%),应用于广告设计、影视制作等。北京、广东、浙江等地技术集中度高,多模态融合成未来重点。垂直行业如医疗、教育、金融加速引入AI,提升效率与用户体验。
|
19天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
101 31
|
9天前
|
算法 数据安全/隐私保护 异构计算
基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
本项目展示了一种基于FPGA的音频水印算法,采用LSB(最低有效位)技术实现版权保护与数据追踪功能。使用Vivado2019.2和Matlab2022a开发,完整代码含中文注释及操作视频。算法通过修改音频采样点的最低有效位嵌入水印,人耳难以察觉变化。然而,面对滤波或压缩等攻击时,水印提取可能受影响。该项目运行效果无水印干扰,适合实时应用场景,核心逻辑简单高效,时间复杂度低。
|
9天前
|
算法 数据安全/隐私保护
基于GA遗传算法的拱桥静载试验车辆最优布载matlab仿真
本程序基于遗传算法(GA)实现拱桥静载试验车辆最优布载的MATLAB仿真,旨在自动化确定车辆位置以满足加载效率要求(0.95≤ηq≤1.05),目标是使ηq尽量接近1,同时减少车辆数量和布载耗时。程序在MATLAB 2022A版本下运行,展示了工况1至工况3的测试结果。通过优化模型,综合考虑车辆重量、位置、类型及车道占用等因素,确保桥梁关键部位承受最大荷载,从而有效评估桥梁性能。核心代码实现了迭代优化过程,并输出最优布载方案及相关参数。

热门文章

最新文章