实验二静态链表

一、实验目的

巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。


二、实验内容

建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。

#include<iostream>
using namespace std;
const int MaxSize=100;
template<typename T>
struct SNode
{
	T data;
	int next;//指针域,不是指针类型
};
template<typename T>
class SLL
{
	public:
		SLL();//无参构造函数
		SLL(T a[],int n);//带参数的构造函数
		virtual ~SLL();//析构函数
		void Print();//遍历操作
		T Get(int i);//按位查找
		int Locate(T x);//按值查找
		void Insert(int i,T x);//插入操作
		void Delete(int i);//删除操作
	private:
		SNode<T>snode[MaxSize];//节点
		int first;//头指针
		int avail;//空闲链
		int length;//长度
};
template<typename T>
SLL<T>::SLL(T a[],int n)
{
	length=0;
	for(int i=0;i<MaxSize;i++)
	{
		snode[i].next=i+1;
	}
	snode[MaxSize-1].next=-1;
	avail=2;
	first=1;
	snode[first].next=-1;
	for(int j=n-1;j>=0;j--)
	{
		if(avail==-1)
		{
			break
		}
		int s=avail;
		avail=snode[avail].next;  
        snode[s].data=a[j];  
        snode[s].next=snode[first].next;    
        snode[first].next=s;    
        length++;    
	}
}
template<typename T>
SLL<T>::~SLL()
{
}
template<typename T>  
T SLL<T>::Get(int i)  
{  
    if(i<=0||i>length) throw"位置非法";  
    int p=first;  
    for(int j=0;j<i;j++)  
    {  
        p=snode[p].next;  
    }  
    return snode[p].data;  
}  
  
template<typename T>  
int SLL<T>::Locate(T x)  
{  
    int count=0;  
    int p=first;  
    while(snode[p].next!=-1)  
    {  
        p=snode[p].next;  
        if(snode[p].data == x) return count+1;  
        count++;  
    }  
    return -1;  
}  
template<typename T>  
void SLL<T>::Insert(int i, T x)  
{  
    if(i<0||i>length) throw"位置非法";  
    int p=first;  
    for(int j=1;j<i;j++)  
    {   p=snode[p].next;    /*或者p=node[p].next*/}  
    int s =snode[avail].next;  
    snode[avail].data=x;    
    snode[avail].next=snode[p].next;    
    snode[p].next=avail;    
    avail=s;    
    length++;  
}  
  
template<typename T>  
void SLL<T>::Delete(int i)  
{  
    if(i<0||i>length+1) throw"位置非法";  
    int p=first;  
    for(int j=1;j<=i;j++)  
    {    p=snode[p].next;  }  
    int q=snode[p].next;    
    T e=snode[p].data;    
    snode[p].next=snode[q].next;    
    snode[q].next=avail;    
    avail=q;    
    length--;  
}
void main()
{
}


猜你喜欢

转载自blog.csdn.net/Sing___546/article/details/78237858