C++:采用模板封装顺序表,栈,队列

1.顺序表:

list.hpp

#ifndef LIST_HPP
#define LIST_HPP
#include <iostream>using namespace std;template <class L>class Seqlist
{
private:L *ptr;L size;L len=0;public:void init(L n){//堆区申请空间(大小为n)this->ptr=new L[n];//bzero(this->ptr,sizeof(L)*n);this->len=0;this->size=n;//}bool empty(){return this->len==0;}bool full(){return this->len==this->size;}void push_back(L e)//尾插{if(this->full()){return ;}this->ptr[len++]=e;}//插入void insert(L index,L num){if(full()){return;}for(L i=len-1;i>=index-1;i--){ptr[i+1]=ptr[i];}ptr[index-1]=num;len++;}//任意位置删除void erase(L index){if(empty()){return;}for(L i=index;i<len;i++){ptr[i-1]=ptr[i];ptr[i]=NULL;}len--;}//尾删void pop_back(){if(empty()){return;}ptr[len-1]=NULL;len--;}void show(){//判空if(len==0){return;}cout<<"顺序表"<<endl;for(int i=0;i<len;i++){cout<<ptr[i]<<ends;}cout<<endl;}//当前长度L cur_size(){if(empty()){return 0;}else{return len;}}L at(L index){L num;num=ptr[index-1];return num;}void sort(bool flag){if(flag){for(int i=1;i<len;i++){for(int j=0;j<len-i;j++){if(ptr[j]>ptr[j+1]){L temp;temp=ptr[j];ptr[j]=ptr[j+1];ptr[j+1]=temp;}}}}else{for(int i=1;i<len;i++){for(int j=0;j<len-i;j++){if(ptr[j]<ptr[j+1]){L temp;temp=ptr[j];ptr[j]=ptr[j+1];ptr[j+1]=temp;}}}}}};
#endif // LIST_HPP

2.栈:

strack.hpp

#ifndef STACK_HPP
#define STACK_HPP#include <iostream>
#include <exception>
using namespace std;template <class T>
class StackNode
{
public:T data;//存储数据StackNode *next;//指向下一个节点//构造函数StackNode(T d):data(d),next(nullptr){}};
template <class T>
class Stack
{
private:StackNode<T> *top;//指向栈顶int len;//栈中元素数量public:Stack():top(nullptr),len(0){}//析构函数~Stack(){while(!empty()){pop();}}bool empty() //判断栈是否为空{return top==nullptr;}int size()//获取栈的大小{return len;}//压栈操作void push(T element){StackNode<T>  *newnode=new StackNode<T>(element);//申请空间并初始化newnode->next=top;top=newnode;len++;}//出栈操作T pop(){if(empty()){throw out_of_range("空栈");}StackNode<T>  *temp=top;T value=top->data;top=top->next;delete temp;len--;return value;}//查看栈顶元素T look_top(){if(empty()){throw out_of_range("空栈");}return top->data;}//清空栈void clear(){while (!empty()){pop();}}Stack& operator=(const Stack& other){if (this != &other){clear(); // 清空当前栈// 复制元素StackNode<T>  *current = other.top;while (current != nullptr){push(current->data);current = current->next;}}return *this;}void swap(Stack& other){StackNode<T> * tempTop = top;top = other.top;other.top = tempTop;T templen = len;len = other.len;other.len = templen;}
};#endif // STACK_HPP

3.队列:

queue.hpp

#ifndef QUEUE_H
#define QUEUE_H#include <iostream>
#include <exception>
using namespace std;template <class T>
class QueueNode
{
public:T data;QueueNode *next;//有参构造QueueNode(T d):data(d),next(nullptr){}
};
template <class T>
class Queue
{
private:QueueNode<T>* front; // 指向队列头部的指针QueueNode<T>* rear;  // 指向队列尾部的指针int count;        // 队列中元素的数量public:// 构造函数Queue() : front(nullptr), rear(nullptr), count(0){}~Queue(){clear();}void clear(){while (front != nullptr){QueueNode<T>* temp = front;front = front->next;delete temp;}rear = nullptr;count = 0;}// 查看队列前端元素T frontElement(){if (empty()){throw std::out_of_range("空队列");}return front->data;}// 查看队列尾部元素T backElement(){if (empty()){throw std::out_of_range("空队列");}return rear->data;}//判断队列是否为空bool empty(){return front == nullptr;}// 获取队列的大小int size(){return count;}// 入队操作void push(T element){QueueNode<T>* newNode = new QueueNode<T>(element);if (rear == nullptr)  // 队列为空{front = rear = newNode;} else{rear->next = newNode;rear = newNode;}count++;}// 出队操作T pop(){if (empty()) {throw std::out_of_range("空队列");}QueueNode<T>* temp = front;T dequeuedValue = front->data;front = front->next;if (front == nullptr) {rear = nullptr;}delete temp;count--;return dequeuedValue;}void swap(Queue& other) {using std::swap;swap(front, other.front);swap(rear, other.rear);swap(count, other.count);}Queue& operator=(const Queue& other){if (this != &other){Queue temp(other); // 临时对象,用于深拷贝swap(temp); // 与临时对象交换内容}return *this;}};
#endif // QUEUE_H

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1548319.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

React学习笔记(2.0)

React事件绑定 语法&#xff1a;在对应标签上书写on事件&#xff08;比如onClick,onChange&#xff09;&#xff0c;注意和原生的事件区分&#xff0c;React的事件首字母要大写。 const handleChange(e:any)>{console.log(e);console.log(change事件触发);// e不是原生事件…

IGZO基底无电容DRAM单元前景看好

1.DRAM技术简介 DRAM&#xff08;Dynamic Random Access Memory&#xff0c;动态随机存取存储器&#xff09;是一种用于计算机和其他电子设备中的主存储器类型&#xff0c;其主要由存储单元阵列构成&#xff0c;而每一个存储单元由一个电容器和一个晶体管组成&#xff0c;如图…

python-金币/打分/小理学数列3

一&#xff1a;金币 题目描述 国王将金币作为工资&#xff0c;发放给忠诚的骑士。 第一天&#xff0c;骑士收到一枚金币&#xff1b;之后两天&#xff08;第二天和第三天&#xff09;里&#xff0c;每天收到两枚金币&#xff1b;之后三天&#xff08;第四、五、六天&#xff09…

智慧农业案例 (一)- 自动化机械

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案&#xff0c;帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、领域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

【Python基础(一)】

学习分享 一、基本语法1、输出print语句2、常量的写法3、运算符 (/) 与(//)4、字符串5、列表5.1、列表查询元素是否存在5.2、列表查询元素是否存在5.3、身份运算符5.4、列表的增删改查 6、元组6.1、tuple() 7、字典8、函数8.1、值传递8.2、引用传递8.3、函数的传参 二、文件的操…

Java零工市场小程序如何实现一站式服务

零工市场小程序作为一个为自由职业者服务的平台&#xff0c;Java编程语言是其坚实的后盾&#xff0c;为自由职业者提供了良好的服务&#xff0c;提高了用户体验感和工作效率&#xff0c;实现了一站式服务。 首先&#xff0c;用户只需在微信中就可使用&#xff0c;注册完善个人信…

基于RustDesk自建远程桌面服务

最近向日葵越来越难用了&#xff0c;官方好像限制了免费用户的带宽&#xff0c;但是限制的有点过头了&#xff0c;卡的基本没法用。 向日葵的平替todesk对于免费用户又有时长限制&#xff0c;对于经常用的小伙伴不大友好。 咱也不是说非得白嫖&#xff0c;但是向日葵和todesk这…

Leetcode 除自身以外数组的乘积

class Solution {public int[] productExceptSelf(int[] nums) {int length nums.length;//一维数组 answer[]存储最终的结果//首先从左往右记录乘积&#xff0c;暂时存储到一维数组 answer[] 中int[] answer new int[length];//先从左往右, 由于由于第一个元素左边没有元素&…

【漏洞复现】灵当CRM multipleUpload.php接口处存在文件上传漏洞

》》》产品描述《《《 灵当CRM致力于为企业提供客户管理数字化、销售管理自动化、服务管理智能化、项目管理一体化的个性化CRM行业解决方案,构建全生命周期的数字化管理体系,实现可持续的业绩增长! 》》》漏洞描述《《《 灵当CRM系统接口multipleUpload.php文件上传漏洞&#x…

艺术家刘欢近况时隔5年再登《歌手》舞台,国家级嗓音引发热议

在我国&#xff0c;有这样一位艺术家&#xff0c;他自上世纪80年代至今&#xff0c;用一首首脍炙人口的歌曲和他那独特的嗓音陪伴数代人成长。凭借音乐上的造诣和天赋&#xff0c;他被众多网友誉为“音乐教父”&#xff1b;攀登至领域巅峰时&#xff0c;他不忘提携后辈&#xf…

通俗易懂的Latex使用步骤

目录 Latex的安装和基本框架 TeX Live和TeXstudio的安装 Latex基本框架 标题 目录 列表 字体设置 图片 单张图片 多张图片&#xff08;以两张图片为例&#xff09;&#xff1a; 多张图片&#xff08;以三张图片为例&#xff09;&#xff1a; 公式 公式复制神器: …

高性能计算应用优化实践之WRF

WRF&#xff08;Weather Research Forecast&#xff09;模式是由美国国家大气研究中心&#xff08;NCAR&#xff09;、国家环境预报中心&#xff08;NCEP&#xff09;等机构自1997年起联合开发的新一代高分辨率中尺度天气研究预报模式&#xff0c;重点解决分辨率为1&#xff5e…

jinaai/jina-embeddings-v2-base-zh向量模型报错解决

报错信息 OSError: We couldn’t connect to ‘https://huggingface.co’ to load this file, couldn’t find it in the cached files and it looks like jinaai/jina-bert-implementation is not the path to a directory containing a file named configuration_bert.py. 报…

智能新宠:BabyAlpha A2开启家庭机器人新时代

具身智能领域的“疯狂”&#xff0c;已经迈入了全新的阶段&#xff01;让我们一起来看看这段视频&#xff1a;一个人形机器人在前面奔跑&#xff0c;一群机器狗紧随其后&#xff1b;接着是人追赶机器狗&#xff0c;随后机器狗又追逐人……视频最后&#xff0c;那个机器人似乎还…

2025台球展,2025河南台球及配套设施展览会3月举办

阳春三月&#xff0c;年度招商季&#xff0c;壹肆柒中国国际台球产业博览会助力全国台球企业拓市场&#xff1b; 2025中国&#xff08;郑州&#xff09;国际台球产业博览会&#xff08;壹肆柒台球展&#xff09; The 2025 China (Zhengzhou) International Billiards Industry…

Uncaught TypeError: (intermediate value).globEager is not a function

在运行代码的时候console提示报错 Uncaught TypeError: (intermediate value).globEager is not a function 解决方案&#xff1a; 在小程序源码搜索globEager&#xff0c;找到对应的文件&#xff0c;把文件中的globEager 替换成glob&#xff0c;下面贴一下源码替换例子&…

Splashtop 在2024年 CybersecAsia 读者之选奖项评选中荣获新星奖

2024年9月26日 新加坡 安全远程访问和支持解决方案领域的领先企业 Splashtop 在第五届 CybersecAsia 读者之选奖项评选中荣获新星奖。该奖项的评选人员包括首席信息安全官、技术领袖和网络安全从业者&#xff0c;旨在表彰亚太地区网络安全领袖在行业中发挥的关键作用、取得的创…

【算法系列-数组】移除元素 (双指针)

【算法系列-数组】移除元素 (双指针) 文章目录 【算法系列-数组】移除元素 (双指针)1. 算法分析&#x1f6f8;2. 删除有序数组中的重复性(LeetCode 26)2.1 解题思路&#x1f3af;2.2 解题过程&#x1f3ac;2.3 代码举例&#x1f330; 3. 移动零(LeetCode 283)3.1 解题思路&…

VSCode rust文件中的api点击无法跳转问题

如果配置了vscode的setting.json windows端的话 "settings": { "typescript.tsc.autoDetect": "off","rust-analyzer.linkedProjects": [".\\gui-btn\\Cargo.toml",".\\temp\\Cargo.toml", ],其他端类似 能不…

C++(9.25)

stack: #include <iostream> using namespace std; class my_stack { private:int* data; // 动态数组&#xff0c;用于存储栈的元素int len; // 当前栈中元素的个数int size; // 栈的最大容量public:// 默认构造函数&#xff0c;初始化容量为 10my_st…