数据结构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 << "存储分配错误"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值