首页 > 编程 > C++ > 正文

使用C++实现顺序链表

2020-05-23 13:24:50
字体:
来源:转载
供稿:网友

这是创建的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->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;}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对VEVB武林网的支持。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表