這是創建的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武林網的支持。
新聞熱點
疑難解答