线性表顺序存储(C++ 实现)

来源:互联网 发布:2017最火的网络电视剧 编辑:程序博客网 时间:2024/06/07 20:02
/********************************************************************created:2014/12/18created:18:12:2014   9:49filename: D:\visual studio 2012\Projects\List\List\list.hfile path:D:\visual studio 2012\Projects\List\Listfile base:listfile ext:hauthor:HanLuopurpose:线性表优点:无需为表中的元素逻辑关系而增加额外的存储空间  可以快速存取表中的任一位置的元素缺点:插入和删除操作需要移动大量元素  容易造成存储空间的碎片  存储空间的容量,不好确定。*********************************************************************/#ifndef _LIST_H_#define _LIST_H_/************************************************************************//*采用数组存储链表的第一个元素,数组【0】  第二个,  数组【1】  第三个,  数组【2】  ...*//************************************************************************/enum Status{FALSE = 0,TRUE  = 1,};#define MAXSIZE 20typedef int ElemType;//typedef struct//{//ElemType data[MAXSIZE];// 数组存储数据元素//int length;// 线性表当前长度//}SqList;class SqList{public:// 初始化操作 建立一个空的线性表Status InitList(SqList *List);// 判断线性表是不是为空,为空返回true,否则返回falseStatus 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;elsereturn 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;}


0 0
原创粉丝点击