线性表的基础操作 C++代码实现
我其实对C++使用的不多,这两天又深入学习了一下STL,这里我不得不说,STL真是太强了.这里只是简单的应用,所以只需要了解一点点用法就可以了.如果你感兴趣,你可以自己找相关的书籍自己学习.多余的话就不说了,进入正题.
顺序表的实现
首先需要头文件 <vector>
,命名空间是std
需要说的是:借助这个建立的线性表应该属于顺序表, 过一会我会告诉你为什么.
1.结构体:
typedef struct Lnode
{
int info;
}node,*pnode;
2.建立线性表
vector<pnode> a;
这样就建立了一个顺序表.声明了一个名为’a’的顺序表,里面的元素类型是’pnode’.
3.清空线性表
a.clear();
4.得到线性表的长度
a.size()
返回线性表的长度类型为unsigned.
//如果是正数和这个类型的比较几乎没有什么问题,负数的话就需要注意了.注意点
5.判断线性表是否为空
a.empty()
如果为空,返回true;不为空,返回false.
6.元素的插入
a.insert(迭代器,元素);
迭代器相当于一个指向a中某一元素的指针,这个操作会将元素插入到迭代器所指元素的前面.
7.元素的删除
a.erase(迭代器);
删除迭代器指向的元素.
8.线性表的其他操作
其他的操作我就不再多说了,基本实现的方法和C语言的顺序表是一样的,因为vector同样支持随机访问,同样可以用下标来访问.
vector所申请的空间是连续的,如果出现空间不足的情况,将会重新申请一块空间将原本空间内的数据复制一份在新的空间内,时间开销可想而知.
同样,插入和删除的操作将会有很大的时间复杂度.
和链表对应的容器<list>
在插入和删除方面将会比较优秀.如果你感兴趣,我找到了一个比较好的博文,你可以参考学习,我就不多说了.
尽管C++的STL很强大,很方便;但是我觉得,我们学习数据结构还是应该以C语言为主,虽然C语言真的很麻烦,但是确确实实能让你深入了解数据结构,起到巩固基础的作用.