线性表可以分为顺序存储和链式存储,有人可能会问,什么叫顺序存储,什么叫链式存储?顺序存储是物理上和逻辑上都是顺序存储,就是按着1、2、3、4.。。。。这样顺序存储下来,数组就是典型的顺序存储。而链式存储是物理上是通过结点的方式,逻辑上是顺序存储的结构。
下面来讲讲顺序存储:代码如下
#include <iostream>
#include <string>
using namespace std;
class OrderList{
public:
OrderList(int size);
~OrderList();
bool InitList();//初始化线性表
void DestroyList();//销毁线性表
void ClearList();//清空线性表
bool IsEmpty();//判断线性表是否为空
int GetLength();//得到线性表的长度
bool GetElem(int i,int *e);//获取指定的元素
int LocateElem(int *e);//获取满足给定元素的位置
bool PriorElem(int *currentElem,int *preElem);//返回指定元素的前一个元素
bool NextElem(int *currentElem,int *nextElem);//返回指定元素的后一个元素
bool InsertElem(int i,int *e);//在第i个位置插入元素
bool DeleteElem(int i,int *e);//删除掉第i个元素
void Traverse();//遍历线性表
private:
int *m_plist;//存储线性表元素
int m_iSize;//线性表的容量 为啥定义容量是因为 一个数组的大小是固定的
int m_iLength;//当前线性表的个数
};
OrderList::OrderList(int size){
m_plist=new int[size];
m_iSize=size;
m_iLength=0;
}
OrderList::~OrderList(){
delete[] m_plist;
m_plist=NULL;//使指针指向空
}
bool OrderList::InitList(){
for (int i=0;i<m_iSize;i++)
{
cout<<"请输入第%d个元素"<<i;
cin>>m_plist[i]>>endl;
}
return true;
}
void OrderList::DestroyList(){
m_iLength=0;
}
void OrderList::ClearList(){
m_iLength=0;
}
bool OrderList::IsEmpty(){
if (m_iLength==0)
return true;
return false;
}
int OrderList::GetLength(){
return m_iLength;
}
bool OrderList::GetElem(int i,int *e){
*e=m_plist[i-1];
return true;
}
int OrderList::LocateElem(int *e){
for (int i=0;i<m_iLength;i++)
{
if (*e==m_plist[i])
{
return i;
}
}
else
return -1;
}
bool OrderList::PriorElem(int *currentElem,int *preElem){
for (int i=0;i<m_iLength;i++)
{
if (*currentElem==m_plist[i])
{
*preElem=m_plist[i-1];
return true;
}
}
return false;
}
bool OrderList::NextElem(int *currentElem,int *nextElem){
for (int i=0;i<m_iLength;i++)
{
if (*currentElem==m_plist[i])
{
*nextElem=m_plist[i-1];
return true;
}
}
return false;
}
bool OrderList::InsertElem(int i,int *e){
if (i<0||i>m_iLength)
{
cout<<"插入的位置不正确!"<<endl;
return false;
}
else
{
for (int n=i;i=<m_iLength;n++)
{
m_plist[n]=m_plist[n-1];
}
m_iLength++;
m_plist[i-1]=*e;
return true;
}
}
bool OrderList::DeleteElem(int i,int *e){
if (i<0||i>m_iLength)
{
cout<<"删除的位置不对"<<endl;
return false;
}
else
{
for (int n=i;n<m_iLength;n++)
{
m_plist[n-1]=m_plist[n];
}
m_iLength--;
*e=m_plist[i-1];
return true;
}
}
void OrderList::Traverse(){
if (m_iLength==0)
{
cout<<"线性表为空!";
exit(EXIT_FAILURE);
}
for (int i=0;i<m_iLength;i++)
{
cout<<"第"<<i<<"d个元素是"<<m_plist[i]<<endl;
}
}
void main(){
system("pause");
}