数据结构线性表

时间:2021-04-25 07:41:57


#ifndef SEQLIST_H
#define SEQLIST_H
#include<iostream>
using namespace std;
const int Maxsize = 100;
template<typename T>
class SeqList
{
public:
 SeqList();//构造空链表
 SeqList(T a[], int n); //构造长度为n的链表
 ~SeqList();
 int Length(){ return length; };//求线性表的长度
 T Get(int i);//按位查找
 int Locate(T x);
 void Insert(int i, T x);//插入操作中,在第i个元素插入x
 T Delete(int i);//删除第i个元素
 void PrintList();//输出线性表
private:
 T data[Maxsize];
 int length;
};
template<typename T>
SeqList<T>::SeqList()//构造空链表
{
 length = 0;
}
template<typename T>
SeqList<T>::SeqList(T a[], int n) //构造长度为n的链表
{
 int i;
 if (n > Maxsize)throw"参数非法";
 for (i = 0; i < n; i++)
  data[i] = a[i];
 length = n;
}
template<typename T>
SeqList<T>::~SeqList()
{
 //delete[]data;
}
template<typename T>
T SeqList<T>::Get(int i)//按位查找
{
 if (i<1 && i>length)throw"查找位置非法";
 else
  return data[i - 1];
}
template<typename T>
int SeqList<T>::Locate(T x)
{
 int i;
 for (i = 0; i < length;i++)
 if (data[i] == x)return i + 1;
 return 0;
}
template<typename T>
void SeqList<T>::Insert(int i, T x)//插入操作中,在第i个元素插入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];
 data[i - 1] = x;
 length++;
}
template<typename T>
T SeqList<T>::Delete(int i)//删除第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];
 length--;
 return x;
}
template<typename T>
void SeqList<T>::PrintList()//输出线性表
{
 int i;
 for (i = 0; i < length; i++)
  cout <<" "<<data[i];
 cout << endl;
}
#endif

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

#include"SeqList.h"
#include<iostream>
using namespace std;
void main()
{
 int a[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 };
 int m, n;
 SeqList<int> zxh(a,10);
 cout << "构造的函数数组:";
 zxh.PrintList();
 cout << "请输入您要插入的数字及其位置:";
 cin >> m >> n;
  zxh.Insert(n,m);
 cout << "更改后函数数组:";
 zxh.PrintList();
 cout << "请输入您想删除的元素的位置:";
 cin >> m;
 zxh.Delete(m);
 cout << "更改后函数数组:";
 zxh.PrintList();
 cout << "请输入您想查找的元素的位置:";
 cin >> m;
 cout << "您查询的元素:";
 cout << zxh.Get(m) << endl;;
 cout << "请输入您要查询的元素:";
 cin >> m;
 cout << "您要查询的元素的位置:";
 cout << zxh.Locate(m) << endl;;
}

上面代码是线性表的主要能实现的功能,这个代码是学数据结构的基础代码。他主要调动了学者对线性表的认识,在刚开是编写的时候,我没有那个数组的构造函数,只有一个初始化的构造函数。在调用插入函数的时候我就一直没有办法实现元素的插入,因为在初始话的时候length变成了0,这就无法在线性表中进行插入。因为我是学完整张才回来便携的。我以为他和栈中的出栈入栈是一个原理。结果显示是我想错了。在线性表中length=0是初始化但是我们还是要在给他开辟一个长度供他实现基本操作的。最后一个问题就是在析构函数中我也是犯了同样的错误,在线性表中的析构函数是不需要任何东西的。