使用C++实现顺序链表

这是创建的LIst.h头文件

#ifndef LIST_H

#define LIST_H

class List

{

public:

List(int size);

~List();

void DestroyList();

void ClearList();

bool ListEmpty();

int ListLength();

bool GetElem(int i, int *e);

int LocateElem(int *e);

bool ListInsert(int i, int *e);

bool ListDelete(int i, int *e);

bool PriorElem(int *currentElem, int *preElem);

bool NextElem(int *currentElem, int *NextElem);

void ListTraverse();

private:

int *m_pList;

int m_iSize;

int m_iLength;

};

#endif

创建的list.cpp文件

#include"LIst.h"

#include<iostream>

using namespace std;

List::List(int size)

{

m_iSize = size;

m_pList = new int[m_iSize]; //申请堆内存

m_iLength = 0;

}

List::~List()

{

delete []m_pList;

m_pList = 0; //不为NULL就等于0;

}

void List::DestroyList()

{

m_iLength=0;

}

void List::ClearList()

{

m_iLength = 0;

}

bool List::ListEmpty()

{

if (m_iLength == 0)

{

return true;

}

else

return false;

}

int List::ListLength()

{

return m_iLength;

}

bool List::GetElem(int i, int *e)

{

if (i<0 || i>=m_iLength)

{

return false;

}

else

{

*e = m_pList[i];

}

}

int List::LocateElem(int *e)

{

for (int i = 0; i < m_iLength; i++)

{

if (*e == m_pList[i])

return i;

}

return -1;

}

bool List::ListInsert(int i, int *e)

{

if (i<0 || i>m_iLength)

{

return false;

}

else

{

for (int k = m_iLength - 1; k >= i; k--)

{

m_pList[k + 1] = m_pList[k];

}

m_pList[i] = *e;

m_iLength++;

}

}

bool List::ListDelete(int i, int *e)

{

if (i<0 || i>m_iLength)

{

return false;

}

else

{

for (int k = i; k < m_iLength - 1; k++)

{

m_pList[k ]=m_pList[k + 1]; //直接覆盖了前面的元素

}

m_iLength--;

}

}

bool List::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;*/ //错误

int temp = LocateElem(currentElem);

if (temp == -1)

{

return false;

}

else

{

if (temp == 0)

{

return false;

}

else

{

*preElem = m_pList[temp - 1];

return true;

}

}

}

bool List::NextElem(int *currentElem, int *NextElem)

{

int temp = LocateElem(currentElem);

if (temp == -1)

{

return false;

}

else

{

if (temp == m_iLength)

{

return false;

}

else

{

*NextElem= m_pList[temp + 1];

return true;

}

}

}

void List::ListTraverse()

{

for (int i = 0; i < m_iLength; i++)

{

cout << m_pList[i]<<endl;

}

}

这是测试函数ListMain.cpp

#include<iostream>

#include"LIst.h"

/*

线性表--顺序表 以这个为例

3 5 7 2 9 1 8

bool InitList(); //创建线性表

void DestroyList(); //销毁线性表

void ClearList(); //清空线性表

bool ListEmpty(); //判断线性表是否为空

int ListLength(); //获取线性表的长度

bool GetElem(int i,Elem *e);//获取指定的元素

int LocateElem(Elem *e);//寻找第一个满足e的数据元素的位序

bool PriorElem(Elem *currentElem,Elem *preElem); //获取指定元素的前驱

bool NextElem(Elem *currentElem,Elem *NextElem);//获取指定元素的后继

bool ListInsert(int i,Elem *e); //在第i个插入元素

bool ListDelete(int i,Elem *e); //删掉第i个位置的元素

void ListTraverse(); //遍历线性表

*/

using namespace std;

int main()

{//3 5 7 2 9 1 8

int temp = 0;

int e1 = 3;

int e2 = 5;

int e3 = 7;

int e4 = 2;

int e5 = 9;

int e6 = 1;

int e7 = 8;

List *list = new List(10);

//cout << list->ListLength() << endl;

list->ListInsert(0, &e1);

//cout << list->ListLength() << endl;

list->ListInsert(1, &e2);

//cout << list->ListLength() << endl;

list->ListInsert(2, &e3);

list->ListInsert(3, &e4);

list->ListInsert(4, &e5);

list->ListInsert(5, &e6);

list->ListInsert(6, &e7);

list->ListTraverse();

/*list->GetElem(2,&temp);

cout <<"temp="<< temp << endl;

temp = 5;

cout << list->LocateElem(&temp) << endl;*/

list->PriorElem(&e4,&temp);

cout << "temp=" << temp << endl;

list->NextElem(&e4, &temp);

cout << "temp=" << temp << endl;

/*list->ListDelete(0, &temp);

if (!list->ListEmpty())

{

cout << "not empty!"<< endl;

}

else

{

cout << "empty!" << endl;

}

list->ClearList();

if (!list->ListEmpty())

{

cout << "not empty!" << endl;

}

else

{

cout << "empty!" << endl;

}

cout << "#" << temp << endl;*/

//list->ListTraverse();

//cout << m_iLength << endl; //错误

delete list;

system("pause");

return 0;

}

总结

以上是 使用C++实现顺序链表 的全部内容, 来源链接: utcz.com/z/318819.html

回到顶部