实验一 单链表及其应用
一.实验目的
(1)掌握线性表的链接存储结构;
(2)验证单链表及其基本操作的实现;
(3)进一步理解算法与程序的关系,能够将单链表算法转换为对应的程序。
(1)用头插法(或尾插法)建立带头结点的单链表;
(2)用已建立的单链表实现插入、删除、查找等基本操作。
三.实验要求
1.利用链表存储结构实现线性表的存储,并设计线性表的基本操作算法;
2.在实验过程中,对不同算法要考虑到时间复杂度和空间复杂度。
四.实验环境
PC微机
DOS操作系统或Windows操作系统
Turbo C程序集成环境或Visual C++程序集成环境
五.实验步骤及结果
1.LinkList.h代码:
#ifndefLinkList_H
#defineLinkList_H
template<class DataType>
struct Node
{
DataType data;
Node<DataType>*next;
};
template<class DataType>
class LinkList
{
public:
LinkList();
LinkList(DataTypea[],int n);
~LinkList();
intLocate(DataType x);
voidInsert(int i,DataType x);
DataTypeDelete(int i);
voidPrintList( );
private:
Node<DataType>*first;
};
#endif
2.Linklist.cpp代码:
#include<iostream>
usingnamespace std;
#include"LinkList.h"
template<class DataType>
LinkList<DataType>::LinkList( )
{
first=new Node<DataType>;
first->next=NULL;
}
template<class DataType>
LinkList<DataType>::LinkList(DataTypea[],int n)
{
Node <DataType>*r,*s;
first=new Node<DataType>;
r=first;
for (int i=0;i<n;i++)
{
s=newNode<DataType>;
s->data=a[i];
r->next=s;r=s;
}
r->next=NULL;
}
template<class DataType>
LinkList<DataType>::~LinkList()
{
Node<DataType>*q=NULL;
while(first!=NULL)
{
q=first;
first=first->next;
deleteq;
}
}
template<class DataType>
voidLinkList<DataType>::Insert(int i,DataType x)
{
Node<DataType>*p=first,*s=NULL;
int count=0;
while (p!=NULL && count < i-1)
{
p=p->next;
count++;
}
if (p==NULL) throw"位置";
else
{
s=newNode<DataType>; s->data=x;
s->next=p->next;p->next=s;
}
}
template<class DataType>
DataTypeLinkList<DataType>::Delete(int i)
{
Node<DataType>*p=first,*q=NULL;
DataType x;
int count=0;
while (p!=NULL && count<i-1)
{
p=p->next;
count++;
}
if (p==NULL||p->next==NULL)
throw"位置";
else
{
q=p->next;x=q->data;
p->next=q->next;
deleteq;
returnx;
}
}
template<class DataType>
intLinkList<DataType>::Locate(DataType x)
{
Node<DataType>*p=first->next;
int count=1;
while (p!=NULL)
{
if(p->data==x) return count;
p=p->next;
count++;
}
return 0;
}
template<class DataType>
voidLinkList<DataType>::PrintList( )
{
Node<DataType>*p=first->next;
while (p!=NULL)
{
cout<<p->data<<"";
p=p->next;
}
cout<<endl;
}
3.Linklist_main代码:
#include<iostream>
usingnamespace std;
#include"LinkList.cpp"
void main( )
{
int r[5]={1,2,3,4,5};
LinkList<int>L(r,5);
cout<<"20134515计算机科学与技术2班沈鹏\n";
cout<<"执行插入操作前数据为:"<<endl;
L.PrintList( );
try
{
L.Insert(2,3);
}
catch (char *s)
{
cout<<s<<endl;
}
cout<<"执行插入操作后数据为:"<<endl;
L.PrintList( );
cout<<"值为5的元素位置为:";
cout<<L.Locate(5)<<endl;
cout<<"执行删除操作前数据为:"<<endl;
L.PrintList( );
try
{
L.Delete(1);
}
catch (char *s)
{
cout<<s<<endl;
}
cout<<"执行删除操作后数据为:"<<endl;
L.PrintList( );
六.实验小结
通过这节课的学习,对数据结构这门课的认识深了一些,学习兴趣弄了一些,在今后的日子里一定会好好学习~