首页 > 其他分享 >数据结构:实验二 单链表

数据结构:实验二 单链表

时间:2024-03-28 22:59:07浏览次数:26  
标签:单链 return int next 数据结构 实验 SqList printf NULL

一、    实验目的

  1. 掌握单链表的存储结构特点
  2. 掌握单链表中的各种基本运算算法设计。

二、    实验内容与要求

    编写一个程序exp2-2.cpp,实现单链表的各种基本运算和下面main函数中的每一步功能。

  1. 初始化单链表L;
  2. 依次采用尾插法插入’a’,’b’,’c’,’d’,’e’五个字符元素;
  3. 输出单链表L;
  4. 依次采用头插法插入’1’,’2’,’3’三个字符元素;
  5. 输出单链表L;
  6. 输出单链表L中序号为3的元素。(元素序号从1开始);
  7. 输出元素’a’在链表中的位置(即序号);
  8. 在第4个元素位置上插入’*’元素;
  9. 输出单链表L
  10. 删除L中第3个元素;
  11. 输出单链表L

三、    实验步骤

1.单链表结点类型声明:

typedef char ElemType;

typedef struct LNode {

 ElemType data;

 struct LNode *next;

} SqList;

2.线性表基本运算在单链表上的实现

void InitList(SqList *&L) {
 L= (SqList *)malloc(sizeof(SqList));  //分配存放线性表的空间
 L->next=NULL;     //置空线性表长度为0
}

void DestroyList(SqList *&L) {       //销毁线性表(DestroyList)
 SqList *pre=L,*p=L->next;
 while(p!=NULL) {
  free(pre);
  pre=p;
  p=pre->next;
 }
 free(pre);
}
void DispList(SqList *L) {          //输出线性表,
 SqList *p=L->next;
 while(p!=NULL) {
  printf("%c ",p->data);
  p=p->next;
 }
 printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e) {
 int j=0;
 SqList *p=L;

 if(i<=0)
  return false;
 while(j<i&&p!=NULL) {
  j++;
  p=p->next;
 }
 if(p==NULL)
  return false;
 else {
  e=p->data;
  return true;
 }
}
int LocateElem(SqList *L,ElemType e) {
 int i=1;
 SqList *p=L->next;
 while(p!=NULL&&p->data!=e) {
  p=p->next;
  i++;
 }
 if(p==NULL)
  return (0);
 else
  return (i);
}
void CreateListR(SqList *&L,ElemType a[],int n) {

 SqList *s,*r;
 L= (SqList *)malloc(sizeof(SqList));
 r=L;
 for(int i=0; i<n; i++) {
  s=(SqList *)malloc(sizeof(SqList));
  s->data=a[i];
  r->next=s;
  r=s;
 }
 r->next=NULL;
}
bool ListInsert(SqList *L,int i,ElemType e) {   //插入数据元素;
 int j=0;
 SqList *p=L,*s;
 if(i<=0)
  return false;
 while(j<i-1&&p!=NULL) {
  j++;
  p=p->next;
 }
 if(p==NULL)
  return false;
 else {
  s=(SqList *)malloc(sizeof(SqList));
  s->data=e;
  s->next=p->next;
  p->next=s;
  return true;
 }
}
bool ListDelete(SqList *&L,int i,ElemType &e) {     //删除数据元素;
 int j=0;
 SqList *p=L,*q;
 if(i<=0)
  return false;
 while(j<i-1&&p!=NULL) {
  j++;
  p=p->next;
 }
 if(p==NULL)
  return false;
 else {
  q=p->next;
  if(q==NULL)
   return false;
  e=q->data;
  p->next=q->next;
  free(q);
  return true;
 }
}
void CreateListF(SqList *&L, ElemType b[], int n) { //头插法
 SqList * s;
 L = (SqList *)malloc(sizeof(SqList));    //创建头节点
 L->next = NULL;
 for(int i = 0;
 i < n; i++){
  s = (SqList *)malloc(sizeof(SqList));//创建新节点s
  s->data = b[i];
  s->next = L->next;    //将节点s插在开始接点之前,头节点之后
  L->next = s;
 }
}
void DispList2(SqList *L){
 SqList *p = L->next;    //p指向首节点
 while(p != NULL){    //p不为NULL,输出p节点的data
  printf("%d ", p->data);
  p = p->next;    //p移向下一个节点
 }
 printf("\n");
}

3. 程序exp2-2.cpp的设计,及完成实验要求中的功能

(补齐实现对应功能的代码 )   

// 1) 初始化顺序表L。

