设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 安全 > 正文

《数据结构》实验二 线性表的实验(2)

发布时间:2021-05-25 01:04 所属栏目:53 来源:网络整理
导读:头文件 templateclass Tstruct jied{T data;jiedT *next;};templateclass Tclass Linklist{public:Linklist();Linklist(T a[],int n);~Linklist();int Length();void add(int i,T x);T shanc(int i);T chaz1(int i)

头文件

template<class T>
struct jied
{
	T data;
	jied<T> *next;
};
template<class T>
class Linklist
{
	public:
		Linklist();
		Linklist(T a[],int n);
		~Linklist();
		int Length();
		void add(int i,T x);
		T shanc(int i);
		T chaz1(int i);
		int chaz2(T x);
		void shuc();
	private:
		jied<T> *first;
};


源文件

#include "dlb1.h"
template<class T>
Linklist<T>::Linklist()
{
	first=new jied<T>;
	first->next=NULL;
}
template<class T>
Linklist<T>::Linklist(T a[],int n)
{
	int i;
	jied<T> *w,*j;
	first=new jied<T>;
	w=first;
	for(i=0;i<n;i++)
	{
		j=new jied<T>;
		j->data=a[i];
		w->next=j;
		w=j;
	}
	w->next=NULL;
}
template<class T>
Linklist<T>::~Linklist()
{
	jied<T> *p;
	while(first!=NULL)
	{
		p=first;
		first=first->next;
		delete p;
	}
}
template<class T>
int Linklist<T>::Length()
{
	jied<T> *p;  int count;
	p=first->next;  count=0;
	while(p!=NULL)
	{
		p=p->next;
		count++;
	}
	return count;
}
template<class T>
void Linklist<T>::add(int i,T x)
{
	jied<T> *p,*s;  int count;
	p=first;  count=0;
	while(p!=NULL && count<i-1)
	{
		p=p->next;
		count++;
	}
	if(p==NULL)throw"位置错误";
	else
	{
		s=new jied<T>;
		s->data=x;
		s->next=p->next;
		p->next=s;
	}
}
template<class T>
T Linklist<T>::shanc(int i)
{
	jied<T> *p,*r;  T x;  int count;
	p=first;  count=0;
	while(p!=NULL && count<i-1)
	{
		p=p->next;
		count++;
	}
	if(p==NULL || p->next==NULL)throw"位置错误";
	else
	{
		r=p->next;
		x=r->data;
		p->next=r->next;
		delete r;
		return x;
	}
}
template<class T>
T Linklist<T>::chaz1(int i)
{
	jied<T> *p;  int count;
	p=first->next;  count=1;
	while(p!=NULL && count<i)
	{
		p=p->next;
		count++;
	}
	if(p==NULL)throw"查找位置错误";
	else
		return p->data;
}
template<class T>
int Linklist<T>::chaz2(T x)
{
	jied<T> *p;  int count;
	p=first->next;  count=1;
	while(p!=NULL)
	{
		if(p->data==x)
			return count;
		p=p->next;
		count++;
	}
	return 0;
}
template<class T>
void Linklist<T>::shuc()
{
	jied<T> *p; 
	p=first->next;
	while(p!=NULL)
	{
		cout<<p->data<<setw(5);
		p=p->next;
	}
	cout<<endl;
}


?

#include<iomanip>
#include<iostream>
#include "dlb2.cpp"
using namespace std;
void main()
{
	int score[5]={60,70,80,90,100};
	float average=0.0;
	Linklist<int> g(score,5);
	cout<<"插入数据前的成绩为:"<<endl;
	g.shuc();
	average=(60+70+80+90+100)/5.0;
	cout<<"插入数据前成绩的平均分为:"<<average<<endl;
	try
	{
		g.add(4,95);
	}
	catch(char *a)
	{
		cout<<a<<endl;
	}
	cout<<"插入数据后的成绩为:"<<endl;
	g.shuc();
	cout<<"成绩为60的位置为:";
	cout<<g.chaz2(60)<<endl;
	cout<<"删除第三个数据前的成绩为:"<<endl;
	g.shuc();
	try
	{
		g.shanc(3);
	}
	catch(char *a)
	{
		cout<<a<<endl;
	}
	cout<<"删除数据后的成绩为:"<<endl;
	g.shuc();
}


结果截图:

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

?

?比较总结线性表的两种主要存储结果

(1)顺序表

系统给顺序表分配的空间的一定的,我们在这一定的空间内对数据进行操作,就算删除了一些数据,线性表所占空间的长度还是没有改变的。

(2)单链表

系统给单链表分配的空间是不定的,需要插入一个数据时,系统就会分配一个空间给单链表,不需要时就释放空间,所以单链表的空间长度比较灵活。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读