IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 顺序表的基本操作(c++实现) -> 正文阅读

[C++知识库]顺序表的基本操作(c++实现)

1. 头文件LinearList

#ifndef _LINEARLIST_H_
#define _LINEARLIST_H_
#include<iostream>
using namespace std;
template<class T> ? ? ? ? ?//T为数据类型
class LinearList ? ? ? ? ? //模板名
{
private:
?? ?int length; ? ? ? ? ? ?//当前数组元素个数
?? ?int Maxsize; ? ? ? ? ? //线性表中最大元素个数
?? ?T*element; ? ? ? ? ? ? //一维动态数组
public:
?? ?LinearList(int LLMaxsize); ? ? ? ? ?//构造函数,创建空表
?? ?~LinearList(); ? ? ? ? ? ? ? ? ? ? ?//析构函数,删除表
?? ?LinearList<T>&InSert(int k, const T & x); ?//在第K个位置插入元素x,返回插入后的线性表
?? ?bool IsEmpty()const; ?//判断表是否为空,表空返回true,非空返回false
?? ?int GetLength()const; ?//返回表中数据元素个数
?? ?bool GetData(int k, T & x); ?//将表中第k个元素返回到x中,不存在返回false
?? ?bool ModifyData(int k, const T & x); ?//将表中第k个元素修改为x,不存在返回false
?? ?int Find(const T &x); ?//返回x在表中的位置,不存在返回0
?? ?LinearList<T>&DeleteByIndex(int k, T & x); ?//删除表中第k个元素,并把它保存在x中,返回修改后的线性表
?? ?LinearList<T>&DeleteByKey(const T & x, T & y); ?//删除表中关键字为x元素,返回删除后的线性表
?? ?void OutPut(ostream&out)const; ? //输出线性表的每个元素

?? ?
};

template <class T>? ? ? ? ? ? ? ? ? ? ? //实现构造函数
LinearList<T>::LinearList(int LLMaxsize)
{
?? ?Maxsize = LLMaxsize;
?? ?element = new T[LLMaxsize];
?? ?length = 0;
}

template <class T>? ? ? ? ? ? ? ? ? ? ?//实现析构函数
LinearList<T>::~LinearList()
{
?? ?delete[] element;
}
template <class T>? ? ? ? ? ? ? ? ? ? ?//实现插入新数据元素
LinearList<T> & LinearList<T>::InSert(int k, const T & x)
{
?? ?if (k<1 || k>length + 1)
?? ??? ?cout << "元素下标越界,添加元素失败" << endl;
?? ?else
?? ??? ?if (length == Maxsize)
?? ??? ??? ?cout << "此表已满,无法添加新元素" << endl;
?? ??? ?else
?? ??? ?{
?? ??? ??? ?for (int i = length; i > k - 1; i--)
?? ??? ??? ??? ?element[i] = element[i - 1];
?? ??? ??? ?element[k - 1] = x;
?? ??? ??? ?length++;
?? ??? ?}
?? ?return *this;
}
template <class T>? ? ? ? ? ? ? ? ? ?//实现判断是否为空表
bool LinearList<T>::IsEmpty() const
{
?? ?return length == 0;
}
template <class T>? ? ? ? ? ? ? ? ? ?//求当前表的长度
int LinearList<T>::GetLength() const
{
?? ?return length ;
}

template <class T>? ? ? ? ? ? ? ? //实现按位置取元素
bool LinearList<T>::GetData(int k,T&x)?
{
?? ?if (k<1 || k>length)
?? ??? ?return false;
?? ?else
?? ?{
?? ??? ?x = element[k - 1];
?? ??? ?return true;
?? ?}
}

template <class T>? ? ? ? ? ? ? ? ? ? //实现按位置修改元素
bool LinearList<T>::ModifyData(int k, const T&x)
{
?? ?if (k<1 || k>length)
?? ??? ?return false;
?? ?else
?? ?{
?? ??? ?element[k - 1] = x;
?? ??? ?return true;
?? ?}
}

template <class T>? ? ? ? ? ? ? ? ? ? ? ?//实现按关键字查找
int LinearList<T>::Find(const T&x)
{
?? ?for (int i = 0; i < length; i++)
?? ??? ?if (element[i] == x)
?? ??? ??? ?return i + 1;
?? ?return 0;
}

template <class T>? ? ? ? ? ? ? ? ? ? ? ? ?//实现按位置删除
LinearList<T> & LinearList<T>::DeleteByIndex(int k, T & x)
{
?? ?if (GetData(k, x))
?? ?{
?? ??? ?for (int i = k - 1; i < length - 1; i++)
?? ??? ??? ?element[i] = element[i + 1];
?? ??? ?length--;
?? ?}
?? ?else
?? ??? ?cout << "元素下标越界,删除失败" << endl;
?? ?return *this;
}

template <class T>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//实现按关键字删除
LinearList<T> & LinearList<T>::DeleteByKey(const T & x, T&y)
{
?? ?int index = Find(x);
?? ?if (index != 0)
?? ??? ?return DeleteByIndex(index, y);
?? ?else
?? ?{
?? ??? ?cout << "没有此元素,删除失败" << endl;
?? ?}
?? ?return *this;
}

template <class T>? ? ? ? ? ? ? ? ? ? ? ? ? ?//实现数据元素的输出
void LinearList<T>::OutPut(ostream & out) const
{
?? ?for (int i = 0; i < length; i++)
?? ??? ?out << element[i] << endl;
}

//全局函数,实现重载运算符<<
template<class T> ? ??
ostream& operator<<(ostream &out, const LinearList<T> & x)
{
?? ?x.OutPut(out);
?? ?return out;
}
#endif?

2.?主函数

#include<iostream>
using namespace std;
#include "LinearList.h"
int x,getnum;
int main()
{
?? ?LinearList<int> InregerList(10);//创建链表
?? ?InregerList.InSert(1, 10);//插入元素
?? ?InregerList.InSert(1, 20);
?? ?InregerList.InSert(1, 30);
?? ?InregerList.InSert(1, 40);
?? ?InregerList.InSert(1, 50);
?? ?cout << InregerList << endl;//输出链表
?? ?cout << "-------------------" << endl;
?? ?getnum=InregerList.Find(40);//获取数据为40的元素下标
?? ?cout << getnum << endl;
?? ?cout << "-------------------" << endl;
?? ?getnum=InregerList.GetData(1,x);//获取下标为1的数据元素值
?? ?if (getnum == 1)
?? ??? ?cout << x << endl;
?? ?cout << "-------------------" << endl;
?? ?InregerList.DeleteByIndex(3, x);//删除第3个元素
?? ?cout << InregerList << endl;//输出链表
?? ?cout << "-------------------" << endl;
?? ?getnum = InregerList.GetLength();
?? ?cout << getnum << endl;//求当前链表长度
?? ?cout << "-------------------" << endl;
}

图片如图

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:01:39  更:2021-11-18 11:02:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:54:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码