加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 06:02:52 所属栏目:安全 来源:网络整理
导读:《数据结构》实验二: 线性表实验 一..实验目的 巩固线性表的数据结构,学会线性表的应用。 1.回顾线性表的逻辑结构,线性表的物理存储结构和常见操作。 2.学习运用线性表的知识来解决实际问题。 3.进一步巩固程序调试方法。 4.进一步巩固模板程序设计。 二

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

一..实验目的

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

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> 

执行结果如下图:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读