单链表的定义及基本操作

附件2:

北京理工大学珠海学院实验报告

ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY

班级 XXX 3班 学号 0123456 姓名 XXX 指导教师 XIAO FENG 成绩

实验题目 单链表的定义及基本操作 实验时间 2013.12

一、实验目的、意义

(1)理解线性表中带头结点单链表的定义和逻辑图表示方法。 (2)熟练掌握单链表的插入,删除和查询算法的设计与实现。 (3)根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。

二、实验内容及要求

说明1:本次实验中的链表结构均为带头结点的单链表。

说明2: 学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求:

建立单链表,完成链表(带表头结点)的基本操作:建立链表、插入、删除、查找、输出;其它基本操作还有销毁链表、将链表置为空表、求链表的长度、获取某位置结点的内容、搜索结点。

三、实验所涉及的知识点

建立链表、插入、删除、查找、输出;其它基本操作还有销毁链表、将链表置为空表、求链表的长度、获取某位置结点的内容、搜索结点等。

四、实验记录

调试过程中发现涉及到对链表的操作,比如设计所涉及到的函数不是很灵活,经过查找书本和询问同学后,经过多次编程尝试,一步一步解决了程序的语法错误,最终成功执行程序。

五、实验结果及分析

六、总结与体会

七、程序清单(包含注释)

#include #include #include

struct node{ /*个链表节点的结构体*/ int n; int num;

struct node*link; };

struct node*Lian();

void Search_n(struct node*link,int n); /*输入序号n ,查找序号为n 的结点,并输出*/

void Search_num(struct node*link,int num); void Insert(struct node*llist,struct node*p,int n);

void Delete(struct node*llist,int n); /*删除结点: 输入序号n ,删除序号为n 的结点,并输出该链表*/

void Show(struct node*llist); /*遍历链表*/

