南华大学
计算机科学与技术学院
实 验 报 告
( 2006 ~2007学年度 第一学期 )
课程名称
数据结构
实验名称
链表的创建和逆置
姓名
朱彦萍
学号
20054940104
专业
信息管理与信息系统
班级
051班
地点
经管机房
教师
吴取劲
1.实验目的及要求
实验目的:
通过对单链表的操作的实验,了解单链表的存储结构和操作方法,单链表是一种链式存储结构,使用一组任意的存储单元存储线性表中的元素,掌握链表的逆置,用指针进行操作。
(2)实验要求:
学习单链表的构建和处理
应用C语言对单链表实行逆置
(3) 硬件环境:
一台计算机
软件:
操作系统windowXP
Turbo C 2.0
2.实验步骤
(1)明确实验目的,确定实验内容。
(2)根据实验要求书写算法,画出程序流程图。
(3)根据算法书写程序,用C语言实现算法。
(4)上机调试程序,运行并测试程序。
(5)实验总结
(6)写出试验报告
3. 实验内容
(1)内容描述
链表是线性表的链式存储结构,它由结点组成,结点包括两个域,其中存储数据元素的域称为数据域;存储直接后继存储位置的域称为指针域.整个链的存取必须从头指针开始
本实验就是利用指针来运行的,先为链表分派存储空间,然后初始化链表的头指针,从链表的头指针开始,将链表的值依次赋值给另一个指针,原链表的最后一个结点为另一个链表的头指针,然后从头指针开始返回新链表的值,并打印输出。
(2)实验流程图:
主函数
主函数
输入结点数;
输入结点值
调用create产生一个链表
判断是否为空
为空
非空
p=head->next;
head->next=NULL
return head
非空
q=p;p=p->next;
q->next=head;
head=q;
判断P是否为空
为空
输出原来的链表和逆置后的链表
结束
调用turnback 函数new=turnback(old)
(3) 算法描述
算法思想:
通过指针的应用实现链表的逆置
算法描述:
#include "stdio.h"
单链表的类型定义如下:
typedef struct list //单链表类型定义
{ int no;
struct list *next;
}plist;
函数create定义如下:
plist *create(int n) //新建一个单链表
{ plist *p,*q,*h;
int i,x;
for(i=1;i<=n;i++)
{p=(plist *)malloc(sizeof(plist));
scanf("%d",&p->no);
if (i==1) h=p;
else q->next=p;
q=p;
}
p->next=NULL;
return h;
}
函数turnback的定义如下:
plist *turnback(head) //链表的逆置函数
plist *head;
{ plist *p,*q;
p=head->next;
head->next=NULL;
while(p!=NULL);
{ q=p;p=p->next;
q->next=head;
head=q;
}
return head;
}
函数out的定义如下:
out(p) //链表的输出函数
plist *p;
{ while(p->next!=NULL)
{printf("%d->",p->no);
p=p->next;
}
printf("%d\n",p->no);
}
(4)C语言程序:
#include "stdio.h"
typedef struct list //类型定义
{ int no; //链表的数据域为整型
struct list *next; //定义链表指针
}plist;
plist *create(int n) //新建链表函数
{ plist *p,*q,*h; //初始化指针
int i,x;
for(i=1;i<=n;i++)
{p=(plist *)malloc(sizeof(plist)); //为元素分配内存空间
scanf("%