使用C++实现顺序链表

时间:2021-05-19

这是创建的LIst.h头文件

#ifndef LIST_H#define LIST_Hclass 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;}elsereturn 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 8bool 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 8int 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->PriorElem(&e4,&temp);cout << "temp=" << temp << endl;list->NextElem(&e4, &temp);cout << "temp=" << temp << endl;//list->ListTraverse();//cout << m_iLength << endl; //错误delete list;system("pause");return 0;}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章