欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java數(shù)據(jù)結(jié)構(gòu)之棧的詳解

 更新時(shí)間:2021年09月26日 11:51:15   作者:邱大山  
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之棧簡單操作的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助

棧是先進(jìn)后出的特殊線性表,只允許在表的末端進(jìn)行插入和刪除,后面將介紹兩種實(shí)現(xiàn)棧的方式,分別是基于數(shù)組的實(shí)現(xiàn)、基于鏈表的實(shí)現(xiàn)。

棧的抽象定義

class Mystack
{
public:
	Mystack() {}
	virtual void push(int &x) = 0;
	virtual bool pop(int &x) = 0;
	virtual bool Top(int &x) const = 0;
	virtual bool IsEmpty()const = 0;
	virtual bool IsFull()const = 0;
	virtual int getSize()const = 0;
};

順序棧-----------使用數(shù)組表示??臻g

定義:

#pragma once
#include "Mystack.h"
#include <iostream>
#include <assert.h>
using namespace std;
const int stackIncreament = 20;

class SeqStack : public Mystack
{
public:
	SeqStack(int sz = 50);                 //建立一個空棧
	~SeqStack() { delete[]elements; }      //析構(gòu)函數(shù)
	//如果棧滿,則溢出程序處理,否則插入x
	void push(int &x);                 
	//如果棧空,則返回FALSE,否則使用x傳遞棧頂?shù)闹?,top-1
	bool pop(int &x);
	//如果???,則返回FALSE,否則使用x傳遞棧頂?shù)闹?
	bool Top(int &x);
	//判斷棧是否為空
	bool IsEmpty()const {
		return (top == -1) ? true : false;
	}
	//判斷棧是都為滿
	bool IsFull()const {
		return (top == maxSize - 1) ? true : false;
	}
	//獲取棧當(dāng)前的size
	int getSize()const {
		return top + 1;
	}
	//將棧置空
	void MakeEmpty() {
		top = -1;
	}
	//重載 操作 <<
	friend ostream& operator<<(ostream& os, SeqStack& s);

private:
	int *elements;				//棧數(shù)組指針
	int top;					//棧頂指針
	int maxSize;				//棧的最大容量
	void overflowProcess();		//溢出處理程序
};

實(shí)現(xiàn):

#include "SeqStack.h"

SeqStack::SeqStack(int sz):top(-1),maxSize(sz)
{
	elements = new int[maxSize];		//創(chuàng)建棧的數(shù)組空間
	assert(elements == NULL);            //斷言:動態(tài)分配是否成功
}
void SeqStack::push(int & x)
{
	//首先判斷棧是否已滿,滿則轉(zhuǎn)入溢出處理
	if(IsFull() == true){
		overflowProcess();
	}
	elements[++top] = x;    //將top+1,再插入值x
}
bool SeqStack::pop(int & x)
{
	//先判斷是否為空,為空則返回FALSE
	if (IsEmpty() == true) {
		return false;
	}
	x = elements[top--];     //使用x返回top所指,再講top-1
	return true;
}
bool SeqStack::Top(int & x)
{
	//空棧則為FALSE
	if (IsEmpty() == true) {
		return false;
	}
	//棧不為空,則返回棧頂元素的值
	x = elements[top];
	return true;
}
ostream& operator<<(ostream& os, SeqStack& s) {
	//輸出棧中元素
	os << "top = " << s.top << endl;
	for (int i = 0; i <= s.top; ++i) {
		os << i << ": " << s.elements[i] << endl;
	}
	return os;
}

void SeqStack::overflowProcess()
{
	//棧溢出時(shí),擴(kuò)充棧的存儲空間
	int *Newelement = new int[maxSize + stackIncreament];
	if (Newelement == NULL) {
		cout << "分配內(nèi)存失敗";
		exit(1);
	}
	for (int i = 0; i <= top; ++i) {
		Newelement[i] = elements[i];
	}
	delete[] elements;
	elements = Newelement;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • SpringBoot+Mybatis-plus+shardingsphere實(shí)現(xiàn)分庫分表的方案

    SpringBoot+Mybatis-plus+shardingsphere實(shí)現(xiàn)分庫分表的方案

    實(shí)現(xiàn)億級數(shù)據(jù)量分庫分表的項(xiàng)目是一個挑戰(zhàn)性很高的任務(wù),下面是一個基于Spring Boot的簡單實(shí)現(xiàn)方案,感興趣的朋友一起看看吧
    2024-03-03
  • Java基礎(chǔ)篇之HashMap指定初始值

    Java基礎(chǔ)篇之HashMap指定初始值

    這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)篇之HashMap指定初始值的相關(guān)資料,HashMap是Java中常用的數(shù)據(jù)結(jié)構(gòu),它提供了高效的鍵值對存儲和查詢功能,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 基于Spring AMQP實(shí)現(xiàn)消息隊(duì)列的示例代碼

    基于Spring AMQP實(shí)現(xiàn)消息隊(duì)列的示例代碼

    Spring AMQP作為Spring框架的一部分,是一套用于支持高級消息隊(duì)列協(xié)議(AMQP)的工具,AMQP是一種強(qiáng)大的消息協(xié)議,旨在支持可靠的消息傳遞,本文給大家介紹了如何基于Spring AMQP實(shí)現(xiàn)消息隊(duì)列,需要的朋友可以參考下
    2024-03-03
  • Java并發(fā)之Phaser的全面解析詳解

    Java并發(fā)之Phaser的全面解析詳解

    Phaser是Java中一個靈活的同步工具,其優(yōu)點(diǎn)在于支持多階段的任務(wù)拆分與同步,并且能夠動態(tài)地注冊與注銷參與者,下面我們就來深入了解一下Phaser的應(yīng)用吧
    2024-02-02
  • java實(shí)現(xiàn)的導(dǎo)出Excel工具類實(shí)例

    java實(shí)現(xiàn)的導(dǎo)出Excel工具類實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)的導(dǎo)出Excel工具類,結(jié)合具體實(shí)例形式分析了java導(dǎo)出Excel導(dǎo)出并生成Excel表格相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-10-10
  • JAVA多種方法實(shí)現(xiàn)字符串反轉(zhuǎn)

    JAVA多種方法實(shí)現(xiàn)字符串反轉(zhuǎn)

    大家好,本篇文章主要講的是JAVA多種方法實(shí)現(xiàn)字符串反轉(zhuǎn),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Service層異常拋到Controller層處理還是直接處理問題分析

    Service層異常拋到Controller層處理還是直接處理問題分析

    這篇文章主要為大家介紹了Service層異常拋到Controller層處理還是直接處理的問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • MyBatis自定義typeHandler的完整實(shí)例

    MyBatis自定義typeHandler的完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于MyBatis自定義typeHandler的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 淺談FileItem類的常用方法

    淺談FileItem類的常用方法

    下面小編就為大家?guī)硪黄獪\談FileItem類的常用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Set接口深入剖析之HashSet、LinkedHashSet和TreeSet

    Set接口深入剖析之HashSet、LinkedHashSet和TreeSet

    這篇文章主要介紹了Set接口深入剖析之HashSet、LinkedHashSet和TreeSet,LinkedHashSet是HashSet的子類,實(shí)現(xiàn)了Set接口,LinkedHashSet底層是一個LinkedHashMap,底層維護(hù)了一個數(shù)組+雙向鏈表,需要的朋友可以參考下
    2023-09-09

最新評論