链栈C++实现

数据结构链式栈C++实现 链式栈的存储形式是链表,示意图如下: 只需要一个top指针,入栈出栈都在top指针处。不同于顺序栈的top,链式栈的top是真真正正的节点类型的指针。下面是链式栈的实现; 1. 使用struct的模板来定义节点,包括数据域和指针域,代码如下: //用struct定义节点 template <class T> struct LinkNode { T data; //数据域 LinkNode<T> * link; //指针域,指向下一个节点 LinkNode() //仅 阅读详情

LinkStack.h

#pragma once
#ifndef LINKSTACK_H
#define LINKSTACK_H

#include<iostream>
#include<ostream>
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
template<class T>  class linkStack;

template<typename T>
class Node
{
public:
	Node(Node*ptr=nullptr):next(ptr){}
	T data;//栈的数据
	Node<T>* next;	
};


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

	template<typename T>
	friend ostream& operator<<(ostream& os, linkStack<T>& l);

private:
	Node<T> *top;//定义栈顶指针
};

template<typename T>
linkStack<T>::linkStack(){
	Node<T>* p = (Node<T>*)new Node<T>[1];
	top = p;
	top->next = nullptr;
}

template<typename T>
linkStack<T>::~linkStack(){
	Node<T>* p = top;
	Node<T>* q = nullptr;
	while (p->next!=nullptr){
		q = p;
		p = p->next;
		delete q;
	}
	if (q == nullptr)
		delete q;
	delete p;
}

//进栈
template<typename T>
void linkStack<T>::push(const T& elem){
	Node<T>* p = (Node<T>*)new Node<T>[1];
	p->data = elem;
	Node<T>* q;
	if (!empty()){		
		q = top->next;
		top->next = p;
		p->next = q;
	}
	else
		top->next = p;
}

//出栈
template<typename T>
void linkStack<T>::pop(T& elem){
	if (!empty()){
		Node<T>* p = top->next;
		elem = p->data;
		top->next = p->next;
		//cout <<"移除元素为:"<<elem<<" 剩余元素个数:"<< getSize() << endl;
		delete p;
	}
	else
		cout << "栈已空!" << endl;
}

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

//返回栈中元素的个数
template<typename T>
int linkStack<T>::getSize(){
	int Index = 0;
	Node<T>* p = top->next;
	while (p) {//当p节点不为零时
		p = p->next;
		++Index;
	}
	return Index;
}

//清空栈中的元素
template<typename T>
void linkStack<T>::clearStack(){
	if (!empty()){
		Node<T>* p = top->next;
		Node<T>* q;
		while (p){
			q = p;
			p = p->next;
			delete q;
		}
		if (q == nullptr)
			delete q;
		delete p;
	}
	top->next = nullptr;
}

//打印栈中的元素
template<typename T>
void linkStack<T>::print(){
	Node<T>* p = top->next;
	while (p){
		cout << p->data << " ";
		p = p->next;
	}
	cout << endl;
}

//读取栈顶元素
template<typename T>
bool linkStack<T>::getTop(T&elem){
	Node<T>* p = top->next;
	if (p) {
		elem = p->data;
		return true;
	}
	else {
		cout << "栈为空" << endl;
		return false;
	}

}


template<typename T>
ostream& operator<<(ostream& os, linkStack<T>& l) {
	os << "栈中元素个数为:" << l.getSize() << endl;
	Node<T>* p = l.top->next;
	for (int i = 0; i < l.getSize(); i++){
		os << p->data << " ";
		p = p->next;
	}
	os << endl;
	return os;
}


#endif // !LINKSTACK_H

main.cpp

#include"LinkStack.h"

int main()
{
	linkStack<int> ls;
	int a = 0;
	int b = 0;
	for (int i = 0; i < 10; i++)
	{
		ls.push(i);
	}
	ls.print();
	cout << ls.getTop(b) << " " << b << endl;
	for (int i = 0; ls.empty()==0; i++)
	{
		ls.pop(a);
		cout << a << " ";
		cout << " 循环次数为:" << i + 1 << endl;
	}
	cout << endl;
	cout << ls;
	
}

 

【C++】【数据结构】链栈的基本操作(初始化、入栈、出栈、取栈顶元素、遍历输出栈)的算法实现附全代码 C++实现链栈的算法+步骤(附全代码): 使用c++完成数据结构链栈的基本操作,包括(初始化、入栈、出栈、取栈顶元素、遍历输出栈等),可直接编译运行。 链栈是指采用链式存储结构实现的栈,通常用单链表来表示。它的特点是:用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续也可以是不连续)。 而顺序栈是用顺序存储结构实现的栈,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。 链栈的定义: #define MAXSIZE 100 typedef int SElemType; typedef 阅读详情

相关推荐

数据结构链栈基本操作(C/C++实现)

