C++数据结构之线性表
- 线性表的长度是指线性表中的数据元素的个数
- 李春葆-数据结构C++ P44代码实现
list.h
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#include <iostream>
using namespace std;
#define MaxSize 10000
template <class T>
class SqListClass
{
T *data;
int length;
public:
SqListClass();//构造函数
~SqListClass();//析构函数
void CreateList(T a[],int n);//由a数组中的元素建立顺序表
void DispList();//输出
int ListLength();//顺序表长度
bool GetElem(int i,T &e);//求顺序表中某序号的元素值
int LocateElem(T e);//按元素值查找其序号
bool ListInsert(int i,T e);//插入数据元素
bool ListDelete(int i);//删除数据元素
};
template <class T>
SqListClass<T>::SqListClass()//构造函数的实现
{
data = new T[MaxSize];
length = 0;
}
template <class T>
SqListClass<T>::~SqListClass()
{
delete [] data;
}
template <class T>
void SqListClass<T>::CreateList(T a[],int n)
{
int i;
for(i = 0;i < n;i++)
data[i] = a[i];
length = i;
}
template <class T>
void SqListClass<T>::DispList()
{
int i;
if(length > 0)
{
for(i=0;i<length;i++)
{
cout << data[i] << " ";
}
cout << endl;
}
}
template <class T>
int SqListClass<T>::ListLength()
{
return length;
}
template <class T>
bool SqListClass<T>::GetElem(int i,T &e)//求顺序表中某序号的元素值
{
if(i<1 || i>length)//i是逻辑序号
return false;
else
e = data[i-1];//i-1是物理序号
return true;
}
template <class T>
int SqListClass<T>::LocateElem(T e)//按元素值查找其逻辑序号
{
int i = 0;//i是逻辑序号
while(i<length && data[i]!=e)//找到e
i++;
if(i >= length)
return 0;
else
return i+1;//返回逻辑序号
}
template <class T>
bool SqListClass<T>::ListInsert(int i,T e)
{
int j;
if(i<1 || i>length)//i是逻辑序号
return false;
for(j = length;j>=i;j--)
data[j] = data[j-1];
data[i-1]=e;
length++;
return true;
}
template <class T>
bool SqListClass<T>::ListDelete(int i)
{
int j;
if(i<1 || i>length)
return false;
for(j = i-1;j<length-1;j++)
data[j] = data[j+1];
length--;
return true;
}
#endif // LIST_H_INCLUDED
main
#include <iostream>
#include "list.h"
using namespace std;
int main()
{
SqListClass<int> list;
int a[5] = {1,2,3,4,5};
list.CreateList(a,5);
list.DispList();
list.ListInsert(2,9);
list.DispList();
list.ListDelete(3);
list.DispList();
return 0;
}