C++顺序栈实现

C++实现顺序栈 近期在学习C++ 的过程,由于时间仓促,基本知识未能及时整理(后期补充),为了巩固所学的知识,用C++语言来实现顺序栈。基本代码如下:/* ** 题目:实现顺序栈 */#include<iostream> #include<cstring> #include <stdlib.h> #include <time.h> using namespace std;class SqStack { priv 阅读详情

模板类文件位置:声明和定义均要在头文件中进行,否则会出现链接错误,不可只在头文件声明,在cpp文件中定义

环境VS2019

模板类中的友元函数声明:在类内声明友元函数时,需要在上面加上 模板头 template<class T>,否则会报错,具体原因网址

https://bbs.youkuaiyun.com/topics/120094418

构造函数中使用return;不影响结果,貌似是这样,在我这个例子

 

sequentialStack.h

#pragma once
#ifndef SEQUENTIALSTACK_H
#define SEQUENTIALSTACK_H

#include<iostream>
#include<ostream>
using std::cout;
using std::cin;
using std::endl;
using std::ostream;


template<typename T>
class seqStack
{
public:
	seqStack(int numSize);
	~seqStack();
	void push(const T& elem);//进栈
	void pop(T& elem);//出栈
	bool empty();//查看栈是否为空
	int getSize();//返回栈中元素的个数
	void clearStack();//清空栈中的元素
	void print();//打印栈中的元素

	template<typename T>
	friend ostream& operator<<(ostream& os, seqStack<T>& s);//必需这样写否则报错

	

private:
	int maxsize;//栈最大的空间
	T *element;//存放栈中的元素的栈数组
	int top;//栈顶指针
};



template<typename T>
seqStack<T>::seqStack(int numSize) {
	maxsize = numSize;
	element = new T[maxsize];
	if (element == nullptr) {
		cout << "内存分配失败!";
		return;//用return无值不会报错,有值就会报错
	}
	top = -1;//保证top与数组元素同时移动
}

template<typename T>
seqStack<T>::~seqStack() {
	if (element != nullptr)
		delete[]element;
}

//进栈
template<typename T>
void seqStack<T>::push(const T& elem) {
	if (top < maxsize - 1)
		element[++top] = elem;
	else
		cout << "超过数组范围" << endl;
}

//出栈
template<typename T>
void seqStack<T>::pop(T& elem) {
	elem = element[top--];
	element[top + 1] = 0;//置零
}

//查看栈是否为空
template<typename T>
bool seqStack<T>::empty() {
	if (top == -1)
		return true;
	else
		return false;
}

//返回栈中元素的个数
template<typename T>
int seqStack<T>::getSize() {
	return top + 1;
}

//清空栈中的元素
template<typename T>
void seqStack<T>::clearStack() {
	while (!empty())
		element[top--] = 0;
}


template<typename T>
ostream& operator<< (ostream& os, seqStack<T>& s)
{
	os << "栈中元素个数为:" << s.getSize() << ".  " << endl;
	/*os << s.print();*///由于print()为void,这样写会报错
	return os;//注意该友元函数是有返回值的
}


//打印栈中的元素
template<typename T>
void seqStack<T>::print() {
	int index = 0;
	cout << "栈中元素为: ";
	while (index <= top)
		cout << element[index++] << " ";
	cout << endl;
}


#endif // !SEQUENTIALSTACK_H

main.cpp

#include"sequentialStack.h"

int main()
{
	seqStack<int>stack(20);
	int val;
	for (int i = 0; i < 5; i++)
		stack.push(i);
	stack.print();
	cout << stack;
	while (!stack.empty())
	{
		stack.pop(val);
		cout << val << " ";
	}
	cout << endl;
}

 

c++顺序栈和链式栈的实现 基本定义: 栈(Stack)是n个元素a1,a2,…an,组成的有限序列,记作S =(a1,a2,…,an),并且只能在一端插入和删除元素,n=0时称为空栈。 栈的特征: 由于栈只能从一端插入和删除元素,故栈具有后进先出(Last in,first out,LIFO)的特性。称插入和删除的一端为栈顶(top),另一端为栈底(bottom)。称插入元素为入栈或压栈(push),删除 阅读详情

相关推荐