数据结构链栈基本操作(C/C++实现) 注意:本代码为了测试运行默认含有操作所需数据,如有需要可自己增删改相关数据 涉及基本运算流程 1.初始化栈 2.判断栈是否非空 3.元素依次进栈 4.判断栈是否非空 5.输出出栈序列 6.判断栈s是否非空 7.释放栈 GitHub地址(包含.cpp文件和可执行程序exe) 我的数据结构GitHub地址 源代码(经VS2015、devC++编译器运行通过) #...

JunsIr的技术栈 2174

【数据结构C/C++】顺序栈和链栈详解(附代码)

文章目录前言一、栈的顺序结构及其实现1:顺序栈概念理解2:入栈(压栈)实现方法3:出栈(弹栈)及其实现方法4:顺序栈输出其数据5:主函数二、栈的链式存储结构1.链栈概念理解2.初始化链栈3.链栈元素入栈4.链表元素出栈5.显示链栈元素6.主函数三、链栈与顺序栈优缺点对比 前言 栈是限定仅在表尾进行插入和删除操作的线性表。 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO

Zhangsama1的博客 1万+

【Docker】如何让docker容器正常使用nvidia显卡

描述了如何在docker容器中使用英伟达显卡的过程和问题解决方法。

NameLoadingFailed的博客 8372

C/C++实现栈的链式结构(链栈)

今天我们学习的是链栈,也就是说栈的链式结构,我们运用顺序链的方式来实现。首先呢,链栈是不存在存储空间满的情况的,所以可以说它是个无底洞,然而我们之前学的顺序栈是有额定空间的。 栈顶指针总是指向栈顶前面的头节点(head top)。在链式栈中,我们也需要使用空间申请的方式来获取空间内存,当然了,如果我们进行出栈操作后,我们就得释放空间。 我们先定义个数据类型: typedef int StackElementType; typedef int Belongs_NewBull; 链式栈的定义: .

m0_54202580的博客 2174

RK3588与银河麒麟V10 SP1 2403深度适配:国产化硬件与操作系统的完美融合

本文深入探讨了RK3588处理器与银河麒麟V10 SP1 2403操作系统的深度适配,展示了国产化硬件与操作系统的完美融合。通过性能验证和实际应用测试,证明了这套组合在多媒体处理、AI推理和日常办公中的卓越表现,实现了完全自主可控的计算平台。

weixin_29194255的博客 248

ThreeJS教程:地图案例(包围盒、正投影)

推荐:将加入你的3D工具链。

jianshi2023的博客 1007

数据结构————链栈基本操作(C++实现)

(一)数据结构设计 1.人机交互性 2.面向对象之属性与方法 //链栈 class LinkedStack { public: LinkedStack(void); //构造函数 ~LinkedStack(void); //析构函数 bool IsEmpty(void);//判断栈空 int LengthStack(void);//栈长度 bool Push(const int &);//入栈 bool Pop

weixin_51358062的博客 3128

11.嵌入式控制器EC实战 KBC矩阵键盘Keyboard开发流程

文章目录笔记本矩阵键盘概述矩阵键盘的扫描方式行列扫描方式逐行逐列扫描方式EC中矩阵键盘是如何扫描并得到码值的(代码分析) 笔记本矩阵键盘概述 在EC中支持两种形式的键盘,一种是PS/2接口的键盘,这种键盘几乎已经被USB接口的键盘所取代,所以PS/2接口的键盘不在我们的讨论范围。 另一种键盘则是矩阵键盘,也是笔记本电脑的内置键盘,该键盘类似于学习单片机时使用的4*4的那种键盘,笔记本使用的矩阵键盘有三种规格,分别是16*8、17*8和18*8。16、17和18代表着该款键盘的列数,8代表着键盘的行数,我们这

qq_30135687的博客 3809

C++版,链栈的实现,简单易懂

C++版,链栈的实现,简单易懂

AABond的博客 869

【35】软考软件设计师——设计模式代码填空(C++版)满分精讲|第5/6题二选一必考

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第35篇,聚焦下午选做题**第5/6题C++版设计模式代码填空**,与上一篇Java版形成双子配套,单题分值稳定12~15分。全文超4000字深度拆解C++独有核心考点:虚函数/纯虚函数、构造与析构函数规范、继承权限、模板类编程在设计模式中的应用;精讲单例、工厂、策略、观察者、适配器五大高频模式的C++专属代码写法,标注所有填空核心点位、语法陷阱、内存安全规范

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 543

如何利用air780e与stm32c8c6进行通信实现给手机发送一条英文短信的功能?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1237

链栈之C++实现

