线性表顺序存储总结

顺序存储,无非就是数组

首先创建SeqList.h头文件用以包含基本构造函数,及其功能实现再新建一个SeqList.cpp。代码实现用模板类定义:

//SeqList.h
const int MaxSize=100;
template<class T>
class SeqList{
	public:
		SeqList(){
			length=0;
		}
		SeqList(T a[],int n);//有参构造函数 
		~SeqList(){};//析构函数 
		int GetLength(){
			return length;
		} 
		T Get(int i);
	    //去顺序表中第i个元素 
		void Set(int i,T x);
        void Insert(int i, T x);        // 在顺序表中第i个位置插入元素x
   		T Delete(int i);                // 删除顺序表的第i个元素
   		int Locate(T x); 
   		void PrintList();
		private:
			T data[MaxSize];
			int length;
}; 

*************

//SeqList.cpp
#include<iostream>
#pragma hdrstop
#include "SeqList.h"
using namespace std;
template<class T>
SeqList<T>::SeqList(T a[],int n){
	if(n>MaxSize)
	throw "参数非法";
	for(int i=0;i<n;i++){
		data[i]=a[i];
		length=n;
	} 
}
// 插入函数Insert,将x插入到顺序表第i个位置
template<class T>
void SeqList<T>::Insert(int i, T x)
{ int j;
  if (length>=MaxSize) throw "上溢";
  if (i<1 || i>length+1) throw "位置错误";
  for (j=length; j>=i; j--)
       data[j]=data[j-1];   //注意第j个元素存在数组下标为j-1处
  data[i-1]=x;
  length++;
}
//  删除函数Delete,删除顺序表中第i个元素
template <class T > 
T SeqList<T>::Delete(int i)
{ int j;
  if (length==0 ) throw "下溢";
  if (i<1 || i>length) throw "位置错误";
  T x=data[i-1];
  for (j=i; j<length; j++)
    data[j-1]=data[j];   //注意此处j已经是元素所在的数组下标
  length--;
  return x;

}
// 定位函数Locate,确定x在顺序表中的位置
template <class T >
int SeqList<T>::Locate(T x)
{
  for(int i=0;i<length;i++)
	  if(x==data[i])
		  return i+1;
  return 0;
}
//取函数Get,从顺序表中返回第i个元素
template <class T>
T SeqList<T>::Get(int i)
{ if (i>0 && i<=length)
     return data[i-1];
  else
   { T stu;
	 return stu;
   }
}
//增加的,设定线性表第i个元素 
template <class T>
void SeqList<T>::Set(int i,T x)
   { if (1<=i && i<=length+1) 
            data[i-1]=x;
       else 
          throw "位置出错";
}
template <class T>
void SeqList<T>::PrintList(){
	for(int i=0;i<length;i++)
	cout<<data[i]<<" ";

}

测试类

//SeqListdemo1.cpp
#include<iostream>
#include "SeqList.cpp"
using namespace std;
int main(){
	SeqList<int> d;
	try{
		d.Insert(1,10);
		d.Insert(2,20);
		d.Insert(3,30);
		cout<<"按位查找第二个元素:"<<d.Get(2)<<endl;
		cout<<"按值查找20的位置:"<<d.Locate(20)<<endl;
		cout<<"删除第二个元素:"<< d.Delete(2)<<endl;
		cout<<"顺序表的长度:"<<d.GetLength()<<endl; 
		//cout<<"顺序表的元素:"<<d.PrintList(); 
		int a[]={1,2,3,4,5,6,7};
		SeqList<int> g(a,7);
		cout<<"在第三个位置上插入元素8"<<endl;
		g.Insert(3,8);
		//cout<<"插入后的顺序表元素为:"<< g.PrintList();
		 
	}
	catch(char* msg){
		cout<<msg;
	}
	return 0;
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值