线性表顺序存储(C++ 实现)
2015-01-05 13:46
501 查看
/******************************************************************** created: 2014/12/18 created: 18:12:2014 9:49 filename: D:\visual studio 2012\Projects\List\List\list.h file path: D:\visual studio 2012\Projects\List\List file base: list file ext: h author: HanLuo purpose: 线性表 优点:无需为表中的元素逻辑关系而增加额外的存储空间 可以快速存取表中的任一位置的元素 缺点:插入和删除操作需要移动大量元素 容易造成存储空间的碎片 存储空间的容量,不好确定。 *********************************************************************/ #ifndef _LIST_H_ #define _LIST_H_ /************************************************************************/ /* 采用数组存储 链表的第一个元素,数组【0】 第二个, 数组【1】 第三个, 数组【2】 ... */ /************************************************************************/ enum Status { FALSE = 0, TRUE = 1, }; #define MAXSIZE 20 typedef int ElemType; //typedef struct //{ // ElemType data[MAXSIZE]; // 数组存储数据元素 // int length; // 线性表当前长度 //}SqList; class SqList { public: // 初始化操作 建立一个空的线性表 Status InitList(SqList *List); // 判断线性表是不是为空,为空返回true,否则返回false Status ListEmpty(SqList List); // 清空线性表 Status ClearList(SqList *List); // 在线性表中查找与给定值相等的元素 int LocateElem(SqList List, ElemType val); // 返回线性表的元素个数 int ListLength(SqList list); // 得到i位置的元素 时间复杂度为O(1) Status GetElem (SqList L, int i, ElemType *val); // 插入操作 时间复杂度为O(n) Status ListInsert( SqList *L, int i, ElemType val); // 删除操作 时间复杂度为O(n) Status ListDelete( SqList *L, int i, ElemType *type); private: ElemType data[MAXSIZE]; // 线性表的容量 int length; // 线性表当前长度 }; #endif
#include "list.h" ////////////////////////////////////////////////////////////////////////// Status SqList::InitList(SqList *List) { List->length = 0; return TRUE; } ////////////////////////////////////////////////////////////////////////// Status SqList::ListEmpty(SqList List) { if(List.length == 0) return TRUE; else return FALSE; } ////////////////////////////////////////////////////////////////////////// Status SqList::ClearList(SqList *List) { List->length = 0; return TRUE; } ////////////////////////////////////////////////////////////////////////// Status SqList::GetElem(SqList L, int i, ElemType *e) { if(L.length == 0 || i<1 || i > L.length) return FALSE; *e = L.data[i - 1]; return TRUE; } ////////////////////////////////////////////////////////////////////////// int SqList::ListLength(SqList list) { return list.length; } ////////////////////////////////////////////////////////////////////////// /* 初始条件:顺序线性表L已存在 */ /* 操作结果:返回L中第1个与e满足关系的数据元素的位序。 */ /* 若这样的数据元素不存在,则返回值为0 */ int SqList::LocateElem(SqList list, ElemType val) { int i; if( list.length == 0) return FALSE; for(int i = 0; i < list.length; i++) { if(list.data[i] == val) break; // 找到元素 不再循环 } if(i >= list.length) return FALSE; return i+1; } ////////////////////////////////////////////////////////////////////////// Status SqList::ListInsert(SqList *List, int i, ElemType e) { int k; if( List->length == MAXSIZE) // 顺序线性表已经满了 return FALSE; if(i < 1 || i > List->length + 1) // 当i不再范围内的时候 return FALSE; // 先判断插入的数据不在表尾 if( i <= List->length ) { for( k = List->length; k >= i - 1; k--) // 将要插入位置后数据元素向后移动一位 List->data[k+1] = List->data[k]; } List->data[i - 1] = e; List->length++; return TRUE; } ////////////////////////////////////////////////////////////////////////// Status SqList::ListDelete(SqList *List, int i, ElemType* type) { int k; if( List->length == 0) // 如果表为空 返回错误 return FALSE; if( i < 1 || i > List->length) // 删除的位置不正确 return FALSE; *type = List->data[i - 1]; // 链表的元素,放在数组 -1 的位置 if( i < List->length ) { for( k = i; k < List->length; k++) { List->data[k-1] = List->data[k]; } } List->length--; return TRUE; }
相关文章推荐
- c++模板类实现线性表顺序存储
- 线性表的顺序存储实现c++
- 顺序存储线性表的C++实现——严蔚敏版《数据结构》
- 线性表以顺序表为存储结构的实现(数据元素的类型为整型)
- 线性表的顺序存储及操作实现
- 线性表的顺序存储和链式存储的实现(C)
- 线性表链式存储C++实现
- c/c++常用算法(1) -- 数据结构(线性表的顺序存储)
- 线性表的顺序存储实现
- 线性表的顺序存储实现及相关操作 C语言版
- 线性表的顺序存储及JAVA实现
- 线性表的顺序存储和链式存储的实现(C)
- java实现线性表的顺序存储
- 线性结构的顺序存储和链式存储的实现代码(二)
- c语言的线性表的顺序存储的实现,数组
- 线性表---顺序存储实现
- php线性表顺序存储实现代码(增删查改)
- 数据结构:线性表(顺序存储)顺序栈类(实现创建,输出,入栈出栈,读栈顶元素功能)
- 用C++模板实现线性表的链式存储的基本算法(数据结构C++版 北京科海)
- 线性表(顺序存储)结构与功能的简易实现