数据结构试验 顺序表

实验题目
顺序表的实现

实验内容
实现一个顺序表(包括常用基本操作)。测试顺序表。

实验要求
独立完成、严禁抄袭、参考别人的需要注明出处。提供实验代码、测试情况、遇到的问题是如何解决的。

#include <iostream>
#include <cstdio>
using namespace std;
template<class T>
class SqList
{
	public:
		SqList(int cap=100);//顺序表初始化 
		bool insert(int i,T e);//插入元素 
		bool remove(int i);//删除元素 
		bool push_back(T e);//尾部插入 
		bool pop_back();//尾部删除 
		bool insert_front(T e);//头部插入 
		bool remove_front();//头部删除 
		bool get(int i,T &e);//获取元素的值 
		bool set(int i,T e);//修改元素的值 
		int size();//获取表的大小 
		int find(T e);//查找元素 
		void traverse();//遍历顺序表 
	private:
		T *data;
		int capacity,n;
		bool realloc();//分配空间 
};//顺序表 

template<class T>
SqList<T>::SqList(int cap)
{
	data=new T[cap];
	capacity=cap;
	n=0;
}

template<class T>
bool SqList<T>::insert(int i,T e)
{
	if(i<1||i>n+1)
		return false;//检查i是否合法 
	if(n>=capacity)
		if(!realloc()) return false;//分配更大内存块 
	for(int j=n;j>=i;j--)
		data[j]=data[j-1];
	data[i-1]=e;
	n++;
}

template<class T>
bool SqList<T>::remove(int i)
{
	if(i<1||i>n)
		return false;
	for(int j=i;j<n;j++)
		data[j-1]=data[j];
	n--;
	return true;
}

template<class T>
bool SqList<T>::push_back(T e)
{
	if(n>=capacity)
		if(!realloc()) return false;
	data[n++]=e;
	return true;
}

template<class T>
bool SqList<T>::pop_back()
{
	if(n<=0)
		return false;
	n--;
	return true;
}

template<class T>
bool SqList<T>::insert_front(T e)
{
	if(n>=capacity)
		if(!realloc()) return false;
	for(int j=n;j>=1;j--)
		data[j]=data[j-1];
	data[0]=e;
	n++;
}

template<class T>
bool SqList<T>::remove_front()
{
	if(n<=0)
		return false;
	for(int i=0;i<n;i++)
		data[i]=data[i+1];
	n--;
	return true;
}

template<class T>
bool SqList<T>::get(int i,T &e)
{
	if(i<1||i>n)
		return false;
	e=data[i-1];
	return true;
}

template<class T>
bool SqList<T>::set(int i,T e)
{
	if(i<1||i>n)
		return false;
	data[i-1]=e;
	return true;
}

template<class T>
int SqList<T>::size()
{
	return n;
}

template<class T>
int SqList<T>::find(T e)
{
	for(int i=0;i<n;i++)
		if(data[i]==e)
			return i+1;//找到返回位置 
	return 0;//未找到返回0 
}

template<class T>
void SqList<T>::traverse()
{
	if(n==0)
	{
		cout<<"表是空的"<<endl;
		return;
	}
	cout<<"表中元素:";
	for(int i=0;i<n;i++)
		cout<<data[i]<<" "; 
	cout<<endl;
}

template<class T>
bool SqList<T>::realloc()
{
	T *p=new T[2*capacity];
	if(!p) return false;
	for(int i=0;i<capacity;i++)
		p[i]=data[i];
	capacity*=2;
	delete[] data;
	data=p;
	return true;
}


int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	//数据测试 
	SqList<int> L;
	int n,val;
	n=5;
	for(int i=1;i<=n;i++)
	{
		L.insert(i,i);
	}//n=5,依次插入1,2,3,4,5 
	cout<<"表的大小:"<<L.size()<<endl;
	L.traverse();
	L.push_back(6);//尾部插入元素6 
	cout<<"表的大小:"<<L.size()<<endl;
	L.traverse();
	L.insert_front(0);//首部插入元素0 
	cout<<"表的大小:"<<L.size()<<endl;
	L.traverse();
	L.remove(3);//删除第3个元素 
	cout<<"表的大小:"<<L.size()<<endl;
	L.traverse();
	L.set(1,1);//将第1个元素的值修改为1 
	L.set(2,2);//将第2个元素的值修改为2 
	cout<<"查找元素位置(0表示未找到):"<<endl;
	cout<<"元素2:"<<L.find(2)<<endl;
	cout<<"元素3:"<<L.find(3)<<endl;
	cout<<"元素4:"<<L.find(4)<<endl;
	cout<<"表的大小:"<<L.size()<<endl;
	L.traverse();
	L.get(3,val);//获取第3个元素的值 
	cout<<"第3个元素的值:"<<val<<endl;
	L.pop_back();//删除尾部元素 
	cout<<"表的大小:"<<L.size()<<endl;
	L.traverse();
	L.remove_front();//删除首部元素 
	cout<<"表的大小:"<<L.size()<<endl;
	L.traverse();
	for(int i=1;i<=4;i++)
	{
		L.pop_back();//删除尾部元素 
		cout<<"表的大小:"<<L.size()<<endl;
		L.traverse();
	}
	return 0;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

球王武磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值