实验2 单链表应用
一、实验目的
1.熟悉单链表的存储结构和基本操作;
2.熟悉单循环链表的操作;
3.熟悉单链表的应用。
二、实验内容
1.将一个已知的单循环链表进行逆置运算,如(a1,a2,a3,…,an)变为(an,an-1,…,a2,a1)。将算法转换为程序上机实现,并按照要求撰写实验报告。
三、实验指导
对于单链表而言,最后一个结点的指针域是空指针,如果将该链表头指针置入该指针域,则使得链表头尾结点相连,就构成了单循环链表。对于单链表只能从头结点开始遍历整个链表,而对于单循环链表则可以从表中任意结点开始遍历整个链表。
所谓链表的逆置运算(或称为逆转运算)是指在不增加新结点的前提下,依次改变数据元素的逻辑关系,使得线性表(a1,a2,a3,…,an)成为(an,an-1,…,a2,a1)。
本题采用的算法是:先建立一个带头结点的单循环链表,从头到尾扫描单链表L,把p作为活动指针,沿着链表向前移动,每遇到一个新结点,就将此结点插入到头结点之后,直到p==L时,单循环链表倒置实现。q指向p前趋结点,r指向q的前趋结点。其中,q的next值为r,r的初值置为head。
四、实验要求
1.每个同学必须独立完成;
2.代码编写规范要求:程序中的开头部分必须对本程序的总体功能进行注释;程序中每个函数段必须要有注释说明该函数的功能或作用;
3.实验设计和源码撰写应在每次上机之前完成,上机时进行调试和修改、记录实验数据和结果;
4.实验报告的总结部分,应描述如下内容:
(1)单链表与顺序表区别的体会。
(2)本次实验过程的体会,是否自己独立完成?最大的困难是什么?自己准备如何解决这个困难?
5.提交实验报告。
参考实验代码:
#define NULL 0
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int num;
struct node *next;
}linklist;
void output(linklist *head) /*输出循环链表的信息*/
{
linklist *p;
p=head->next;
while(p!=head)
{
printf("%d ",p->num);
p=p->next;
}
printf("\n");
}
linklist *creat(int n) /*建立单循环链表*/
{
int k;
linklist *head, *r, *p;
p=(linklist *)malloc(sizeof(linklist));
head=p;
r=p;
p->next=p;
for(k=1;k<=n;k++)
{
p=(linklist *)malloc(sizeof(linklist));
p->num=k;
r->next=p;
r=p;
}
p->next=head;
return(head);
}
linklist *invert(linklist *head) /*逆置函数*/
{
linklist *p,*q,*r;
p=head->next;
q=head;
while(p!=head)
{
r=q;
q=p;
p=p->next;
q->next=r;
}
head->next=q;
return(head);
}
void main()
{
int n;
linklist *head;
printf("输入所建立的循环链表的结点个数:\n");
scanf("%d",&n);
head=creat(n);
printf("输出建立的单循环链表:\n");
output(head);
printf("现在进行逆置!\n");
head=invert(head);
printf("输出进行逆置运算后的单循环链表的结点信息!\n");
output(head);
}
分享到:
相关推荐
数据结构实验 单链表的应用 利用类实现单链表的应用
本实验指导旨在让学生掌握单链表的存储实现、操作算法实现和应用。下面是相关知识点的详细解释: 一、单链表的定义 单链表是一种抽象数据类型,它由一系列结点组成,每个结点包含数据元素和指向下一个结点的指针。...
数据结构试验 单链表的基本操作及应用 源代码 下载
2.再从键盘输入顺序任意的5个整数,按有序插入的要求生成第二个有序单链表,将该链表输出显示。 3.将这两个有序单链表合并成一个有序单链表,要求使用两个单链表的原有空间进行合并,将生成的有序单链表输出显示。
本实验报告的主要目的是了解单链表的逻辑特点,掌握单链表的定义及 C 语言实现,熟练掌握在单链表中实现各种基本操作,并掌握使用单链表解决一些简单应用问题的编程。 单链表是一种基本的数据结构,它由一系列的...
实验报告有流程图,代码带注释及运行结果和应用算法实现,报告很全
数据结构实验报告:单链表的建立 1.实验目的 (1)了解数据的逻辑结构和数据的存储结构之间的区别与联系; (2)掌握线性表的链式表示和实现方法,特别是插入、删除操作。 (3)掌握运用C语言上机调试线性表的...
本实验报告旨在通过实现单链表的基本操作,掌握链表的基本操作,包括插入、删除、查找、合并等运算,并能够灵活应用链表这种数据结构,深入了解链表的链式结构。 一、链表的基本概念 链表是一种常用的数据结构,它...
单链表操作 和 栈、队列的应用 基本要求:1)用前插法建立带表头结点的单链表; 2)在该链表中统计数据值为x的结点个数。 3)在该链表中值为k的结点前插入y结点,并删除k结点,如果没有值为k的结点则把y结点插在...
利用单链表实现电话本的模拟程序:定义单链表的数据类型,将头插法和尾插法、插入、删除、查找、修改、计数、逆置、输出等操作都定义成子函数的形式,最后在主函数中调用它,并将每一种操作前后的结果输出,以查看每...
在实验中,我们设计了两个项目:基于循环单链表的应用项目和基于双链表的应用项目。对于单链表项目,我们创建了一个单链表结点结构描述与链表存储实现,并实现了循环单链表的相关操作算法设计运行。对于双链表项目,...
单链表实验报告 该实验报告的目的是熟悉顺序表的创建、取值、查找、插入、删除等...该实验报告证明了单链表的创建和取值算法的正确性,并且展示了模块化程序设计方法的优点,为后续的实验和实际应用奠定了坚实的基础。
科大版的数据结构代码 用于上机实验和单链表的应用 适用于初学者
洛阳理工学院实验报告 "系别 "计算机系 "班级 " "学号 " "姓名 " " "课程名称 "数据结构 "实验日期 "11.7 " "实验名称 "链表的基本操作 "成绩 " " "实验目的: " "熟悉掌握线性表链式存储结构,掌握与应用查找、插入...
单链表是一种常用的数据结构,在计算机科学中有广泛的应用。本实验的主要目的是让学生掌握单链表的逻辑结构特征及其在计算机内的存储结构,以及掌握单链表的基本操作。 一、实验目的 1. 了解线性表的逻辑结构特征...
1.编写算法,根据用户输入的字符数据...2.编写算法,实现在带有头结点的单链表中按序号查找的函数。 假设单链表中包含6个数据元素,测试数据: 1. 查找第0个. 2. 查找第1个. 3. 查找第2个. 4. 查找第6个. 5. 查找第7个.
在该实验报告中,我们将学习如何使用C语言来实现单链表的就地反转。首先,我们需要定义一个单链表的数据结构,包括一个结点结构体和一个顺序表结构体。结点结构体用于存储链表的每个节点的数据,顺序表结构体用于...
实验报告的主要内容包括单链表的逻辑结构特征、单链表的各种基本运算、单链表的实现和单链表的应用。 一、实验目的和要求 本实验的目的是为了理解单链表的逻辑结构特征和掌握单链表的各种基本运算。实验要求学生...
大二实验作业 顺序表,单链表,顺序表应用,冒泡排序,折半查找 写在一个form窗口
数据结构课程单链表实验报告 本实验报告主要介绍了单链表的基本操作及其 C 语言实现,包括链表的建立、插入、删除、查找和合并等操作。 一、链表的基本操作 链表是一种基本的数据结构,广泛应用于计算机科学和...