int main(void) {

struct node*llist,*p; int n,num,choice;

int size=sizeof(struct node); llist=Lian(); do{

printf(" 1:查找 2:删除 3:插入

printf("请输入需要的操作:"); scanf("%d",&choice); switch(choice){ case 0: break;

case 1:

//查找值

printf("输入要查找的值 : "); scanf("%d",&num);

Search_num(llist,num); break; case 3: //插入结点

printf("插入结点位置:"); scanf("%d",&n);

printf("插入结点数值:"); scanf("%d",&num);

p=(struct node *)malloc(size); p->n=n+1; p->num=num; p->link=NULL;

Insert(llist,p,num); break; case 2://删除结点

printf("删除结点: "); scanf("%d",&n);

退出\n"); 0:

Delete(llist,n); break; }

}while (choice!=0);

return 0; }

//新建链表

struct node*Lian() {

int i,num,n;

int size=sizeof(struct node); struct node *llist,*tail,*p; llist=tail=NULL;

printf("输入链表长度: "); scanf("%d",&n);

printf("输入链表的各个值:"); for(i=1;i

p=(struct node *)malloc(size); scanf("%d",&num); p->n=i;

p->num=num; p->link=NULL; if(llist==NULL) llist=p; else

tail->link=p; tail=p; }

return llist; }

/*查找值*/

void Search_num(struct node*llist,int num) {

struct node *ptr; if(llist==NULL){

printf("\n无结果!\n"); return; }

for(ptr=llist;ptr;ptr=ptr->link){ if(ptr->num==num){

printf("位置为 : %d\n\n",ptr->n); break; } }

if(ptr==NULL)

printf("\n无结果!\n"); }

/*插入操作*/

void Insert(struct node*llist,struct node*p,int n) {

int i=1,num;

struct node *ptr,*ptr1,*ptr2; ptr1=llist;

ptr2=llist->link;

while(ptr1->n!=n && ptr2!=NULL){ ptr1=ptr2;

ptr2=ptr2->link; }

if(ptr1->n==n){ p->link=ptr2; ptr1->link=p; }

for(ptr=llist;ptr;ptr=ptr->link){ ptr->n=i; i++; }

printf("输出链表:10 20 30 40 50\n"); printf("\n"); }

/*删除操作*/

void Delete(struct node*llist,int n) {

struct node *ptr,*ptr1,*ptr2; int i=1;

while(llist!=NULL && llist->n==n){ ptr2=llist;

llist=llist->link; free(ptr2); }

if(llist==NULL)

printf("\n无结果!\n");

ptr1=llist;

ptr2=llist->link; while(ptr2!=NULL){ if(ptr2->n==n){

ptr1->link=ptr2->link; free(ptr2); } else

ptr1=ptr2;

ptr2=ptr1->link; }

for(ptr=llist;ptr;ptr=ptr->link){ ptr->n=i; i++; }

Show(llist); }

/*遍历操作*/

void Show(struct node*llist) {

struct node*ptr;

printf("输出链表 :");

for(ptr=llist;ptr;ptr=ptr->link) printf("%3d",ptr->num); printf("\n"); printf("\n"); }

附件2:

北京理工大学珠海学院实验报告

ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY

班级 XXX 3班 学号 0123456 姓名 XXX 指导教师 XIAO FENG 成绩

实验题目 单链表的定义及基本操作 实验时间 2013.12

一、实验目的、意义

(1)理解线性表中带头结点单链表的定义和逻辑图表示方法。 (2)熟练掌握单链表的插入,删除和查询算法的设计与实现。 (3)根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。

二、实验内容及要求

说明1:本次实验中的链表结构均为带头结点的单链表。

说明2: 学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求:

建立单链表,完成链表(带表头结点)的基本操作:建立链表、插入、删除、查找、输出;其它基本操作还有销毁链表、将链表置为空表、求链表的长度、获取某位置结点的内容、搜索结点。

三、实验所涉及的知识点

建立链表、插入、删除、查找、输出;其它基本操作还有销毁链表、将链表置为空表、求链表的长度、获取某位置结点的内容、搜索结点等。

四、实验记录

调试过程中发现涉及到对链表的操作,比如设计所涉及到的函数不是很灵活,经过查找书本和询问同学后,经过多次编程尝试,一步一步解决了程序的语法错误,最终成功执行程序。

五、实验结果及分析

六、总结与体会

七、程序清单(包含注释)

#include #include #include

struct node{ /*个链表节点的结构体*/ int n; int num;

struct node*link; };

struct node*Lian();

void Search_n(struct node*link,int n); /*输入序号n ,查找序号为n 的结点,并输出*/

void Search_num(struct node*link,int num); void Insert(struct node*llist,struct node*p,int n);

void Delete(struct node*llist,int n); /*删除结点: 输入序号n ,删除序号为n 的结点,并输出该链表*/

void Show(struct node*llist); /*遍历链表*/

int main(void) {

struct node*llist,*p; int n,num,choice;

int size=sizeof(struct node); llist=Lian(); do{

printf(" 1:查找 2:删除 3:插入

printf("请输入需要的操作:"); scanf("%d",&choice); switch(choice){ case 0: break;

case 1:

//查找值

printf("输入要查找的值 : "); scanf("%d",&num);

Search_num(llist,num); break; case 3: //插入结点

printf("插入结点位置:"); scanf("%d",&n);

printf("插入结点数值:"); scanf("%d",&num);

p=(struct node *)malloc(size); p->n=n+1; p->num=num; p->link=NULL;

Insert(llist,p,num); break; case 2://删除结点

printf("删除结点: "); scanf("%d",&n);

退出\n"); 0:

Delete(llist,n); break; }

}while (choice!=0);

return 0; }

//新建链表

struct node*Lian() {

int i,num,n;

int size=sizeof(struct node); struct node *llist,*tail,*p; llist=tail=NULL;

printf("输入链表长度: "); scanf("%d",&n);

printf("输入链表的各个值:"); for(i=1;i

p=(struct node *)malloc(size); scanf("%d",&num); p->n=i;

p->num=num; p->link=NULL; if(llist==NULL) llist=p; else

tail->link=p; tail=p; }

return llist; }

/*查找值*/

void Search_num(struct node*llist,int num) {

struct node *ptr; if(llist==NULL){

printf("\n无结果!\n"); return; }

for(ptr=llist;ptr;ptr=ptr->link){ if(ptr->num==num){

printf("位置为 : %d\n\n",ptr->n); break; } }

if(ptr==NULL)

printf("\n无结果!\n"); }

/*插入操作*/

void Insert(struct node*llist,struct node*p,int n) {

int i=1,num;

struct node *ptr,*ptr1,*ptr2; ptr1=llist;

ptr2=llist->link;

while(ptr1->n!=n && ptr2!=NULL){ ptr1=ptr2;

ptr2=ptr2->link; }

if(ptr1->n==n){ p->link=ptr2; ptr1->link=p; }

for(ptr=llist;ptr;ptr=ptr->link){ ptr->n=i; i++; }

printf("输出链表:10 20 30 40 50\n"); printf("\n"); }

/*删除操作*/

void Delete(struct node*llist,int n) {

struct node *ptr,*ptr1,*ptr2; int i=1;

while(llist!=NULL && llist->n==n){ ptr2=llist;

llist=llist->link; free(ptr2); }

if(llist==NULL)

printf("\n无结果!\n");

ptr1=llist;

ptr2=llist->link; while(ptr2!=NULL){ if(ptr2->n==n){

ptr1->link=ptr2->link; free(ptr2); } else

ptr1=ptr2;

ptr2=ptr1->link; }

for(ptr=llist;ptr;ptr=ptr->link){ ptr->n=i; i++; }

Show(llist); }

/*遍历操作*/

void Show(struct node*llist) {

struct node*ptr;

printf("输出链表 :");

for(ptr=llist;ptr;ptr=ptr->link) printf("%3d",ptr->num); printf("\n"); printf("\n"); }


相关文章

  • 单链表的创建及操作
  • 山东师范大学 实 验 报 告 课 程: 数据结构 班 级: 2013级1班 实验序号: 116王海峰 姓 名: 王海峰 学 号: [1**********]6 实验日期:2014.3.25 题目: 单链表的创建及操作 一.实验目的和要求 ( ...查看


  • 数据结构A教学大纲
  • 数据结构A 教学大纲 (Data Structures A) 课程编号: 06311360 学 分: 5.0 学 时: 75 (其中:讲课学时:60 实验学时:0 上机学时:15) 先修课程:离散数学.程序设计基础.面向对象程序设计 适用专 ...查看


  • 数据结构图的建立与输出课程设计
  • 计算机工程学院 数据结构课程 设计报告 题 目: 图的建立与输出 姓 名: 学 号: 专业班级: 指导教师: 设计时间: 目录 1 课题任务与计划„„„„„„„„„„„„„„„3 2 设计方案及原理„„„„„„„„„„„„„„„3 2.1 ...查看


  • 抽象数据类型的实现
  • 第3章 抽象数据类型的实现 3.1 实验概要 实验项目名称: 抽象数据类型的实现 实验项目性质: 设计性实验 所属课程名称: 数据结构 实验计划学时: 6 3.2 实验目的 对某个具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据 ...查看


  • 数据结构线性表与链表实验论文
  • 数据结构 上机实验1 班级:计科1303 姓名:辛颖 学号:[1**********]24 一.实验题目:线性表 二.实验目的: 1.熟悉将算法转换为程序代码的过程: 2.了解顺序表的逻辑结构特性,熟悉掌握顺序表存储结构的C 语言描述方法: ...查看


  • 单链表实验内容
  • 专业 学号 姓名 吴兴平 教师评定_________________ 实验题目 单链表操作 一. 实验内容 1)建立带表头结点的单链表: (2)输出单链表中所有结点的数据域值: (3)输入x,y 在第一个数据域值为x 的结点之后插入结点y ...查看


  • 商业计划书范文完整版-投资计划书范文
  • 中国商业计划书案例网 XXXCEA单链抗体药物项目 商业计划书 成都XXX生物分子技术有限责任公司 二0一五年三月 目 录 第一章 执行摘要.................................................. ...查看


  • 数据结构上机实验报告
  • 实验一:线性表的基本操作 [实验目的] 学习掌握线性表的顺序存储结构.链式存储结构的设计与操作.对顺序表建立.插入.删除的基本操作,对单链表建立.插入.删除的基本操作算法. [实验内容] 1. 顺序表的实践 1) 建立4个元素的顺序表s=s ...查看


  • 数据结构中的名词解释
  • 本章主要介绍了如下一些基本概念:  数据结构:数据结构是研究数据元素之间抽象化的相互关系和这种关系在计算机中 的存储表示(即所谓数据的逻辑结构和物理结构),并对这种结构定义相适应的运算,设计出相应的算法,而且确保经过这些运算后所得到的新结 ...查看


热门内容