头文件:
class Linklist
{
public:
Linklist(int capcity);
~Linklist();
void ClearList();
bool isEmpty();
int GetLength();
//返回链表中第pos个元素
int GetElem(int pos);
//判断元素e是否存在于链表中,如果存在,返回该元素的位置
bool isExistElem(int e, int* pos);
void PrintList();
//返回元素e的前一个结点
int PreviousElem(int e);
//返回元素e的后一个结点
int NextElem(int e);
//在第pos个位置插入元素e
void InsertElem(int e, int pos);
void DeleteElem(int e);
private:
int* elemArray;
int length;
int capcity;
};
实现文件:
#include "linklist.h"
#include <afxwin.h>
#include <iostream>
using namespace std;
Linklist::Linklist(int capcity)
{
if (capcity<=0)
{
MessageBox(NULL,TEXT("a should above 0"),TEXT(""),MB_OK);
return;
}
length=0;
this->capcity=capcity;
elemArray=new int[capcity];
}
Linklist::~Linklist()
{
delete[] elemArray;
}
void Linklist::ClearList()
{
length=0;
}
bool Linklist::isEmpty()
{
if (length)
return false;
return true;
}
int Linklist::GetLength()
{
return length;
}
//返回INT_MAX表示出错
int Linklist::GetElem(int pos)
{
if (pos<1||pos>length)
{
MessageBox(NULL,TEXT("the postion of insertion is illegal"),TEXT(""),MB_OK);
return INT_MAX;
}
return elemArray[pos-1];
}
bool Linklist::isExistElem(int e, int* pos)
{
for(int i=0;i<length;i++)
{
if (e==elemArray[i])
{
*pos=i+1;
return true;
}
}
return false;
}
void Linklist::PrintList()
{
if (!length)
{
cout<<"the list is empty"<<endl;
return;
}
for(int i=0;i<length;i++)
{
cout<<elemArray[i]<<" ";
}
cout<<endl;
}
//返回INT_MAX表示e不在顺序表中
int Linklist::PreviousElem(int e)
{
int pos;
if (!isExistElem(e,&pos))
{
MessageBox(NULL,TEXT("element e isn't exist in linklist"),TEXT(""),MB_OK);
return INT_MAX;
}
if (pos==1)
{
MessageBox(NULL,TEXT("the first element has no previous node"),TEXT(""),MB_OK);
return INT_MAX;
}
return elemArray[pos-2];
}
int Linklist::NextElem(int e)
{
int pos;
if (!isExistElem(e,&pos))
{
MessageBox(NULL,TEXT("element e isn't exist in linklist"),TEXT(""),MB_OK);
return INT_MAX;
}
if (pos==length)
{
MessageBox(NULL,TEXT("the last element has no next node"),TEXT(""),MB_OK);
return INT_MAX;
}
return elemArray[pos];
}
void Linklist::InsertElem(int e, int pos)
{
if (pos<1||pos>length+1)
{
MessageBox(NULL,TEXT("the postion of insertion is illegal"),TEXT(""),MB_OK);
return ;
}
if (length==capcity)
capcity*=2;
for (int i=length;i>=pos;i--)
{
elemArray[i]=elemArray[i-1];
}
elemArray[pos-1]=e;
length++;
}
void Linklist::DeleteElem(int e)
{
int pos;
if (!isExistElem(e,&pos))
{
MessageBox(NULL,TEXT("element e isn't exist in linklist"),TEXT(""),MB_OK);
return;
}
for (int i=pos;i<length;i++)
{
elemArray[i-1]=elemArray[i];
}
length--;
}