C++实现链栈的基本操作

之前对顺序栈写了基本操作,认为有必要也动手练练栈的链表实现。

对于链栈,一般不会出现栈满的情况。

链栈头文件定义例如以下:

#ifndef CSTOCK_H_
#define CSTOCK_H_typedef int elemType;struct Item
{elemType data;Item * p_next;
};
class CStock
{
public:CStock();CStock(const CStock & otherStock); //拷贝构造函数;CStock & operator = (const CStock & otherStock); //=运算符重载。void push(elemType x);//进栈操作;bool pop(elemType &x); //出栈操作;bool isEmpty() const; //推断栈空;void clear();//清空栈。使栈为空;int size() const; //获得栈的大小。void print() const; //打印栈内元素;~CStock();public:Item *p_Top;//栈顶
};#endif


实现的基本功能例如以下:

#include "CStock.h"
#include <iostream>
using std::cout;
using std::endl;CStock::CStock(): p_Top(NULL)//构造函数
{}
//拷贝构造函数 便于定义时初始化,如 CStock s1 = stock; 默认的会出现潜在问题
CStock::CStock(const CStock & otherStock):p_Top(NULL)
{*this = otherStock;
}
// =运算符重载,便于赋值,如:CStock s1; .... CStock s2; s2 = s1;  默认的会出现潜在问题。

