线性表:顺序存储实现

本文档介绍了线性表的顺序存储结构,并提供了相关的头文件LinearList.h、实现文件LinearList.cpp以及测试代码main.cpp。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LinearList.h

#pragma once

const int MAXSIZE = 20;
typedef int DataType;
class DataArr
{
public:
	//这里MAXSIZE与length表示不同含义
	//MAXSIZE:表示列表的最多可承载的元素个数
	//length:表示列表当前的实际元素个数
	DataType arr[MAXSIZE];
	int length;
};

class LinearList
{
public:
	LinearList();
	~LinearList();
	//初始化列表
	void InitList(); 
	//判断列表是否为空
	bool IsEmpty();
	//清空列表
	void ClearList();
	//查找元素并返回其位置
	int GetElem(DataType e);
	//判断是否存在元素e
	bool IsLocale(DataType e);
	//向列表插入元素
	int InsertList(int i, DataType e);
	//删除列表中的元素e
	int DeleteElem(DataType e);
	//获取列表长度
	int GetLength();
	//向列表末尾插入元素
	bool pushback(DataType e);
	//删除列表末尾元素
	bool pop();
	//打印列表
	void printList();
private:
	DataArr* dataArr;
};

LinearList.cpp

#include "LinearList.h"
#include <iostream>

using namespace std;

LinearList::LinearList()
{
	InitList();
}

LinearList::~LinearList()
{
	if (dataArr)
	{
		delete dataArr;
		dataArr = nullptr;
	}
}

void LinearList::InitList()
{
	dataArr = new DataArr;
	dataArr->length = 0;
}

bool LinearList::IsEmpty()
{
	if (dataArr->length > 0)
		return false;
	return true;
}

void LinearList::ClearList()
{
	//清空操作只需直接重置length为0即可
	dataArr->length = 0;
}

int LinearList::GetElem(DataType e)
{
	if (dataArr->length <= 0)
		return -1; 
	for (int i = 0; i < dataArr->length; i++)
	{
		if (dataArr->arr[i] == e)
		{
			return i;
		}
	}
	return -1;
}

bool LinearList::IsLocale(DataType e)
{
	if (dataArr->length <= 0)
		return false;
	for (int i = 0; i < dataArr->length; i++)
	{
		if (dataArr->arr[i] == e)
		{
			return true;
		}
	}
	return false;
}

int LinearList::InsertList(int i, DataType e)
{
	if (i < 0 || i > dataArr->length || dataArr->length == MAXSIZE)
		return -1;
	if (i == dataArr->length)
	{
		dataArr->arr[i] = e;
		dataArr->length += 1;
		return i;
	}
	//从最后一个元素开始向后移动一个位置
	//如果从第i个元素向后移动,会造成从第i+1个元素到最后一个元素都被置为第i+1个元素的值
	for (int j = dataArr->length - 1; j >= i; j--)
	{
		dataArr->arr[j + 1] = dataArr->arr[j];
	}
	dataArr->arr[i] = e;
	dataArr->length += 1;
	return i;
}

int LinearList::DeleteElem(DataType e)
{
	int index = GetElem(e);
	if (index == -1)
		return index;
	for (int j = index; j < dataArr->length; j++)
	{
		dataArr->arr[j] = dataArr->arr[j + 1];
	}
	dataArr->length -= 1;
	return index;
}

int LinearList::GetLength()
{
	return dataArr->length;
}

bool LinearList::pushback(DataType e)
{
	if (dataArr->length == MAXSIZE)
		return false;
	dataArr->length += 1;
	dataArr->arr[dataArr->length - 1] = e;
	return true;
}

bool LinearList::pop()
{
	if (dataArr->length == -1)
		return false;
	dataArr->length -= 1;
	return true;
}

void LinearList::printList()
{
	if (dataArr->length == 0)
		return;
	std::cout << "PrintList: " << std::endl;
	for (int i = 0; i < dataArr->length; i++)
	{
		std::cout << dataArr->arr[i] << ", ";
	}
	std::cout << std::endl;
}

测试代码main.cpp

#include "LinearList.h"
#include <iostream>

using namespace std;

int main()
{
	LinearList sqlList;
	sqlList.pushback(5);
	sqlList.pushback(8);
	sqlList.pushback(11);
	sqlList.printList();

	sqlList.pop();
	sqlList.printList();

	sqlList.InsertList(0, 12);
	sqlList.InsertList(3, 15);
	sqlList.printList();

	sqlList.DeleteElem(12);
	sqlList.printList();

	int index = sqlList.GetElem(8);
	std::cout << "Index: " << index << std::endl;
	if (sqlList.IsEmpty())
	{
		std::cout << "List Is Empty!" << std::endl;
	}
	else
	{
		std::cout << "List is not empty." << std::endl;
		int length = sqlList.GetLength();
		std::cout << "Length: " << length << std::endl;
	}

	sqlList.ClearList();
	if (sqlList.IsEmpty())
	{
		std::cout << "List Is Empty!" << std::endl;
	}
	else
	{
		std::cout << "List is not empty." << std::endl;
	}

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值