南邮数据结构实验1.2 单链表的操作

2024-03-31 18:48

本文主要是介绍南邮数据结构实验1.2 单链表的操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内容和提示:

类似1.1


#include <iostream>
using namespace std;
const int SIZE=20 ;template <class T>
class LinearList
{
protected:
int n; public:
virtual bool IsEmpty() const=0;
virtual int Length() const=0;
virtual bool Find(int i,T& x) const=0;
virtual int Search(T x) const=0;
virtual bool Insert(int i,T)=0;
virtual bool Delete(int i)=0;
virtual bool Update(int i,T x)=0;
virtual void Output(ostream &out) const=0;
};template <class T> class SingleList;
template<class T>class Node
{
private:
T element;
Node<T> *link;
friend class SingleList<T>;
};template<class T>
class SingleList :public LinearList<T>
{
public:
SingleList(){ first = NULL; n = 0; }
~SingleList();
bool IsEmpty() const;
int Length() const;
bool Find(int i, T &x)const;
int Search(T x)const;
bool Insert(int i, T x);
bool Delete(int i);
bool Update(int i, T x);
void Clear();
void Output(ostream& out)const;
void Reserve();                 //链接表逆置
bool DeleteX(const T &x);       //删除所有元素private:
Node<T> *first;
};template<class T>
SingleList<T>::~SingleList()
{
Node<T>*p;
while (first)
{
p=first->link;
delete first;
first=p;
}
}template<class T>
int SingleList<T>::Length()const
{
return n;
}template<class T>
bool SingleList<T>::IsEmpty()const
{
return n==0;
}template<class T>
bool SingleList<T>::Find(int i, T &x)const
{
if (i<0 || i>n - 1)
{
cout << "out of bounds"; 
return false;
}
Node<T> *p = first;
for (int j = 0; j < i - 1; j++)
p = p->link;
x = p->element;
return true;
}template<class T>
int SingleList<T>::Search(T x)const
{
int j;
Node<T> *p = first;
for (j = 0;p&&p->element!=x; j++)
p = p->link;
if (p) return j;
return -1;
}template<class T>
bool SingleList<T>::Insert(int i, T x)
{
if (i<-1 || i>n - 1)
{
cout << "Out of bounds"; 
return false;
}
Node<T> *q = new Node<T>;
q->element = x;
Node<T>*p = first;
for (int j = 0; j<i; j++)
p = p->link;
if (i > -1)
{
q->link = p->link;
p->link = q;
}
else
{
q->link = first;
first = q;
}
n++;
return true;
}template<class T>
bool SingleList<T>::Delete(int i)
{
if (!n)
{
cout << "underflow" << endl;
return false;
}
if (i<0 || i>n - 1)
{
cout << "out of bounds" << endl; 
return false;
}
Node<T> *p = first, *q = first;
for (int j = 0; j < i - 1; j++)
q = q->link;
if (i == 0)
first = first->link;
else{
p = q->link;
q->link = p->link;
}
delete p;
n--;
return true;
}template<class T>
bool SingleList<T>::Update(int i, T x)
{
if (i<0 || i>n - 1)
{
cout << "out of bounds" << endl; 
return false;
}
Node<T> *p = first;
for (int j = 0; j < i; j++)
p = p->link;
p->element = x;
return true;
}template<class T>
void SingleList<T>::Output(ostream& out)const
{
Node<T>*p = first;
while (p)
{
out << p->element <<" ";
p = p->link;
}
out << endl;
}template<class T>
void SingleList<T>::Reserve()          //链接表逆置
{ 
for (int i = 0; i <n -1;i++)
{
Insert(n - 1-i, first->element);
Delete(0);
}
}template<class T>
bool SingleList<T>::DeleteX(const T &x)     
{
if (Search(x) < 0)
return false;
else
{
while (Search(x)>=0)
Delete(Search(x));
}
return true;
}void main()
{
SingleList <int> LB;
int x,n,a;
cout<<"Please input the length:"<<endl;
cin>>n;
cout<<"Please input the SingleList:"<<endl;
for(int  i=0;i<n;i++)
{ 
cin>>x;
LB.Insert(i-1,x);
}
LB.Output(cout);cout<<"Please input x to be deleted:"<<endl;
cin>>a;
LB.DeleteX(a);
cout<<"After delete:"<<endl;
LB.Output(cout);LB.Reserve();
cout<<"After reserved:"<<endl;
LB.Output(cout);
}


这篇关于南邮数据结构实验1.2 单链表的操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865055

相关文章

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

java Stream操作转换方法

《javaStream操作转换方法》文章总结了Java8中流(Stream)API的多种常用方法,包括创建流、过滤、遍历、分组、排序、去重、查找、匹配、转换、归约、打印日志、最大最小值、统计、连接、... 目录流创建1、list 转 map2、filter()过滤3、foreach遍历4、groupingB

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后