C++数据结构--顺序栈的实现

2.9 数据结构–栈 ​ 是一种只可以从一端插入和删除元素的线性表,允许进行插入和删除的一端称之为栈顶,栈顶是动态变化的,和线性表一样,他也有两种存储方式:顺序存储和链式存储。 2.9.1 顺序栈 seqstack.h #ifndef SEQSTACK_H #define SEQSTACK_H #define STACKSIZE 100 #include <iostream&gt; #include <memory.h> using namespace std; class Seq

weixin_43520503的博客 339

C++ 友元函数模板 和 友元类模板 和 顺序栈

在开始的开始,强烈鄙视清华大学出版社的殷人昆的数据结构,身为一本教材竟然如此多错误! 今天按照那本该死的数据结构写了一个顺序栈,在友元函数模板处遇到无法识别的标识符错误。 friend ostream & operator & s); 而在类中的友元模板,应该这样用: 1.友元函数模板 template class A { public: template friend

Cc.cc.c's新手笔记 748

C++顺序栈的实现

STL顺序栈介绍及实现

Excalibur6的博客 1091

用c++实现顺序栈基本操作

用c++实现顺序栈基本操作:顺序栈结构体定义,初始化,入栈 ,出栈 ,读栈顶元素 ,遍历栈,栈判空,求栈长,栈清空,栈销毁

qq_52487341的博客 4769

C++模板实现顺序栈详解

顺序栈是一种使用顺序存储结构实现的栈,它是一种后进先出(Last In First Out, LIFO)的数据结构,类似于一摞叠加的盘子,最后放入的盘子必须先取出。在顺序栈中,元素的添加和删除操作都发生在栈顶,通过数组或动态数组实现。C++模板是泛型编程的基础,它允许程序员编写与数据类型无关的代码,提高了代码的复用性并减少了代码冗余。模板分为两类:函数模板和类模板。函数模板是对多个函数执行相同操作的情况的抽象,它可以自动根据传入的参数类型推导出模板参数,生成相应的函数实例。a : b;

weixin_35592186的博客 774

TPC好像是这么回事儿

TPC(Transmit Power Control)发送功率控制,本觉得就是控制一下发送功率,原理很简单,但看原版协议死活每搞懂什么意思,恼羞成怒!!!! 后来又看了一些贴子和cisco的相关功能介绍,再回头看协议,好像是这么一回事: 1、所谓TPC,是AP控制STA的发送功率的一种手段。在802.11d中,已定义了使用Country Element传递区域无线通信规定的信道和最大发送功率信息: 通过获取这些信息,STA可以确定自己应该遵守什么规则,可以用什么发送功率在哪些信道上通信。 2

两只勤劳的蜜蜂 8625

顺序栈的实现(C/C++)

顺序栈 顺序栈是用顺序存储结构实现的栈,即利用一组地址连续的存储单元 依次存放自栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须附设一个位置指针top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置置。通常以top=-1表示空栈。 关于程序的前定义: #define SIZE 100//栈的最大容量 typedef int ElemType;//定义的抽象数据类型 typedef int CLC;//为方便以下的使用 对于顺序栈的定义: typedef struct SqStack { E

m0_54202580的博客 3513

Eureka自我保护机制

Eureka自我保护机制 默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last

Soul_Ming的博客 541

数据结构_顺序栈(C++实现

数据结构_顺序栈(C++实现

浴巾的贼船 660

Open3D:读写点云与可视化(C++)

迭代 //Open3D #include "Open3D/Open3D.h" //Eigen #include "Eigen/Dense" void testOpen3D::xjGetInformation(const QString &pcPath) { /* read PC */ auto cloud_ptr = std::make_shared<open3d::geometry::PointCloud>(); if (!open3d::io::ReadPointCl

累了就要打游戏 1万+

ERA5获取的风场数据转换为.dfs2文件

ERA5获取风场数据的具体步骤可以参考下面的文章下载好后应该是.nc格式的文件,想要读取或者转换成其他格式的文件可以安装下面步骤,本文介绍如何转换为.dfs2文件。

我的博客 1459

顺序栈之C++实现

顺序栈就是用顺序表(数组)实现的栈。其组织形式如下图所示:              下面介绍下我用C++实现的顺序栈,在VC6下调试通过。不足之处还请指正。 1、文件组织   2、ss.h栈类的声明及宏的定义 #ifndef _SS_H_ #define _SS_H_ typedef int dataType; #define maxSize 100 clas

ON THE WAY TO GEEK 3077

【python】geopandas库安装出现各种问题?可以看看这篇文章

geopandas的安装方法

jgsecurity的博客 3886

C++用顺序栈实现进制转换

C++语言,用顺序栈实现十进制向任意进制的转换 #include<iostream&gt; #include<stdlib.h> #include<fstream> using namespace std; typedef int ElemType; struct Stack{ ElemType *stack; int top; int MaxSize; }...

小菜鸟 1万+

萤石摄像头批量下载视频后FFmepg拼接

本文描述萤石摄像头,如何批量下载视频,然后把视频片段拼接为一个完整的视频,亲测有效。有问题,可以下面留言

烤鱼哥哥的博客 1202

手把手教你从入门到精通C# Modbus通信

本文是《Modbus通信从入门到精通》的导读,本专栏将会详细介绍ModusRTU 、ModbusASCII、ModbusTCP这三种协议的C#实现,由一个高级工程师多年实战经验总结而成,绝对干货!

qq_34059233的博客 1万+

顺序栈实现C++

分析 如果要实现一个顺序栈,首先我们就需要有个静态数组,同时还需要有个数组的长度。其次呢我们需要有两个指针,一个指针指向栈顶,一个指向栈底(主要是方便入栈,出栈操作方便) 栈的初始化 有了这个思路之后,我们就可以进行栈的初始化了。那么初始化的需要让咱们栈有个固定长度吧,那我们就得给他分配一个数组,其次呢,一开始阶段,我们栈里(目前是个数组)是什么值都没有的,所以我们就需要让两个指针指向数组的最底部吧。有了这些基础之后,我们就可以用代码实现啦。 代码见下: 内联代码片。 1.定义一个长度 #define M

qq_45353823的博客 3081

MIKE水动力笔记5_建立水动力模型

前文已经讲了如何制作网格文件(.mdf文件),这一博文就讲如何建立水动力模型。

晏长街的博客 3万+

顺序栈的C++实现

数据结构——顺序栈的C++实现 #include<iostream&gt; using namespace std; template<class T>//定义类模板 class Stack { public: void Clear(); //清空栈 bool Push(const T item); //栈的压入操作 bool Pop(T& item); //读取栈顶元素的值并删除 bool Top(T& item); //读取栈顶元素的值但不删除 bool I

qq_51534032的博客 371

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据结构顺序栈C++实现

栈,先入后出,根据存储方式可以分为顺序栈和链式栈。顺序栈的存储基于数组,链式栈的存储基于链表。 顺序栈就是以c语言的数组作为内存空间来构成的栈。栈顶指针top不再是c语言的指针类型,而是元素的下标。本文仍然使用模板的方法来实现,因为模板使用的内置数据类型较多,更全面。 1. 首先定义一下栈的通用接口,写在 “stack.h” 头文件中,通用接口为纯虚函数,方便顺序栈来继承和重写,以实现C++的多态。 “stack.h” 头文件代码如下: ...

Brillian123的博客 3714

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

顺序栈的实现 c++

用c++实现顺序栈: //顺序栈的实现 #include <iostream&gt; #include <string> #define MAXSIZE 100 using namespace std; struct Data { public: int bookNum[MAXSIZE]; static int top ; };...

awp51086的博客 104

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C++语言实现顺序栈

C++语言实现顺序栈 在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法。在这里小编就不在继续给大家介绍了,需要温习的可以去我的博客看看。在这篇博客我就给大家分享一下利用C++模板类来实现顺序栈的相关操作,主要实现了以下功能: 私有成员的封装 根据顺序栈的特点,封装了elements这样的数组存放栈中元素,top代表栈顶指针,maxSize代...

BeiXi's Blog 1361

C++实现顺序栈的各项操作

C++实现顺序栈的初始化、判空、插入、取栈顶元素、删除栈顶元素

qq_43788351的博客 587
上一篇: 双向链表C++实现
下一篇: 链栈C++实现
-Gentle-
博客等级 码龄8年 80粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值