《数据结构》实验二: 线性表实验(下)

来源:互联网 发布:可关闭对联广告js代码 编辑:程序博客网 时间:2024/05/26 22:55

 《数据结构》实验二:     线性表实验

一..实验目的

     巩固线性表的数据结构,学会线性表的应用。

1.回顾线性表的逻辑结构,线性表的物理存储结构和常见操作。

2.学习运用线性表的知识来解决实际问题。

3.进一步巩固程序调试方法。

4.进一步巩固模板程序设计。

二.实验时间

   准备时间为第2周到第4周,具体集中实验时间为第4周第2次课。2个学时。

三..实验内容

1.建立一个N个学生成绩的顺序表,对表进行插入、删除、查找等操作。分别输出结果。

要求如下:

1)用顺序表来实现。

2)用单链表来实现。

2.解决约瑟夫问题

    设有编号为1,2,3,n的n(n>0)个人围在一起,每人持有一个密码m,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从下一个人开始重新报数,报到m时停止报数,报m的人出圈,……直到的所有人出圈为止。当给定n和m后,输出出圈的次序。

要求如下:自定义数据结构,确定存储方法,并设计算法。在主程序中输入n和m后,输出结果。

3.实现两个集合的相等判定、并、交和差运算。要求:

  1)自定义数据结构

  2)自先存储结构,并设计算法。在VC中实现。

以上三题,第1题必须完成。第2和第3题可以作为选做题。

四.参考资料

    实验教材P170到182.

五.实验报告

1.在博客中先写上实习目的和内容,画出主要操作运算算法图,然后分别上传程序代码。插入调试关键结果截图。

2.写一个博文,比较总结线性表的两种主要存储结果:顺序表和单链表。

 实验2.1.2用单链表实现

<span style="font-size:14px;">#ifndef LinkList_H  #define LinkList_H  template<class T>  struct Node  {      T data;      Node<T> * next;  };  template<class T>  class LinkList  {  public:      LinkList();      LinkList(T a[],int n);      ~LinkList();      int Locate(T x);      void Insert(int i,T x);      T Delete(int i);      void PrintList();  private:      Node<T> * first;  };  #endif      #include<iostream>  using namespace std;  #include"LinkList.h"    template<class T>  LinkList<T>::LinkList()  {      first=new Node<T>;      first->next=NULL;  }    template<class T>  LinkList<T>::LinkList(T a[],int n)  {      Node<T>* r,* s;      first=new Node<T>;      r=first;      for(int i=0;i<n;i++)      {          s=new Node<T>;          s->data=a[i];          r->next=s;r=s;      }      r->next=NULL;  }    template<class T>  LinkList<T>::~LinkList()  {      Node<T>* q=NULL;      while (first!=NULL)      {          q=first;          first=first->next;          delete q;      }  }    template<class T>  void LinkList<T>::Insert(int i,T x)  {      Node<T>* p=first,* s=NULL;      int count=0;      while(p!=NULL&&count<i-1)      {          p=p->next;          count++;      }      if(p==NULL)throw"位置";      else{          s=new Node<T>;s->data=x;          s->next=p->next;p->next=s;      }  }    template<class T>  T LinkList<T>::Delete(int i)  {      Node<T>* p=first,* q=NULL;      T 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;          delete q;          return x;      }  }    template<class T>  int LinkList<T>::Locate(T x)  {      Node<T> * p=first->next;      int count=1;      while(p!=NULL)      {          if(p->data==x) return count;          p=p->next;          count++;      }      return 0;  }    template<class T>  void LinkList<T>::PrintList()  {      Node<T>* p=first->next;      while(p!=NULL)      {          cout<<p->data<<" ";          p=p->next;      }      cout<<endl;  }      #include<iostream>  using namespace std;  #include"LinkList.cpp"    void main()  {      int r[5]={88,75,93,86,92};      LinkList<int>L(r,5);      cout<<"执行插入操作前数据为:"<<endl;      L.PrintList();      try      {          L.Insert(3,95);      }      catch(char * s)      {          cout<<s<<endl;      }      cout<<"执行插入操作后数据为:"<<endl;      L.PrintList();      cout<<"值为93的元素位置为:";      cout<<L.Locate(93)<<endl;      cout<<"执行删除操作前数据为:"<<endl;      L.PrintList();      try      {          L.Delete(2);      }      catch(char * s)      {          cout<<s<<endl;      }      cout<<"执行删除操作后数据为:"<<endl;      L.PrintList();  }</span> 

执行结果如下图:


0 0
原创粉丝点击