实验报告 线性表的基本操作及应用(单链表的创建,插入、删除、查找和打印算法)修改之前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;
}
相关文章
|
1月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
41 3
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
140 63
|
14天前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
24 0
|
25天前
|
存储 算法 搜索推荐
这些算法在实际应用中有哪些具体案例呢
【10月更文挑战第19天】这些算法在实际应用中有哪些具体案例呢
27 1
|
1月前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
72 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
19天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
25天前
|
监控 算法 数据挖掘
HyperLogLog算法有哪些应用场景呢
【10月更文挑战第19天】HyperLogLog算法有哪些应用场景呢
15 0
|
1月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
25 0
|
26天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
11天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。