zoukankan      html  css  js  c++  java
  • 实验二:线性表的实验【物联网1132-11】

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

    实验目的

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

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

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

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

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


    实验内容1:

    【顺序表】实现“建立一个N个学生成绩的顺序表,对表进行插入、删除、查找等操作。分别输出结果。”代码例如以下:


    #include<iostream.h>
    const int MaxSize = 100;            
    
    template<class T>        
    class SeqList  
    {  
    public:  
    	 SeqList();      
    	 SeqList(T a[],int n);   
    	 T Get(int i);               
    	 void Insert(int i,T x);     
    	 T Delete(int i);          
    	 void PrintList();        
    private:  
    	 T data[MaxSize];    
    	 int length; 
    };  
    
    template<class T>    
    SeqList<T>::SeqList(T a[],int n)  
    {  
    	 if(n>MaxSize)throw"错误";  
    	 for (int i=0;i<n;i++)    
    	     data[i]=a[i];  
    	 length=n;
    }  
      
    template<class T>    
    T SeqList<T>::Get(int i)  
    {  
    	 if (i<1&&i>length)throw"错误";  
    	 else 
    	 cout<<data[i-1]<<endl;  
    	 return 0;
    }  
      
    template<class T>    
    void SeqList<T>::Insert(int i,T x)  
    {  
      	 if (length>=MaxSize)throw"错误";  
    	 if (i<1||i>length+1)throw"错误";  
    	 for (int j=length;j>=i;j--)  
    		data[j]=data[j-1];            
    	 data[i-1]=x;  
    	 length++;  
    }  
      
    template<class T>    
    T SeqList<T>::Delete(int i)  
    {  
    	 if(length==0)throw"错误";  
    	 if(i<1||i>length)throw "错误";            
    	 for(int j=i;j<length;j++)  
    		data[j-1]=data[j];        
    	 length--;  
    	 return 0;  
    }  
      
    template<class T>    
    void SeqList<T>::PrintList()  
    {  
    	 for(int i=0;i<length;i++)  
    		cout<<data[i]<<" ";                 
    }  
    
    void main()  
    {  
          int score[5]={10,20,40,50,60};  
          SeqList<int>ScoreList(score, 5);  
          cout<<"一開始的第5个数是:"<<endl;  
          ScoreList.Get(5); 
    	  cout<<"成绩表例如以下:"<<endl;  
          ScoreList.PrintList(); 
    	  cout<<endl; 
          ScoreList.Insert(3,30);
          cout<<"插入后的成绩表是:"<<endl;  
    	  ScoreList.PrintList(); 
    	  cout<<endl; 
    	  ScoreList.Delete(4); 
    	  cout<<"删除后的成绩表是:"<<endl;  
    	  ScoreList.PrintList();   
    	  cout<<endl; 
    }  

    【单链表】实现“建立一个N个学生成绩的顺序表。对表进行插入、删除、查找等操作,分别输出结果。

    ”代码例如以下:


    #include<iostream>  
    using namespace std;  
      
    template<class T>  
    struct Student  
    {  
        T data;  
        Student<T> * next;  
    };  
      
    template<class T>  
    class LinkList  
    {  
    public:  
        LinkList();  
        LinkList(T a[],int n);  
        ~LinkList();  
        void Insert(int i,T x);  
        T Delete(int i);  
        void PrintList();  
    private:  
        Student<T> * first;  
    };  
      
    template<class T>  
    LinkList<T>::LinkList()  
    {  
        first=new Student<T>;  
        first->next=NULL;  
    }  
      
    template<class T>  
    LinkList<T>::LinkList(T a[],int n)  
    {  
        Student<T> *s;  
        first=new Student<T>;  
        first->next=NULL;  
        int i;  
        for(i=0;i<n;i++)  
        {  
            s=new Student<T>;  
            s->data=a[i];  
            s->next=first->next;  
            first->next=s;  
        }  
    }  
      
    template <class T>    
    LinkList<T> :: ~LinkList( )    
    {    
        Student<T> *q;    
        while (first != NULL)          
        {    
            q = first;                 
            first = first->next;        
            delete q;        
        }    
    }  
      
    template<class T>  
    void LinkList<T>::Insert(int i,T x)  
    {  
        Student<T> *p = first , *s;  
        int count=0;  
        while(p!=NULL&&count<i-1)  
        {  
            p=p->next;  
            count++;  
        }  
        if(p==NULL)throw"输入错误";  
            else{  
            s=new Student<T>;  
            s->data=x;  
            s->next=p->next;  
            p->next=s;  
        }  
    }  
      
    template<class T>  
    T LinkList<T>::Delete(int i)  
    {  
        Student<T> *p =first, *q;  
        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>  
    void LinkList<T>::PrintList()  
    {  
        Student<T> *p = first->next;  
        while(p!=NULL)  
        {  
            cout<<p->data<<" ";  
            p=p->next;  
        }  
        cout<<endl;  
    }  
      
    void main( )    
    {    
        int score[5]={10,20,40,50,60};    
        LinkList<int>ScoreList(score, 5);  
        ScoreList.PrintList();  
        ScoreList.Insert(4,30);  
        ScoreList.PrintList();  
        ScoreList.Delete(4);  
        ScoreList.PrintList();  
    }  

    实验内容2:【博客另附有博文介绍】


    实验内容3:

    【实现两个集合的相等判定、并、交和差运算】

    要求:  1)自己定义数据结构。2)自先存储结构,并设计算法。

    在VC中实现。

    #include<iostream>    
    using namespace std;    
        
    template<class T>    
    struct Student    
    {    
        T data;    
        Student<T> * next;    
    };    
        
    template<class T>    
    class LinkList    
    {    
    public:    
        LinkList();    
        LinkList(T a[],int n); 
    	void Compare();
        void PrintList();    
    private:    
        Student<T> * first;    
    };    
        
    template<class T>    
    LinkList<T>::LinkList()    
    {    
        first=new Student<T>;    
        first->next=NULL;    
    }    
        
    template<class T>    
    LinkList<T>::LinkList(T a[],int n)    
    {    
        Student<T> *s;    
        first=new Student<T>;    
        first->next=NULL;    
        int i;    
        for(i=0;i<n;i++)    //头插法
        {    
            s=new Student<T>;    
            s->data=a[i];    
            s->next=first->next;    
            first->next=s;    
        }    
    }    
        
    template<class T>    
    void LinkList<T>::PrintList()    
    {    
        Student<T> *p = first->next;    
        while(p!=NULL)    
        {    
            cout<<p->data<<" ";    
            p=p->next;    
        }    
        cout<<endl;    
    }    
    
    template<class T>    
    void LinkList<T>::Compare()    
    {
    	Student<T> *p = first->next;
    	int w;
    	int f=60;
    	if(p->data==f)
    	{
    		f=f-10;
    		p=p->next;
    		w=1;
    	}else
    	{
    		w=2;
    	}
    	if(w==1)
    	{
    		cout<<"与成绩1组一致"<<endl;
    	}else
    	{
    		cout<<"与成绩1组不一致"<<endl;
    	}
    }
        
    void main( )      
    {      
        int score[6]={10,20,30,40,50,60};      
        LinkList<int>ScoreList(score, 6); 
    	cout<<"第1个成绩数组是:";
    	ScoreList.PrintList();
    	int score1[6]={90,20,30,40,50,60};      
        LinkList<int>ScoreList1(score1, 6); 
    	cout<<"第2个成绩数组是:";
    	ScoreList1.PrintList();
    	cout<<endl;
    	cout<<"接下来进行对照"<<endl<<"-----------------"<<endl;
    	ScoreList.Compare();
    	ScoreList1.Compare();
    }    



  • 相关阅读:
    移动端前端开发调试
    Safari 前端开发调试 iOS 完美解决方案
    IOS下移除按钮原生样式 -webkit-appearance
    修复iPhone的safari浏览器上submit按钮圆角bug
    解决 placeholder 垂直不居中,偏上的问题
    如何使用JavaScript和正则表达式进行数据验证
    关于VSS(Volume Shadow Copy Service)一
    centOS目录结构
    如何解决windows 80端口被占用的情况
    linux系统TCP协议之Send(转)
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7181789.html
Copyright © 2011-2022 走看看