我写的这种方法认为不好,有好的写法希望大神能指导指导。 CStock & CStock::operator =(const CStock & otherStock) { CStock tempStock; Item * copyElement = otherStock.p_Top; //将栈otherStock的元素出栈,依次进入tempStock内,元素的位置顺序和otherStock相反; while(copyElement) { tempStock.push(copyElement->data); copyElement = copyElement->p_next; } copyElement = tempStock.p_Top; //将tempStock的元素出栈,依次进入此栈内,元素位置和otherStock同样。 while(copyElement) { push(copyElement->data); copyElement = copyElement->p_next; } return *this; } //进栈操作 void CStock::push(elemType x) { Item * pushElement = new Item; pushElement->data = x; if(!p_Top)//假设栈为空时 { p_Top = pushElement; pushElement->p_next = NULL; } else //若栈不为空时 { pushElement->p_next = p_Top; p_Top = pushElement; } } //出栈操作,若栈不为空。数据有形參x带至主调函数,出栈失败函数返回false; bool CStock::pop(elemType &x) { if(!p_Top) { return false; } x = p_Top->data; p_Top = p_Top->p_next; return true; } //推断栈是否为空 bool CStock::isEmpty() const { return p_Top == NULL; } //清空栈,使栈置为空栈 void CStock::clear() { Item * deleteElement; while(p_Top) { deleteElement = p_Top; p_Top = p_Top->p_next; delete deleteElement; } } //获得栈的大小 int CStock::size() const { int length = 0; Item *temp = p_Top; while(temp && ++length) { temp = temp->p_next; } return length; } //打印栈内元素 void CStock::print() const { int count = 0; Item * temp = p_Top; while(temp && ++count) { cout << temp->data << "\t"; if(count % 5 == 0) cout << endl; temp = temp->p_next; } } //析构函数,提供对指针成员的释放,默认的会出现潜在问题 CStock::~CStock(void) { Item * deleteElement; while(p_Top) { deleteElement = p_Top; p_Top = p_Top->p_next; delete deleteElement; } }




转载于:https://www.cnblogs.com/zfyouxi/p/5082125.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现网上招标系统

导读:本设计尝试用JSP在网络上架构一个下沙派威客网,以推进网站无纸化,过程电子化,管理智能化的发展。本文从理论和实践两个角度出发,对一个具有数据分析功能的下沙派威客网进行设计与实现分析。论文首先较为详尽地介绍了面向对象分析与设计的有关概念与技术,特别深入介绍…

mysql加上判断_在mysql中where加if判断

在mysql中where中多重条件if判断,项目需求如下: 好友关系中本身具有A,B,C三种角色,好友动态分为1,2,3,4,5种类型。A是必须具有的角色,如果具有A角色可查好友动态类型1,3,4 的信息如果具有B角色可查2类型信息,如果具有C角色可查5类型角色。 实现思想如下:先查出好…

Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB

MongoDB 简介 1. 易于使用&#xff1a;没有固定的模式&#xff0c;根据需要添加和删除字段更加容易 2. 易于扩展&#xff1a;MongoDB的设计采用横向扩展。面向文档的数据模型使它能很容易的再多台服务器之间进行分割。自动处理跨越集群的数据和负载&#xff0c;自动重新分配文档…

java实现俄罗斯方块项目

导读:俄罗斯方块项目,基本功能包括:游戏主界面显示模块、方块及数据显示模块、方块移动控制模块、游戏界面颜色控制模块、游戏进度、等级控制模块等。本项目结构如下: (1)游戏主界面显示模块: 显示游戏和帮助两个菜单; 游戏使用功能键盘,得分 等级; (2)画布…

js数组操作大全

shift:删除原数组第一项&#xff0c;并返回删除元素的值&#xff1b;如果数组为空则返回undefined Javascript代码 var a [1,2,3,4,5]; var b a.shift(); //a:[2,3,4,5] b:1 unshift:将参数添加到原数组开头&#xff0c;并返回数组的长度 Javascript代码 var a [1,2,…

mysql与mssql中datetime类型字段问题_excel数据存入sqlserver过程中,遇到Datetime的格式问题。...

先讲一下我实现的大致思路&#xff1a; 1 读取excel数据&#xff0c;赋值到datatable中&#xff0c;然后在页面上显示 细节描述&#xff1a;有一些列是存到数据库时要是datetime格式的&#xff0c;我在赋值到datatable时也是做 如下处理的 DataColumn dtColumn new DataColumn…

java概述_Java 7功能概述

java概述前面我们讨论了所有未纳入Java 7的内容&#xff0c;然后回顾了将其纳入Java的有用的Fork / Join框架 。 今天的帖子将带我们了解Project Coin的每个功能-一系列小的语言增强功能&#xff0c;这些功能虽然不是开创性的&#xff0c;但是对于任何能够使用JDK 7的开发人员来…

java实现即时通讯软件

导读:即时通讯软件即所谓的聊天工具,其主要用途是用于文字信息的传递与文件传输。使用eclipse作为即时通讯软件的开发工具,使用Socket建立通讯渠道,多线程实现多台计算机同时进行信息的传递,swing技术等进行实际开发相对比较合适。通过一些轻松的注册登录后,在局域网中即…

两种类型的Spark RDD task解析以及iterator解析 -- (视频笔记)

spark 每次提交一个作业&#xff0c;都会划分成不同的stage&#xff0c;除了最后一个stage&#xff08;shuffle map task&#xff09;&#xff0c;前边的stage属于一种类型&#xff08;result task&#xff09;。 spark中的job&#xff0c;内部是由具体task构成&#xff0c;由于…

JBoss BRMS复杂事件处理(CEP)性能基准

技术来了又去&#xff0c;但是一件事保持不变。 在设计企业解决方案时&#xff0c;我们喜欢使我们的生活更轻松的复杂组件&#xff0c;并且作为建筑师和开发人员&#xff0c;我们一直在寻找使我们的生活更轻松的方法。 一种方法是跟上与感兴趣的技术有关的流行新站点。 另一种…

python 函数递归一次增加一次变量_python函数局部变量、全局变量、递归知识点总结...

函数局部变量 全局变量 及其作用域 #简单类型(int str等)变量的局部变量与全局变量及其作用域的关系name "xxx" #第一级顶头定义的变量都称为全局变量&#xff0c;其作用域从变量定义的位置开始到此程序结束def Print_Name():print("name before change:"…

java实现出租车计价器

导读: 在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生。但当时在全国没有一家企业能够生产,因而那个时期的计价器是由台湾引进。台湾是计价器的主要生产场地,目前全世界的计价器中有90%为台湾生产。现今我国生产计价器的企业有上…

映像劫持技术(2):实例

在Image File Execution Options下创建cmd.exe项&#xff0c;将其“重定向”到我们自己编写的程序 1 #include<stdio.h>2 #include<windows.h>3 4 int main()5 {6 HKEY hKey;7 DWORD dwDispositionREG_CREATED_NEW_KEY; //新建一个子项8 if((::RegCre…

Hey,孙叫兽的2020 CSDN年度报告已出炉,请查收!

导读&#xff1a;最近经常看到朋友圈有人分享自己2020年在常用平台的年度报告&#xff1a; 有的人分享了这一年来听了多少首歌&#xff0c;最喜爱听的歌是什么&#xff1b; 有的人分享了这一年来消费了多少钱&#xff0c;最喜欢购买的产品类型是什么&#xff1b; 有的人分享了这…

mysql的表创建_MYSQL表创建

Customer属性&#xff1a;ID 字符型 最大10个字符 ——顾客编号NAME 字符型 最大16个字符 ——顾客姓名SEX 字符型 最大2个字符 ——性别MOBILE 字符型 最大11个字符 ——移动电话ADDRESS 字符型 最大50个字符 ——家庭住址约束&#xff1a; ID…

使用Swagger轻松记录您的Play Framework REST API

该帖子最初在http&#xff1a;// swag ger.io&#xff08;7/30/2015&#xff09;上发布 我一直在将Play Framework用作几个项目的基于Java的&#xff0c;快速的REST后端框架。 后来&#xff0c;我很高兴找到Swagger&#xff0c;并努力将其集成到几个项目中。 在我第一次挣扎时…

Java实现qq截图工具

导读:当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出。 本软件采用Java语言进行模拟qq截图功能,获取屏幕方式灵活,可以获取指定的屏幕,并且可以对获取到的截图进行存储,编辑(添加文字)等操作,对这些操作设置了…

mysql查看导入大小_mysql 数据导入、导出,及库大小查看

一、导出数据库用mysqldump命令(注意mysql的安装路径&#xff0c;即此命令的路径)&#xff1a;1、导出数据和表结构&#xff1a;mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql#/usr/local/mysql/bin/ mysqldump -uroot -p abc > abc.sql敲回车后会提示输入密码2、…

java实现儿时的超级玛丽游戏

导读:近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用。J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序。 “超级玛丽…

MongoDB实战指南(二):索引与查询优化

数据库保存记录的机制是建立在文件系统上的&#xff0c;索引也是以文件的形式存储在磁盘上&#xff0c;在数据库中用到最多的索引结构就是B树。尽管索引在数据库领域是不可缺少的&#xff0c;但是对一个表建立过多的索引会带来一些问题&#xff0c;索引的建立要花费系统时间&am…