c++ 用模板类实现顺序储存的线性表

  首先要注意的一点是模板类在VS中编译时如果将定义和声明分开会出现无法解析的问题,所以一般比较常见的解决的办法是将声明和定义放在同一个头文件中然后统一的调用,下面就是用模板类实现线性表的编写

#pragma once

#include <iostream>
using namespace std;

template<class T>
class Linearlist
{
private:
	T * linear_array;//数组
	int array_length;//数组的空间的长度
	int array_size;//数组的元素的个数
public:
	//构造函数和析构函数
	Linearlist( int length=10);
	~Linearlist() { delete[] linear_array; }
	//类方法声明
	bool empty() { return array_size == 0; }
	int size() {return array_size;}
	int get(int num);
	int insert(int value, int num=-1);
	int erase(int num);
	int output();
};


//默认构造函数
template<class T>
Linearlist<T>::Linearlist(int length)
{
	linear_array = new T[length];
	array_length = length;
	array_size = 0;
}

//类方法定义
template<class T>
int Linearlist<T>::get(int num)
{
	return linear_array[num];
}

template<class T>
int Linearlist<T>::insert(int value, int num)
{
	if (num == -1)
	{
		if (array_size >= array_length)
			return 1;
		linear_array[array_size] = value;
		array_size++;
		return 0;
	}
	else
	{
		if (num > array_length)
			return 1;
		if (array_size >= array_length)
			return 1;
		copy(linear_array + num, linear_array + array_size , linear_array + num + 1);
		linear_array[num] = value;
		array_size++;
		return 0;
	}
}

template<class T>
int Linearlist<T>::erase(int num)
{
	if (num > array_length)
		return 1;
	copy(linear_array + num + 1, linear_array + array_size , linear_array + num);
	linear_array[array_size - 1] = 0;
	array_size--;
	return 0;
}

template<class T>
int Linearlist<T>::output()
{
	for (int i = 0; i < array_size; i++)
	{
		cout << linear_array[i] << " ";
	}
	cout << endl;
	return 0;
}

  main函数中得调用情况

#include "linearlist.h"


int main()
{
	Linearlist<int> temp(20);

	temp.insert(20);
	temp.insert(11);
	temp.insert(13, 1);
	temp.insert(99, 2);
	temp.insert(10);
	temp.erase(1);
	temp.output();

	return 0;
}

  

 

转载于:https://www.cnblogs.com/yskn/p/9506604.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性表是一种常见的数据结构,它可以用顺序存储结构或链式存储结构来实现。下面是用C++实现线性表顺序存储结构的基本步骤: 1. 定义线性表的结构体,包括数据元素和线性表长度等信息。 ``` #define MAXSIZE 100 // 线性表的最大长度 typedef struct { int data[MAXSIZE]; // 存储数据元素的数组 int length; // 线性表的当前长度 } SqList; ``` 2. 初始化线性表,将线性表的长度设置为0。 ``` void InitList(SqList &L) { L.length = 0; } ``` 3. 插入元素,将新元素插入到指定位置,并将线性表长度加1。 ``` bool ListInsert(SqList &L, int i, int e) { if (i < 1 || i > L.length + 1 || L.length == MAXSIZE) { return false; // 插入位置不合法或线性表已满 } for (int j = L.length; j >= i; j--) { L.data[j] = L.data[j - 1]; // 将插入位置后的元素依次后移 } L.data[i - 1] = e; // 插入新元素 L.length++; // 线性表长度加1 return true; } ``` 4. 删除元素,将指定位置的元素删除,并将线性表长度减1。 ``` bool ListDelete(SqList &L, int i, int &e) { if (i < 1 || i > L.length) { return false; // 删除位置不合法 } e = L.data[i - 1]; // 将被删除的元素赋值给e for (int j = i; j < L.length; j++) { L.data[j - 1] = L.data[j]; // 将删除位置后的元素依次前移 } L.length--; // 线性表长度减1 return true; } ``` 5. 查找元素,根据指定位置返回对应的元素值。 ``` bool GetElem(SqList L, int i, int &e) { if (i < 1 || i > L.length) { return false; // 查找位置不合法 } e = L.data[i - 1]; // 将查找到的元素赋值给e return true; } ``` 以上就是用C++实现线性表顺序存储结构的基本步骤。如果您有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值