//2)  依次插入a,b,c,d,e元素,字符类型

//3)  输出顺序表L

 //4)  输出顺序表L的长度

//5)  判断顺序表L是否为空

//6)  输出顺序表L的第3个元素

 //7)  输出元素a的位置

//8)  在第4个元素位置上插入f元素

/9)  输出顺序表L

 //10) 删除顺序表L的第3个元素

//11) 输出顺序表L  

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

typedef char ElemType;

typedef struct LNode {

 ElemType data;

 struct LNode *next;

} SqList;

void InitList(SqList *&L) {

 L= (SqList *)malloc(sizeof(SqList));  //分配存放线性表的空间

 L->next=NULL;     //置空线性表长度为0

}



void DestroyList(SqList *&L) {       //销毁线性表(DestroyList)

 SqList *pre=L,*p=L->next;

 while(p!=NULL) {

  free(pre);

  pre=p;

  p=pre->next;

 }

 free(pre);

}

void DispList(SqList *L) {          //输出线性表,

 SqList *p=L->next;

 while(p!=NULL) {

  printf("%c ",p->data);

  p=p->next;

 }

 printf("\n");

}

bool GetElem(SqList *L,int i,ElemType &e) {

 int j=0;

 SqList *p=L;



 if(i<=0)

  return false;

 while(j<i&&p!=NULL) {

  j++;

  p=p->next;

 }

 if(p==NULL)

  return false;

 else {

  e=p->data;

  return true;

 }

}

int LocateElem(SqList *L,ElemType e) {

 int i=1;

 SqList *p=L->next;

 while(p!=NULL&&p->data!=e) {

  p=p->next;

  i++;

 }

 if(p==NULL)

  return (0);

 else

  return (i);

}

void CreateListR(SqList *&L,ElemType a[],int n) {



 SqList *s,*r;

 L= (SqList *)malloc(sizeof(SqList));

 r=L;

 for(int i=0; i<n; i++) {

  s=(SqList *)malloc(sizeof(SqList));

  s->data=a[i];

  r->next=s;

  r=s;

 }

 r->next=NULL;

}

bool ListInsert(SqList *L,int i,ElemType e) {   //插入数据元素;

 int j=0;

 SqList *p=L,*s;

 if(i<=0)

  return false;

 while(j<i-1&&p!=NULL) {

  j++;

  p=p->next;

 }

 if(p==NULL)

  return false;

 else {

  s=(SqList *)malloc(sizeof(SqList));

  s->data=e;

  s->next=p->next;

  p->next=s;

  return true;

 }

}

bool ListDelete(SqList *&L,int i,ElemType &e) {     //删除数据元素;

 int j=0;

 SqList *p=L,*q;

 if(i<=0)

  return false;

 while(j<i-1&&p!=NULL) {

  j++;

  p=p->next;

 }

 if(p==NULL)

  return false;

 else {

  q=p->next;

  if(q==NULL)

   return false;

  e=q->data;

  p->next=q->next;

  free(q);

  return true;

 }

}

void CreateListF(SqList *&L, ElemType b[], int n) { //头插法

 SqList * s;

 L = (SqList *)malloc(sizeof(SqList));    //创建头节点

 L->next = NULL;

 for(int i = 0;

 i < n; i++){

  s = (SqList *)malloc(sizeof(SqList));//创建新节点s

  s->data = b[i];

  s->next = L->next;    //将节点s插在开始接点之前,头节点之后

  L->next = s;

 }

}

void DispList2(SqList *L){

 SqList *p = L->next;    //p指向首节点

 while(p != NULL){    //p不为NULL,输出p节点的data

  printf("%d ", p->data);

  p = p->next;    //p移向下一个节点

 }

 printf("\n");

}

 int  main()

{

      ElemType e,a[5]={'a','b','c','d','e'},b[3]={1,2,3};

      SqList *L;

      printf("单链表的计算功能如下:\n");

      printf("  1.初始化单链表L\n");

      InitList(L);

      printf("  2.依次采用尾插法插入a,b,c,d,e元素\n");

      CreateListR(L,&a[0],5);

      printf("  3.输出单链表L:   ");

      DispList(L);

      GetElem(L,3,e);

      printf("  6.输出单链表L的第3个元素 = % c\n",e);

      printf("  7.输出单链表中元素a的位置 = %d\n",LocateElem(L,'a'));

      printf("  8.在第4个元素位置上插入元素*\n");

      ListInsert(L,4,'*');

      printf("  9.输出单链表L:    ");

      DispList(L);

      printf("  10.删除L的第3个元素\n");

      ListDelete(L,3,e);

      printf("  11.输出单链表L:  ");

      DispList(L);

      printf("  4.依次采用头插法插入1,2,3元素\n");

      CreateListF(L,&b[0],3);

      printf("  5.输出单链表L:   ");

      DispList2(L);

      printf("  12.释放单链表L\n");

      DestroyList(L);

    return 0;

}

