我認爲是最簡單的c++實現線性表中順序表相關過程

每行代碼都有詳細註釋:我認爲這是我見過最簡單的順序表了,小白完全看的懂,大神勿噴

如果不會的給我留言

第一個是鏈表類: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完美運行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章