数据结构与算法入门1-线性表的顺序存储
2014-03-31 00:00
519 查看
摘要: 本文章介绍了数据结构与算法的基础知识之线性表的顺序存储,代码已调试通过。仅供初学者使用。
最近在复习数据结构与算法,决定做个完整的总结。以后会已两天一次的速度更新,希望能对在学数据结构的朋友有所帮助。当然,本人也不是什么大牛,难免出错,还请见谅。有问题请评论,博主会与你们一起探讨并一一回复。
废话少说,先从线性表的顺序存储开始。懒得打字,直接上代码(C++版)。
头文件 linearList.h
函数实现 LinearList.cpp
测试代码:
或许你已注意到,SqList中有两个函数被注释并未实现。请读者自行完成。如需要完整实现,请留言。
最近在复习数据结构与算法,决定做个完整的总结。以后会已两天一次的速度更新,希望能对在学数据结构的朋友有所帮助。当然,本人也不是什么大牛,难免出错,还请见谅。有问题请评论,博主会与你们一起探讨并一一回复。
废话少说,先从线性表的顺序存储开始。懒得打字,直接上代码(C++版)。
头文件 linearList.h
#ifndef LINEARLIST_H_INCLUDED #define LINEARLIST_H_INCLUDED #define DEFAULT_SIZE 10 //定义状态码 typedef int StatusCode; const static StatusCode RANGE_ERROR=0; const static StatusCode SUCCESS=1; const static StatusCode OVER_FLOW=2; //顺序表类模板 template <class ElemType> class SqList { protected: //顺序表的数据成员 int count; int maxSize; ElemType *elems; //辅助函数模板 bool Full()const;//判断线性表是否已满 void Init(int size);//初始化线性表 public: //抽象数据类型方法声明 SqList(int size=DEFAULT_SIZE); virtual ~SqList(); int Length()const;//求线性表长度 bool Empty()const;//判断线性表是否为空 void clear();//清空线性表 void Traverse(void (*visit)(const ElemType));//遍历线性表 StatusCode GetElem(int position,ElemType &e)const;//求指定位置的元素 StatusCode SetElem(int position,const ElemType &e);//设置指定位置处的元素值 StatusCode Delete(int position,ElemType &e);//删除元素 StatusCode Insert(int position,const ElemType &e);//插入元素 /* SqList(const SqList<ElemType> ©);//赋值构造函数模板 SqList<ElemType> operater = (const SqList<ElemType> ©);//重载算数运算符 */ }; #endif // LINEARLIST_H_INCLUDED
函数实现 LinearList.cpp
#include "linearList.h" #include <stdio.h> using namespace std; template <class ElemType> bool SqList<ElemType>::Full()const { return maxSize==count; } template <class ElemType> void SqList<ElemType>::Init(int size) { maxSize=size; if(elems!=NULL) { delete []elems; } elems=new ElemType[maxSize]; count=0; } template <class ElemType> SqList<ElemType>::SqList(int size) { Init(size); } template <class ElemType> SqList<ElemType>::~SqList() { delete []elems; } template <class ElemType> int SqList<ElemType>::Length()const { return count; } template <class ElemType> bool SqList<ElemType>::Empty()const { return count==0; } template <class ElemType> void SqList<ElemType>::clear() { count=0; } template <class ElemType> StatusCode SqList<ElemType>::SetElem(int position,const ElemType &e) { if(position<1||position>Length()) { return RANGE_ERROR; } elems[position]=e; return SUCCESS; } template <class ElemType> StatusCode SqList<ElemType>::Insert(int position,const ElemType &e) { if(position<1||position>Length()+1) { return RANGE_ERROR; } if(Full()) { return OVER_FLOW; } ElemType elem; for(int curPosition=Length();curPosition>position;curPosition--) { elems[curPosition+1]=elems[curPosition]; } elems[position]=e; count++; return SUCCESS; } template <class ElemType> StatusCode SqList<ElemType>::GetElem(int position,ElemType &e)const { if(position<1||position>Length()) { return RANGE_ERROR; } e=elems[position]; return SUCCESS; } template <class ElemType> StatusCode SqList<ElemType>::Delete(int position,ElemType &e) { if(position<1||position>Length()) { return RANGE_ERROR; } GetElem(position,e); for(int curPosition=position+1;curPosition<=Length();curPosition++) { elems[curPosition-1]=elems[curPosition]; } count--; return SUCCESS; } template <class ElemType> void SqList<ElemType>::Traverse(void(*visit)(const ElemType)) { for(int curPosition=1;curPosition<=Length();curPosition++) { visit(elems[curPosition]); } }
测试代码:
#include <iostream> #include "linearList.h" #include "linearList.cpp" using namespace std; void show(const int e); int main() { int size=12; SqList<int> list(size); StatusCode status=list.Insert(1,2); cout<<"插入状态:"<<status<<endl; int k; list.GetElem(1,k); cout<<"第一个元素是:"<<k<<endl; cout << "线性表的长度为:"<<list.Length() << endl; cout<<"线性表是否为空:"<<list.Empty()<<endl; cout<<"调用SetElem之后:"<<endl; list.SetElem(1,100); list.GetElem(1,k); cout<<"第一个元素是:"<<k<<endl; list.Insert(2,23); list.Insert(3,25); list.Insert(4,6); cout<<"删除前:"<<endl; for(int i=1;i<=list.Length();i++) { list.GetElem(i,k); cout<<k<<" "; } cout<<endl; list.Delete(2,k); cout<<"删除后:"<<endl; for(int i=1;i<=list.Length();i++) { int k; list.GetElem(i,k); cout<<k<<" "; } cout<<endl; cout<<"删除的元素是:"<<k<<endl; cout<<"遍历元素"<<endl; list.Traverse(show); return 0; } void show(const int e) { cout<<e<<endl; }
或许你已注意到,SqList中有两个函数被注释并未实现。请读者自行完成。如需要完整实现,请留言。
相关文章推荐
- 数据结构与算法学习总结-线性表的顺序存储与实现
- 8. C#数据结构与算法 -- 线性存储结构(线性表之顺序表,数组实现)
- 9. C#数据结构与算法 -- 线性存储结构(线性表之顺序表,动态数组和泛型实现)
- 数据结构与算法(二)-线性表之单链表顺序存储和链式存储
- 数据结构与算法(线性表_顺序表存储结构)
- 数据结构入门学习系列-3(线性表的顺序存储)
- 线性表的顺序存储
- 线性表的顺序存储
- 线性表——顺序存储(C语言版,附带源代码)
- JAVA数据结构之线性表的顺序存储
- 线性表的顺序存储操作
- 线性表的顺序存储实现(陈越数据结构版)
- 数据结构-顺序存储-线性表-基本运算
- 数据结构:线性表的顺序存储--Java实现
- java 实现线性表之顺序存储
- 线性表_顺序存储
- 线性表顺序存储插入和删除新节点时平均移动次数
- [SDUT](2116)数据结构实验之链表一:顺序建立链表 ---链式存储(线性表)
- 线性表的顺序存储
- 线性表之顺序存储(JAVA)