每行代碼都有詳細註釋:我認爲這是我見過最簡單的順序表了,小白完全看的懂,大神勿噴
如果不會的給我留言
第一個是鏈表類:List.h
#pragma once
#ifndef LIST_H
#define LIST_H
class List
{
private:
int *arr;//存儲數據的數組
int maxLength;//容器的最大容量
int size;//存儲到線性表中的實際數據個數
public:
List(int size);//構造函數
~List();//析構函數
bool insertElement(int i, int *node);//插入數據
bool deleteElement(int i, int *node);//刪除數據
void ListBL();//順序表的遍歷
bool getElement(int i, int *e);//根據下標獲取指定元素
int LocateElement(int *e);//根據參數確定*e元素在順序表中的下標
bool priorElem(int *currElem, int *preElem);//.獲取指定元素的(前驅)
};
#endif // !LIST_H
實現:
#include"List.h"
#include<iostream>
using namespace std;
List::List(int len)//編寫構造函數
{
arr = new int[len];//創建一個指定長度的數組
maxLength = len;//將參數設置爲順序表的最大長度
size = 0;//指定存儲的元素個數設置爲0
}
List::~List()
{
//清空順序表
size = 0;
//讓指針清除
delete arr;
//讓指針指向空
arr = NULL;
}
bool List::insertElement(int i/*下標*/,int *p/*數據*/ )//向指定位置插入元素
{
//先判斷下標是否合法
if (i < 0 || i > size)
{
return false;
}
//從後往前將數據往順序表後移動一位
for (int k = size-1; k >= i; k--)
{
arr[k + 1] = arr[k];
}
//將參數的值存儲到指定下標的位置
arr[i] = *p;
size++;
return true;
}
void List::ListBL()//順序表的遍歷
{
cout << "元素遍歷如下:" << endl;
for (int k = 0; k < size; k++)
{
cout << arr[k] << " ";
}
cout << endl;
}
bool List::deleteElement(int i, int *node)
{
if (i<0 || i>= size)//判斷下標是否合法
{
return false;
}
*node = arr[i];//先將要被刪除的數據保存到返回參數node中
for (int k = i + 1; k < size; k++)
{
arr[k - 1] = arr[k];
}
arr[size - 1] = NULL;
size--;
}
//根據下標獲取指定元素 將數據保存到返回參數*e中
bool List::getElement(int i, int *p)
{
if (i<0 || i>=size)
{
return -1;
}
else
{
for (size_t j = 0; j < size; j++)
{
if (i == j)
{
p = &arr[j];
cout << "該元素的數據爲:" << *p << endl;
break;
}
}
}
}
int List::LocateElement(int *e)//根據參數確定*e元素在順序表中的下標
{
for (size_t j = 0; j < size; j++)
{
if (arr[j] == *e) {
cout << "該元素的下標爲:" << j << endl;
break;
}
}
return 0;
}
//獲取指定元素的(前驅),*currElem代表當前這個元素,將獲取的數據保存到返回參數 *preElem中
bool List::priorElem(int *currElem, int *preElem)
{
for (size_t i = 0; i < size; i++)
{
if (arr[i] == *currElem)
{
preElem = &arr[i - 1];
cout << "該元素的前驅爲:" << *preElem << endl;
break;
}
}
return true;
}
測試:
#include"List.h"
#include<iostream>
using namespace std;
int main()
{
//創建線性表
List *p = new List(10);
//添加元素
int a = 6;
int b = 4;
int c = 10;
p->insertElement(0, &a);
p->insertElement(1, &b);
p->insertElement(2, &c);
p->insertElement(3, &c);
p->ListBL();
p->getElement(2,0);
p->LocateElement(&a);
p->priorElem(&b, 0);
delete p;//刪除數據表
system("pause");
return 0;
}
vs2015完美運行