数据结构c++
线性表
1.线性表
线性表是一个有限序列。
线性表基于数组存储的表示叫做顺序表。常用数组作为表。
线性表基于指针的存储表示叫做链表。通常有单链表、双链表、循环链表等。
2.顺序表
0x01顺序表的定义和特点
假设顺序表A的起始存储位置为Loc(1),第i个表项的存储位置为Loc(i)则有:
Loc(i)=Loc(1)+(i-1)*sizeof(T)
其中,Loc(1)为第一个表项的存储位置,即数组中第0个元素的位置。
0x02顺序表的类定义及操作
顺序表存储分为静态存储和动态存储。
静态存储
#include <iostream> //顺序表静态存储
#define maxSize 100
using namespace std;
typedef int T; //typedef 类型定义
typedef struct{
T data[maxSize];
int n;
}Seqlist;
int main()
{
Seqlist a;
T m;
for(T i=0;i<3;i++){
cin >> m;
a.data[i] = m;
}
for(T i=0;i<3;i++){
cout << a.data[i] << ' '
}
return 0;
}
动态存储
typedef int T; //动态存储
typedef struct {
T *data; //指针new新的数组
int maxSize,n;
}Seqlist;
顺序表的类声明和部分操作
#include <iostream>
const int defaultSize=100;
using namespace std;
template<class T>
class SeqList{
protected:
T * data;
int maxSize;
int last;
public:
Seqlist(int sz=defaultSize); //构造函数
SeqList(SeqList<T>& L); //复制构造函数
~SeqList(){delete[]data;} //析构函数
int Size()const{return maxSize;} //常成员函数返回最大可容纳表项个数
int Length()const{return last+1;} //计算表长度
int Search(T &x)const; //查找x在表中的位置,并返回序号
int Locate(int i)const; //定位第i个表项
bool getData(int i,T&x)const; //取第i个表项的值
bool Insert(int i,T&x); //插入x在第i个表项之后
bool Remove(int i,T&X); //删除第i个表项,通过x返回表项的值
bool Isempty(); //判断是否为空表
bool Isfull(); //判断表是否为满表
void Input(); //输入
void Output(); //输出
};
const成员函数无法改变它的对象的数据成员的值,同时const成员函数无法调用非const成员函数。
1.构造函数和复制构造函数
//构造函数
template<class T>
SeqList<T>::SeqList(int sz){
if(sz>0){
maxSize=sz;
last=-1;
data=new T[maxSize]; //动态分配空间
if(data==0){
cerr <<"存储分配错误"<< endl;exit(1);
}
}
}
//复制构造函数
template<class T>
SeqList<T>::SeqList(SeqList<T>& L){
maxSize=L.Size();
last=L.Length()-1;
data=new T[maxSize];
if(data==0){
cerr << "存储分配错误"