链栈是借用单链表实现的栈。其不同于顺序栈之处在于: 1、链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限。而顺序栈则是 静态分配内存的。 2、链栈动态分配内存的特性使得它一般无需考虑栈溢出的问题。           链栈的的组织结构如下图所示。容易发现其是架构的单链表的基础之上的。                 下面介绍下我用C++实现的链栈,VC6下调试。 1

ON THE WAY TO GEEK 1万+

从零到一破解Uber实时行程API:逆向工程与高并发爬虫实战

在数据采集领域,Uber的实时行程数据始终处于“传说级”难度。动态令牌系统- 每30秒轮换的Bearer Token证书固定(Certificate Pinning)- 阻止中间人攻击请求签名算法- 基于时间戳+用户设备的HMAC-SHA256行为分析- 鼠标轨迹、请求间隔的机器学习模型全链路加密- GraphQL端点的payload加密目录前言:为什么Uber爬虫被称为“地狱难度”?第一章:环境准备与法律边界1.1 技术栈选择(2026年最新)1.2 法律免责声明。

2201_76125261的博客 892

C++实现链栈

C++实现链栈 创建链栈 从头至尾打印链表 入栈 弹栈 得到栈顶节点数据 整体代码: #include<iostream> using namespace std; struct Node{//节点类与链表的节点类一样 int data; Node *next; }; class LStack{//链栈不带头结点 private: Node *point; i...

qq_44182424的博客 432

华为OD机试2025A卷 - BOSS的收入(Java & Python& JS & C++ & C )

华为OD机试2025A卷 - BOSS的收入(Jav一个XX产品行销总公司,只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销。规定,每个月,下级分销需要将自己的总收入(自己的+下级上交的)每满100元上交15元给自己的上级。现给出一组分销的关系,和每个分销的收入,请找出boss并计算出这个boss的收入。输入:分销关系和收入:[[分销id 上级分销id 收入], [分销id 上级分销id 收入], [分销id 上级分销id 收入]]输出:[boss的ID, 总收入]

算法大师! 1171

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++ 链栈实现

#include using namespace std; template class LinkStackNode { public: T data; LinkStackNode* next; LinkStackNode(T &d):data(d),next(NULL){} }; template class LinkStack { public:

liutianjia2014的博客 1218

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++实现一个链栈

链栈不名思意,就是既具有链表的特性,又具有栈的特性。链栈中的元素由指针域和数据域组成,通过指针指向下一个元素;2.链栈同时又具有栈的特性,先进后出。

肩上风骋的博客 455

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

链栈的基本操作C/C++代码实现

链栈的结构: 由于栈的主要操作是在栈顶插入和删除, 显然以链表的头部作为栈顶是最方便的,且不需要附加一个头结点。 初始化: 栈顶指针S置空即可。 入栈: 链栈不需要判断栈是否满! 出栈: 栈顶指针S等于NULL表空栈,即链栈S==NULL时为空栈。 代码如下: #include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef int SElemType; //链栈的存储结构 typedef struct Sta

Ycy的博客 4747

数据结构之链栈 C++实现

数据结构之链栈 C++实现 第一次写博客 如有问题 望海涵 用到了引用所以算是C++实现的吧 刚入门的朋友不懂得可以问我 如果是大佬希望多指导 #include <cstdio> #include <cstdlib> typedef struct LinkStack { int data; struct LinkStack* Next; }LinkStack,*LiStack; //创栈 创 bool InitLinkStack(LiStack &LS) { if (

weixin_45327082的博客 410

链栈的实现 c++

c++实现链栈: //链栈的实现 #include <iostream> #include <string> using namespace std; struct Data { public: int bookNum; Data * next; }; //链栈的初始化 Data* SeqStackInit() { Da...

193

链栈的c++实现

2013-08-30 20:58 1876人阅读 评论(0) 收藏 举报           链栈是借用单链表实现的栈。其不同于顺序栈之处在于: 1、链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限。而顺序栈则是 静态分配内存的。 2、链栈动态分配内存的特性使得它一般无需考虑栈溢出的问题。           链栈的的组织结构如下图所示。容易发现其是架构的单链表的基础之

落影无痕 551

C++链栈的模板实现

C++链栈的模板实现 #pragma once //链栈的实现 #include <iostream> using namespace std; template<typename DataType> struct Node { DataType data; Node<DataType>* next; }; template<typename D...

questionhahaha的博客 496

链栈的C++实现

链栈的C++实现 文章目录 #类的界面 #类的实现 前言 在数据结构的学习中我了解到了链栈,故写下这篇博文加以记录,第一次写博文,如果有什么地方可以改善,欢迎大家指出。 一、stack类的界面 #include<iostream> #define elementype int using namespace std; struct node { elementype date; node* next; }; class stack { public: stack(); ~stack(

Patrick_Star___的博客 551

C++实现链栈的各项操作

C++实现链栈初始化、判空、进栈、出栈、取栈顶元素的值

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值