⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 顺序表.cpp

📁 数据结构:顺序表
💻 CPP
字号:
//定义线性能顺序表存储模板类的实现文件“顺序表.cpp”
#include<iostream.h>
#include<stdlib.h>

#include "顺序表.h"

//构造函数,初始化线性表
template<class ElemType>
LinearList<ElemType>::LinearList(int ms)
{
	if(ms<=0) {cout<<"ms值无效!"<<endl; exit(1);}
	list=new ElemType[ms];
	if(!list){
		cerr<<"动态存储空间分配失败!"<<endl;
		exit(1);
	}
	size=0;
	MaxSize=ms;
}

//拷贝构造函数
template<class ElemType>
LinearList<ElemType>::LinearList(LinearList<ElemType>& a)
{
	list=new ElemType[a.MaxSize];
	if(!list){
		cerr<<"动态存储空间分配失败!"<<endl;
		exit(1);
	}
	for(int i=0; i<=a.size; i++) list[i]=a.list[i];
	size=a.size;
	MaxSize=a.MaxSize;
}

//得到线性表中指定下标位置的元素
template<class ElemType>
ElemType LinearList<ElemType>::GetElemList(int pos)
{
	if(pos<0 || pos>size-1){
		cerr<<"下标越界!"<<endl;
		exit(1);
	}
	return list[pos];
}

//遍历线性表
template<class ElemType>
void LinearList<ElemType>::TraverList()
{
	for(int i=0; i<size; i++) cout<<list[i]<<' ';
	cout<<endl;
}

//向线性表中插入元素
template<class ElemType>
void LinearList<ElemType>::InsertList(const ElemType& item, int mark)
//假定当mark等于1时插入到表头,等于2时插入到表尾
{
	//检查mark的合法性
	if(mark!=1 && mark!=2){
		cout<<"mark值无效!"<<endl;
		exit(1);
	}
	//对动态空间用完的情况进行处理
	if(size==MaxSize){
		ElemType *p=new ElemType[2*MaxSize];  //空间增加一倍
		if(!p){//分配失败退出运行
			cout<<"存储空间用完!"<<endl;
			exit(1);
		}
		for(int i=0; i<size; i++)        //把原空间内容复制到新空间中
			p[i]=list[i];
		delete []list;                  //释放原线性空间
		list=p;                         //使list指向新线性表空间
		MaxSize=2*MaxSize;              //把线性表空间大小修改为新的长度
	}
	//把元素插入到表头
	if(mark==1){
		for(int i=size-1; i>=0; i++)
			list[i+1]=list[i];
		list[0]=item;
	}
	//元素插入到表尾
	else list[size]=item;
	//线性表长度增1
	size++;
	return;
}

//从线性表中删除元素
template<class ElemType>
bool LinearList<ElemType>::DeleteList(ElemType& item, int mark)
//假定当mark等于1时删除表头元素,等于2时删除表尾元素
{
	//线性表为空返回假
	if(size==0) return false;
	//检查mark的合法性
	if(mark!=1 && mark!=2){
		cout<<"mark值无效!"<<endl;
		exit(1);
	}
	//删除表头元素
	if(mark==1){
		item=list[0];
		for(int i=1; i<size; i++)
			list[i-1]=list[i];
	}
	//删除表尾元素
	else item=list[size-1];
	//线性表长度减1
	size--;
	//返回真表示删除成功
	return true;
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -