线性表的顺序存储结构(c++实现)

线性表:零个 或 多个数据的有限序列
第一个元素没有前驱,最后一个元素没有后继
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素
线性表的顺去存储是通过数组来实现的

#pragma once
#include 
using namespace std;
#define length 50

#include

class Arr
{
public:
	Arr();//构造函数
	~Arr();//析构函数
	bool add_arr(int val);//添加元素
	bool delete_arr(int val, int pos);//在pos位置上删除一个val值元素
	bool insert_arr(int val, int pos);在pos位置上插入一个val值元素
	bool is_empty();//判断数组是否为空
	bool is_full();//判断数组是否满
	void sort_arr();//数组排序
	void show_arr();//显示数组元素
	void inversion_arr();//倒置数组

	int *Base;//存储数组第一个元素地址

	
	int count;//线性表有效元素的个数,线性表的长度
	


};

具体函数实现如下

在这里插入代码片#include<iostream>
#include"线性表中顺序存储结构.h"
using namespace std;
Arr::Arr()//构造函数
{
	count = 0;
	Base = new int[length];
	
	
 }
Arr::~Arr()//析构函数
{
	delete[] Base;//释放动态内存
}
bool Arr::add_arr(int val)//追加加一个元素
{
	if (this->is_full())
	{
		cout << "添加失败,数组已经满了" << endl;
		return false;

	}
	this->Base[count++] = val;//线性表长度加一,添加元素
	
	
	return true;

}
bool Arr::delete_arr(int pos,int val)//在pos位置上删除一个val值元素,并告诉删除的值是多少
{
	if (this->is_empty())
	{
		cout << "数组为空,无法删除" << endl;
		return false;
	}
	else if(pos<1&&pos>count+1)
	{
		cout << "超出数组范围,无法删除" << endl;
		return false;

	}
	else
	{
		val = this->Base[pos- 1];
		for ( int i = pos; i <= count; i++)
		{
			this->Base[i-1]=this->Base[i];//数组前移
		}
		count--;
		cout << "删除元素为" << val << "  已删除成功" << endl;
		
	}
	return true;
}
bool Arr::insert_arr(int val, int pos)在pos位置上插入一个val值元素
{
	if (pos<1 && pos>count + 1)
	{
		cout << "无法插入" << endl;
		return false;
	}
	else
	{
		for (int i = count - 1; i >= pos - 1; i--)//因为数组的下标是从零开始的,所以插入到pos
												//也就是数组pos-1位置上
		{
			this->Base[i + 1] = this->Base[i];//数据后移
		}
		this->Base[pos - 1] = val;
		count++;//线性表元素个数更新
		cout << "插入完成" << endl;
	}
	return true;
}
bool Arr::is_empty()//判断数组是否为空
{
	return count == 0 ? true : false;
}
bool Arr::is_full()//判断数组是否满
{
	return count == length ? true : false;
}
void Arr::sort_arr()//数组排序,将数组从大到小排序
{
	int i, j, t ;
	for (i = 0; i < count; i++)
	{
		for (j = i+1; j < count; j++)

		{
			if (this->Base[i] < this->Base[j])

			{
				t = this->Base[i];
				this->Base[i] = this->Base[j];
				this->Base[j] = t;
			}
		}
	}
}
void Arr::show_arr()//显示数组元素
{
	if (is_empty())
	{
		cout << "数组为空" << endl;
	}
	else
	{
		for (int i = 0; i < count; i++)
		{
			cout << this->Base[i] << "  ";
		}
		cout << endl;
	}
}
void Arr::inversion_arr()//倒置数组
{
	if (is_empty())
	{
		cout << "无法倒置,,数组为空" << endl;

	}
	else
	{
		int i=0, j=count-1;
		int t;
		while(i<j)
		{
			t = this->Base[i];
			this->Base[i] = this->Base[j];
			this->Base[j] = t;
			i++;
			j--;
		}
	}
}

你可能感兴趣的:(数据结构与算法)