您的位置:首页 > 其它

线性表综合实验之单链表的实现

2017-10-13 22:06 417 查看
#include<iostream>
using namespace std;
template<class T>
struct Node{
T data;
Node<T> *next;
};
template<class T>
class Linklist
{
private:
Node<T> *first;
public:
Linklist(){first=new Node<T>;first->next=NULL;}
Linklist(T a[],int n);
~Linklist(){}
int Length();
T Number_get(int i);
int Location_get(T x);
void Insert(int i,T x);
T Delete(int i);
void Printlist();
};
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>
int Linklist<T>::Length()
{
Node<T> *p;
p=first->next;
int count=0;
while(p!=NULL)
{
p=p->next;
count++;
}
return count;
}
template<class T>
T Linklist<T>::Number_get(int i)
{
Node<T> *p;
p=first->next;
for(int count=1;count<i;count++)
{
p=p->next;
count++;
}
if(p==NULL)
throw("位置错误");
else
return p->data;

}
template<class T>
int Linklist<T>::Location_get(T x)
{
Node<T> *p;
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>::Insert(int i,T x)
{
Node<T> *p;
p=first;
for(int k=1;k<=i-1;k++)
{
p=p->next;
}
Node<T> *s ;
s=new Node<T>;
s->data=x;
s->next=p->next;
p->next=s;
}
template<class T>
T Linklist<T>::Delete(int i)
{
int x;
Node<T> *p;
p=first;
for(int j=1;j<i;j++)
{
p=p->next;
}
Node<T> *s;
s=new Node<T>;
s=p->next;
x=s->data;
p->next=s->next;
delete s;
return x;
}
template<class T>
void Linklist<T>::Printlist()
{
Node<T> *p;
p=first->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int main()
{
int stu[10]={90,87,95,77,80,91,74,89,92,97};
Linklist<int> student(stu,10);
cout<<"表的长度为:"<<student.Length()<<endl;
cout<<"全部学生成绩如下:"<<endl;
student.Printlist();
student.Number_get(3);
cout<<"第三位学生的成绩为:"<<student.Number_get(3)<<endl;
cout<<"成绩为90的学生序号为:"<<student.Location_get(90)<<endl;
cout<<"在序号为1的学生后面插进新成绩80:"<<endl;
student.Insert(1,80);
student.Printlist();
cout<<"删除序号为2的学生的成绩:"<<endl;
student.Delete(2);
student.Printlist();
return 0;
}


一、实验目的

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

二、实验时间

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

三、实验内容

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

        2、用单链表实现。

四、实验结果截图



五、实验心得
          第一次进行单链表的实现操作,期间还是遇到了不少的问题。本人对C++语言的熟练程度还不够,所以在实验当中需要借助书本或者网上的一些讲解。一开始是由书本的例题的算法进行初步的编写,但是由于算法不是真正完整的程序,故在编译当中肯定会出现不少的错误,这时候就依照程序的提示,一点点的进行修改和编译,实在不会修改的时候就会百度相关的语句讲解,直到程序最后成功运行。这样的方法比较笨拙而且效率不是很高,但是这是我至今发现自己最能掌握的程度,而且在这个过程当中,可以正确地发现自己对操作不懂不掌握的地方,随后的独立思考与设法解决问题更是有助于自己理解相关的知识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: