线性表(顺序表)之C++封装

来源:互联网 发布:淘宝挂钩 编辑:程序博客网 时间:2024/06/06 06:51

线性表概述
线性表是最基本、最简单、也是最常用的一种数据结构。在线性表中数据元素之间的关系是线性,数据元素可以看成是排列在一条线上或一个环上。
线性表分为静态线性表和动态线性表,常见的有顺序表(静态的)、单向链表(动态的)和双向链表(动态的)。


以下是对顺序表的封装:

.h文件:

#pragma onceclass CZzcList{public:CZzcList(int nSize);~CZzcList();void ClearList();//清空线性表bool IsListEmpty();//是否为空int GetLengthOfList();//获取线性表的长度bool GetItemFromList(int i,int* elem);//由位置获取元素值int GetPosOfItem(int* elem);//获取元素第一次出现的位置bool GetPreItem(int* CurElem,int* PreElem);//得到前驱元素bool GetNextItem(int* CurElem,int* NextElem);//得到后继元素bool InsertItemToList(int i,int* elem);//插入一个元素bool DeleteItemFromList(int i,int*elem = NULL);//删除一个元素void ListTraverse();//遍历private:int* m_pList;int m_nSize;int m_nLength;};



.CPP文件:

#include "StdAfx.h"#include "ZzcList.h"#include <iostream>using namespace std;CZzcList::CZzcList(int nSize){m_nSize = nSize;m_pList = new int[m_nSize];m_nLength = 0;}CZzcList::~CZzcList(){if (m_pList != NULL){delete[]m_pList;m_pList = NULL;}}void CZzcList::ClearList(){m_nLength = 0;}int CZzcList::GetLengthOfList(){return m_nLength;}bool CZzcList::IsListEmpty(){return m_nLength == 0?true:false;}bool CZzcList::GetItemFromList(int i,int* elem){if ( i<0 || i>m_nLength-1 ){return false;}*elem = m_pList[i];}int CZzcList::GetPosOfItem(int* elem){for (int i=0;i<m_nLength;i++){if (*elem == m_pList[i]){return i;}}return -1;}bool CZzcList::GetPreItem(int* CurElem,int* PreElem){int nPos = GetPosOfItem(CurElem);if (nPos == -1 || nPos == 0){return false;}*PreElem = m_pList[nPos-1];return true;}bool CZzcList::GetNextItem(int* CurElem,int* NextElem){int nPos = GetPosOfItem(CurElem);if (nPos == -1 || nPos == m_nLength-1){return false;}*NextElem = m_pList[nPos+1];return true;}bool CZzcList::InsertItemToList(int i,int* elem){if(m_nLength >= m_nSize) return false;if (i<0 || i>m_nLength)  return false;for (int k=m_nLength-1;k>=i;k--){m_pList[k+1] = m_pList[k];}m_pList[i] = *elem;m_nLength++;return true;}bool CZzcList::DeleteItemFromList(int i,int*elem){//if(m_nLength <= 0) return false;if (i<0 || i>m_nLength)  return false;if(elem != NULL)  *elem = m_pList[i];for (int k = i;k < m_nLength-1;k++){m_pList[k] = m_pList[k+1];}m_nLength--;return true;}void CZzcList::ListTraverse(){for (int i = 0;i < m_nLength;i++){cout<<m_pList[i]<<endl;}}