单链表的基本操作..doc
文本预览下载声明
课程名称 数据结构 实验名称 单链表的基本操作 日期 11月14号 学生学号 ******* 姓名 *** 班级 B110531班 实验目的:掌握单链表的查找、插入、删除等操作 实验条件:电脑一台、VC++环境 实验内容与步骤:
内容:建立一个有序的单链表,并实现下列操作:
显示所有的元素
查找值为x的元素
插入值为x的元素,并保持有序
删除第i个元素
步骤:在显示所有元素时,因为要有序,所以还有一个对链表的内容进行由小到大的排序的过程,这里用了冒泡法排序。
建立链表要先定义其存储结构,然后向系统申请空间创建一个单链表,用一个头插法建立一个单链表,每读入一个数据,生成一个新的结点,将读入的数据存放到新结点的数据域中。
在做查找时,由于每个结点的存储位置都存放在其前一结点的next域中,所以只能从链表的头指针出发,顺链域next逐个结点往下搜索,直到找到一个结点值与给定的值相等即可。
在做插入时,首先要找到要找到插入的位置,用一个指针指向它,然后申请新的节点空间,最后就是通过修改指针将x插入链表中。
在做删除第i个元素时,首先要通过指针方式找到第i-1个结点并用一个指针指示,然后再删除此结点,并释放存储空间。在此过程中要判断删除的位置是否合法。
实验总结(结论或问题分析):
在做单链表的查找,插入,删除时,可通过output函数来输出,以检验插入删除是否正确。用冒泡法对链表的内容进行由小到大的排序,达到有序输出的目的。凡是涉及到链表的,至少要用到一个流动指针。另外,在做单链表的查找时,有两种方法,一种是按序号查找,一种是按值查找,此为要查找值为x的元素,所以用的是按值查找的方法。 实验成绩 任课教师签名
实验二的源程序:
#include stdio.h
#include malloc.h//头文件的调用
typedefstruct Node//链表结点的定义
{
int data;
struct Node * next;
}Node,* LinkList;
void main()//主函数
{
LinkList H;//定义头指针
Node * InitList();//声明函数
voidOutPut(LinkList L);
voidCreatFromHead(LinkList L);
voidSortList(LinkList L);
voidInsertList(LinkList L);
voidDelList(LinkList L);
H=InitList();//调用函数
CreatFromHead(H);
SortList(H);
InsertList(H);
DelList(H);
}
LinkListInitList()//定义创建链表的函数
{
LinkList p;
p=(Node *)malloc(sizeof(Node));
p-next=NULL;
printf(链表的初始化成功!\n);
return p;
}
void OutPut(LinkList L)//定义输出函数
{
LinkList p;
p=L-next;
while(p!=NULL)
{
printf(%d\t,p-data);
p=p-next;
}
printf(\n);
}
void CreatFromHead(LinkList L)//定义为链表输入内容的函数
{
Node *s;
int e;
int flag=1;
printf(请输入整型数值! 输入数值“0”表示输入结束!\n:);
while(flag)
{
scanf(%d,e);
if(e!=0)
{
s=(Node *)malloc(sizeof(Node));//申请结点空间
s-data=e;
s-next=L-next;
L-next=s;
}
else flag=0;
}
}
void InsertList(LinkList L)//定义插入函数
{
int k;
LinkListp,s;
p=L;
printf(请输入要插入的元素:);
scanf(%d,k);//接收输入的数据
s=(Node *)malloc(sizeof(Node));//申请接点空间
s-data=k;
printf(\n);
while(p-next!=NULL)//按从小到大的顺序进行插入
{
if(kp-next-data)
{
s
显示全部