《数据结构》实验报告:线性表的基本操作及应用

课设实验报告 同时被 2 个专栏收录
6 篇文章 2 订阅

线性表的基本操作及应用

一、实验目的
1、帮助复习C++语言程序设计中的知识。
2、熟悉线性表的逻辑结构。
3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。
二、实验内容
单链表的基本操作
[问题描述]
实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。
[基本要求]
(1)依次从键盘读入数据,建立带头结点的单链表;
(2)输出单链表中的数据元素
(3)求单链表的长度;
(4)根据指定条件能够取元素和修改元素;
(5)实现在指定位置插入和删除元素的功能。
[测试数据]

单链表的结点类型定义:
//定义单链表的结点类型
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkedList;

插入函数:
插入时需要输入插入的位置及插入元素,代码如下:
void ListInsert(LinkList &L,int e,int i)
{
LNode *p=L;
int j=0;

//查找第i-1个结点,p指向该结点
while(p&&(j<i-1)) {
p=p->next;
j++;
}
if(!p||j>i-1)
printf(“位置错误!”); //i>n+1或者i<1,删除位置不合理
LNode s=new LNode; //生成新结点s
s->data=e; //将新结点s的数据域置为e
s->next=p->next; //将结点
s的指针域指向结点p的指针域
p->next=s; //将结点
p的指针域指向结点*s
}
插入函数运行示例

修改函数:
先调用删除函数删除该位置的数据,然后再调用插入函数向其中插入一个数据
在这里插入图片描述
删除函数:代码如下
void ListDelete(LinkList &L,int i)
{
LNode *p=L;
int j=0;
//查找第i-1个结点,p指向该结点
while((p->next)&&(j<i-1))
{
p=p->next;
j++;
}
if((!p->next)||(j>i-1))
printf(“位置错误!”); //i>n或i<1时,删除位置不合理
LNode *q=p->next; //临时保存被删除结点的地址以备释放
p->next=q->next; //改变删除结点前驱结点的指针域
delete q; //释放删除结点的空间
}
在这里插入图片描述

查找函数:代码如下:
void GetElem(LinkList L)
{
LNode *p=L->next; //初始化,p指向首元结点
int j=1,i;
printf(“请输入想要提取元素的位置:”);
scanf("%d",&i);
while(p&&j<i)//顺链域向后扫描,直到p为空或p指向第i个元素
{
p=p->next; //p指向下一个结点
j++;
}
if(!p||j>i)
printf(“取值位置错误!”);
printf("%d\n",p->data);
}
在这里插入图片描述

输出函数:代码如下
void display(LinkList &L,int n)
{
LNode *p;
int i=0;
printf(“单链表为:”);
p=L->next;
while§
{
printf("%d “,p->data); //输出第i个结点的数据域
p=p->next; //p指向下一个结点
i++;
}
printf(”\n");
printf(“链表长度为:%d\n”,i);
}

主函数:输入项要创建的单链表长度及链表元素,然后通过序号选择想要对链表进行的操作(插入,修改,删除,查找元素),每一项操作的最后都会输出链表被操作之后的元素及长度。

在这里插入图片描述

  • 2
    点赞
  • 1
    评论
  • 57
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页

打赏作者

_egg_

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值