实验报告 线性表的基本操作及应用(单链表的创建,插入、删除、查找和打印算法)

简介: 实验报告 线性表的基本操作及应用(单链表的创建,插入、删除、查找和打印算法)

1.实验名称

线性表的基本操作及应用

2.实验目的

(1)掌握单链表的创建,插入、删除、查找和打印算法;

(2)运用线性表解决线性结构问题。

3.实验内容

基本要求:

(1)实现单链表的创建;(2)实现单链表的插入;(3)实现单链表的删除

(4)实现单链表的查找;(5)实现单链表的显示;

选作内容:

两个线性表合并算法的实现。已知顺序表LA和LB中的数据元素按值非递减有序排列,现要将LA和LB归并为一个新的顺序表LC,且LC中的数据元素仍按值非递减有序排序。例如:LA=(3,5,8,11) LB=(2,6,9,15,20)。


实验代码(线性表的基本操作):

#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)
{
  i=i+1; 
  LinkList P;
  Status j;
  P=L;
  j=1;
  while(P&&j<i)
  {
    P=P->next;
    j++;
  }
  return P->data;
}
//插入 
ElemType ListInsert(LinkList &L,int  i,ElemType e)
{
  i=i+1;
  Status j;
  P=L;
  j=1;
  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)
{
  i=i+1;
  ElemType e;
  Status j;
  LinkList q;
  P=L;
  j=1;
  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;
  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;
}


控制台:

image.png

相关文章
|
1月前
|
存储 算法 Java
算法系列之递归反转单链表
递归反转链表的基本思路是将当前节点的next指针指向前一个节点,然后递归地对下一个节点进行同样的操作。递归的核心思想是将问题分解为更小的子问题,直到达到基本情况(通常是链表末尾)。
41 5
算法系列之递归反转单链表
|
5月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
97 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
5月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
294 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
4月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
7月前
|
算法 Java 测试技术
算法分析(蛮力法与减治算法应用实验报告)
这篇文章是关于算法分析的实验报告,介绍了如何使用蛮力法解决背包问题,并通过伪代码和Java代码实现,同时分析了其时间效率;还介绍了基于减治法思想实现的二叉查找树的插入与查找,同样提供了伪代码、Java源代码实现和时间效率分析,最后展示了测试结果截图。
算法分析(蛮力法与减治算法应用实验报告)
|
5月前
|
算法
计科一二班算法数据结构实验9答案
计科一二班算法数据结构实验9答案
36 0
|
7月前
|
机器学习/深度学习 算法 Java
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
这篇文章介绍了基于贪婪技术思想的Prim算法和Dijkstra算法,包括它们的伪代码描述、Java源代码实现、时间效率分析,并展示了算法的测试用例结果,使读者对贪婪技术及其应用有了更深入的理解。
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
|
7月前
|
算法 Java 测试技术
算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
这篇文章介绍了基于动态规划法的三种算法:解决背包问题的递归和自底向上实现、Warshall算法和Floyd算法,并提供了它们的伪代码、Java源代码实现以及时间效率分析。
算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
|
7月前
|
算法 索引
【初阶数据结构篇】单链表算法题进阶
深拷贝应该正好由 n 个全新节点组成,其中每个新节点的值都设为其对应的原节点的值。
50 0
|
7月前
|
算法 搜索推荐
算法设计 (分治法应用实验报告)基于分治法的合并排序、快速排序、最近对问题
这篇文章是关于分治法应用的实验报告,详细介绍了如何利用分治法实现合并排序和快速排序算法,并探讨了使用分治法解决二维平面上的最近对问题的方法,包括伪代码、源代码实现及时间效率分析,并附有运行结果和小结。

热门文章

最新文章