C++ day6

devtools/2025/1/16 5:51:02/

作业:1、手动实现stack部分功能

           2、手动实现queue部分功能

1、

头文件

#ifndef HEAD_H
#define HEAD_H
#include <iostream>
#include<cstring>
#define MAX 10
using namespace std;
class Stack
{
private:int* data;     //存储栈的容器,指向堆区空间int top;       //记录栈顶下标的元素int max;       //记录栈的最大容量
public:Stack();                                                     //无参构造Stack(int);                                                  //有参构造~Stack();                                                   //析构函数Stack& operator=(Stack& other);                              //赋值函数int& mytop();//判空bool empty();//size 返回容纳的元素数int mysize();//栈顶插入void mypush(int);//出栈Stack& mypop();
};#endif // HEAD_H

源文件

#include"head.h"
Stack ::Stack()                                                     //无参构造
{data = new int[MAX];max = MAX;top = -1;cout<<"无参构造了一个容量为10的栈"<<endl;
}
Stack ::Stack(int num)                                              //有参构造
{data = new int[num];max = num;top = -1;cout<<"有参构造了一个容量为"<<num<<"的栈"<<endl;
}
Stack ::~Stack()                                                  //析构函数
{top = -1;delete[] data;data=NULL;cout<<"析构函数调用"<<endl;
}
//赋值函数
Stack& Stack ::operator=(Stack& other)
{if(this!=&other)        //自检{delete [] data;data = new int[other.max];this->top=other.top;this->max = other.max;for(int i=0;i<max;i++){data[i]=other.data[i];}}cout<<"赋值函数调用"<<endl;return *this;}
//访问栈顶元素
int& Stack :: mytop()
{return data[top];
}
//判空
bool  Stack ::empty()
{return top==-1;
}
//size 返回容纳的元素数
int Stack :: mysize()
{return top+1;
}
//栈顶插入
void Stack ::mypush(int value)
{//插入逻辑if((top+1)<=max) //未满{data[++top] = value;}else{cout<<"栈已满"<<endl;}
}
//出栈
Stack& Stack::mypop()
{//出栈逻辑if(empty()){cout<<"栈已空"<<endl;}else{top--;}return *this;
}

 main

#include"head.h"
int main()
{Stack s1;  //无参构造s1.mypush(1);       //调用入栈s1.mypush(12);s1.mypush(3);s1.mypush(99);cout<<"s1.szie ="<<s1.mysize()<<endl;  //调用sizecout<<"s1 栈顶为"<<s1.mytop()<<endl;    //调用topcout<<"**********************************************"<<endl;Stack s2(5);  //有参构造s2=s1;    //赋值函数cout<<"s2.szie ="<<s2.mysize()<<endl;cout<<"s2 栈顶为"<<s2.mytop()<<endl;s2.mypop();         //调用出栈cout<<"s2 栈顶为"<<s2.mytop()<<endl;return 0;
}

2、

头文件

#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
#define MAX 10
using namespace std;
class Queue
{
private:int *data;   //存储队列的容器int front;          //记录队头下标int tail;           //记录队尾下标int capacity;      //记录队列最大容量
public:Queue();   //无参构造Queue(int);   //有参构造~Queue();   //析构函数Queue& operator=(Queue &other); //赋值函数int& myfront();  //访问第一个元素int& mytail();   //访问最后一个元素bool empty();  //判空bool full();   //判满int getsize(); //获取当前元素数量void mypush(int); //入队Queue& mypop();   //出队void queue_show();
};
#endif // QUEUE_H

源文件

#include"queue.h"//无参构造
Queue ::Queue()
{data = new int[MAX];front = tail =0;capacity = MAX;cout<<"无参构造了容量为"<<capacity<<"的队列"<<endl;
}
Queue ::Queue(int max)   //有参构造
{data= new int[max];front = tail =0;capacity = max;cout<<"有参构造了容量为"<<capacity<<"的队列"<<endl;
}
Queue:: ~Queue()   //析构函数
{delete []data;cout<<"析构函数调用成功"<<endl;
}
Queue& Queue ::operator=(Queue &other) //赋值函数
{if(this!=&other)        //自检{delete [] data;data = new int[other.capacity];this->front=other.front;this->tail = other.tail;this->capacity=other.capacity;for(int i=front;i!=tail;i=(i+1)%capacity){data[i]=other.data[i];}}cout<<"赋值函数调用"<<endl;return *this;
}
int& Queue ::myfront()  //访问第一个元素
{return data[front];
}
int& Queue ::mytail()   //访问最后一个元素
{return data[tail-1];
}//判空
bool  Queue ::empty()
{return front==tail;
}
//判满
bool Queue ::full()
{return (tail+1)%capacity==front;
}
//获取当前元素数量
int Queue ::getsize()
{return (tail-front+capacity)%capacity;
}
//入队
void Queue ::mypush(int value)
{if(full()){cout<<"队列满"<<endl;}else{data[tail]=value;tail= (tail+1)%capacity;}
}
//出队
Queue& Queue ::mypop()
{if(empty()){cout<<"队列已空"<<endl;}else{front = (front+1)%capacity;}return *this;
}
void Queue ::queue_show()
{if(empty()){cout<<"队列为空"<<endl;}else{cout<<"队列中的元素为:";for(int i=front;i!=tail;i=(i+1)%capacity){cout<<data[i]<<'\t';}cout<<endl;}
}

主文件

#include"queue.h"int main()
{Queue q1;q1.mypush(3);q1.mypush(2);q1.mypush(4);q1.mypush(5);q1.mypush(1);cout<<"队列第一个元素为:"<<q1.myfront()<<endl;cout<<"队列最后一个元素为:"<<q1.mytail()<<endl;cout<<"队列中有:"<<q1.getsize()<<"个元素"<<endl;cout<<"***************************************************"<<endl;Queue q2(4);q2.mypop();q2=q1;q2.queue_show();q2.mypop();q2.queue_show();cout<<"***************************************************"<<endl;return 0;
}

 效果图

 

 思维导图


http://www.ppmy.cn/devtools/108543.html

相关文章

RPC框架-protobuf-rpc-pro

protobuf-rpc-pro 是一个基于 Protocol Buffers 的 RPC 框架&#xff0c;旨在通过使用 Google 的 Protocol Buffers&#xff08;Protobuf&#xff09;序列化格式实现高效、轻量的远程过程调用&#xff08;RPC&#xff09;。它主要用于 Java 生态系统&#xff0c;提供了简洁的 A…

linux小程序-进度条

文章目录 pro.hpro.cmain.cmakefile测试 pro.h #pragma once#include <stdio.h>typedef void(*callback_t)(double, double);void probar(double total, double current);pro.c #include "pro.h" #include <string.h> #include <unistd.h> #defi…

【区块链 + 物联网】智慧路灯计费和融资区块链解决方案 | FISCO BCOS应用案例

在传统的城市建设和管理模式下&#xff0c;照明的路灯杆、交通的红绿灯杆、安防的监控杆、街道指示牌杆、广告宣传杆 等分开建设&#xff0c;不仅杆体功能单一&#xff0c;还存在资源浪费、管理分散、影响市容等问题。区块链的技术特性与智慧路灯 投资运营模式有天然的结合点&a…

Redis的incr命令引发的反序列化异常和ERR value is not an integer or out of range异常

在Java中使用inc命令的时候发现redis中的值被反序列化后居然不是数字,检查后发现可能是序列化器没对,在redis配置的地方将序列化器设置为 Jackson2JsonRedisSerializer后使用整成,贴上代码 Bean(name "RedisTemplate")SuppressWarnings("all")public Red…

无人机陀螺仪原理以及作用!

一、陀螺仪的基本原理 陀螺仪基于旋转惯性力的陀螺效应&#xff0c;利用旋转物体具有惯性力矩的物理现象。当外部力矩作用时&#xff0c;陀螺在垂直于力矩方向上产生章动&#xff08;进动&#xff09;运动&#xff0c;通过测量这种章动运动来获取角速度信息。此外&#xff0c;…

传统CV算法——基于Opencv的多目标追踪算法

基于 OpenCV 的跟踪算法有多种&#xff0c;每种算法都有其特定的应用场景和优缺点。以下是一些常见的基于 OpenCV 的目标跟踪算法&#xff1a; 1. BOOSTING 跟踪器 描述&#xff1a;基于 AdaBoost 算法的跟踪器。它是一种早期的跟踪算法&#xff0c;使用的是基于弱分类器的强…

【SpringBoot】使用Nacos服务注册发现与配置管理

前提&#xff1a;需要提前部署好nacos服务&#xff0c;这里可以参考我的文章&#xff1a;Windows下Nacos安装与配置 0. 版本信息 Spring Boot3.2.8Spring Cloud2023.0.1Spring Cloud alibaba2023.0.1.0nacos2.3.2本地安装的nacos2.3.0 Spring Boot、Spring Cloud、Spring Clo…

ASP.NET Core 入门教学八 集成RocketMQ消息队列

在ASP.NET Core中集成RocketMQ消息队列&#xff0c;你需要遵循以下步骤&#xff1a; 1. 安装RocketMQ客户端库 首先&#xff0c;你需要在你的ASP.NET Core项目中安装RocketMQ的.NET客户端库。你可以使用NuGet包管理器来完成这个任务。在Visual Studio中&#xff0c;右键点击你…