山东中医药大学《数据结构》实验1

来源:互联网 发布:淘宝优惠卷是真的假的 编辑:程序博客网 时间:2024/06/08 16:49

实验一 单链表及其应用

一.实验目的

(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( );

六.实验小结

通过这节课的学习,对数据结构这门课的认识深了一些,学习兴趣弄了一些,在今后的日子里一定会好好学习~

0 0
原创粉丝点击