四、编译运行结果截图:

如需源文件,请私信作者,无偿

标签:单链,return,int,next,数据结构,实验,SqList,printf,NULL
From: https://blog.csdn.net/m0_65216733/article/details/137078147

相关文章

  • 考研数据结构chapter6图(待完善)
    目录一、概念1.顶点Vertex2.边Edge3.边的权4.路径、回路、简单路径、简单回路二、基本图1.有向图vs无向图2.简单图vs多重图3.连通图vs强连通图4.连通分量vs强连通分量5.生成树vs生成森林三、特殊的图1.无向完全图vs有向完全图2.稠密图vs稀疏图3.......
  • Python数据结构实验 树和二叉树实验(二)
    一、实验目的1.掌握二叉树的概念和二叉树的性质;2.掌握二叉树的存储结构,包括二叉树顺序存储结构和链式存储结构;3.掌握二叉树的基本运算算法和二叉树的先序、中序和后序遍历的递归算法的实现。二、实验环境1.Windows操作系统的计算机2.Python3.7环境平台和PyCharm编辑器三、......
  • c语言程序实验——实验报告三
    c语言程序实验——实验报告三实验项目名称:实验报告3简单顺序程序设计实验项目类型:验证性实验日期:2024年3月28日一、实验目的1、学会准确使用c语言的数据输入与函数输出2、能编写简单顺序结构程序二、实验硬、软件环境Windows计算机、Devc6.0三、实验内容:编写程序:(1......
  • 北京理工大学操作系统 实验一 编译Linux内核
    实验一编译Linux内核实验一编译Linux内核一、实验目的二、实验内容三、实验步骤1.安装虚拟机并配置环境实验环境:2.下载并解压Linux内核源码3.配置内核编译选项4.编译并安装内核和模块5.修改GRUB配置四、实验结果及分析五、实验收获与体会Copyright©2024Squar......
  • 综合实验(简单BGP)
    思路:配置bgp对等体(邻居)bgp宣告路由bgp与ospf相互导入路由bgp域内边界路由同AS内的邻居学到的路由可能不可达,所以需要配置向bgp的同AS内的邻居宣告的路由中的下一跳指定为自己 #配置bgp邻居[R3]bgp100[R3-bgp]peer34.1.1.2as-number200  #配置对等体[R......
  • 数据结构与算法题目集(中文)6-1 单链表逆转 C语言
    6-1单链表逆转本题要求实现一个函数,将给定的单链表逆转。函数接口定义:ListReverse(ListL);其中List结构定义如下:typedefstructNode*PtrToNode;structNode{ElementTypeData;/*存储结点数据*/PtrToNodeNext;/*指向下一个结点的指针*/};t......
  • 【转载】SLAM领域的优秀作者与实验室汇总
    原地址:https://blog.csdn.net/m0_37874102/article/details/114365837总结一些之前看过的SLAM(VO,VIO,建图)文献所发表的实验室和作者1.实验室美国卡耐基梅陇大学机器人研究所研究所主页:https://www.ri.cmu.edu/发表论文:https://www.ri.cmu.edu/pubs/优秀团队成员:Michael......
  • 实验二 数据描述
    c语言程序设计——实验报告二实验项目名称:实验二数据描述实验项目类型:验证性实验日期:2023年3月21日一、实验目的1、掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。2、掌握不同数据类型之间赋值的规律。3、学会使用C的有关算术运算符,以及......
  • 实验一:波士顿房价预估
    环境:Acanda32024.02-1+Python-3.7.16+scikit-learn==1.0.2+keras==2.11.0PackageVersion---------------------------------------absl-py2.1.0anyio3.5.0argon2-cffi21.3.0argon2-cffi-bindings21.2.0astunparse1.6.3attrs22.1.0backcall0.2.0beautiful......
  • 旷场实验KT-0860——观察研究实验动物神经精神变化
    旷场是观察研究实验动物神经精神变化、进入开阔环境后的各种行为,例如动物对新开阔环境的恐惧而主要在周边区域活动,在中间区域活动较少,但动物的探究特性又促使其产生在中间区域活动的动机,也可观察由此而产生的焦虑心理。兴奋药可以明显增加自主的活动而减少探究行为,在统一些剂......