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

前端之家收集整理的这篇文章主要介绍了《数据结构》实验二: 线性表实验(下)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

一..实验目的

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

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> 

执行结果如下图:

原文链接:https://www.f2er.com/datastructure/382752.html

猜你在找的数据结构相关文章