最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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);                 //建立一個(gè)空棧
	~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);            //斷言:動(dòng)態(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ò)充棧的存儲(chǔ)空間
	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集成Kafka 配置工具類的詳細(xì)代碼

    SpringBoot集成Kafka 配置工具類的詳細(xì)代碼

    spring-kafka 是基于 java版的 kafka client與spring的集成,提供了 KafkaTemplate,封裝了各種方法,方便操作,它封裝了apache的kafka-client,不需要再導(dǎo)入client依賴,這篇文章主要介紹了SpringBoot集成Kafka 配置工具類,需要的朋友可以參考下
    2022-09-09
  • SpringBoot使用Hibernate攔截器實(shí)現(xiàn)時(shí)間自動(dòng)注入的操作代碼

    SpringBoot使用Hibernate攔截器實(shí)現(xiàn)時(shí)間自動(dòng)注入的操作代碼

    這篇文章主要介紹了SpringBoot使用Hibernate攔截器實(shí)現(xiàn)時(shí)間自動(dòng)注入的操作代碼,主要包括hibernate攔截器的相關(guān)知識(shí),結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Java String方法獲取字符出現(xiàn)次數(shù)及字符最大相同部分示例

    Java String方法獲取字符出現(xiàn)次數(shù)及字符最大相同部分示例

    這篇文章主要介紹了Java String方法獲取字符出現(xiàn)次數(shù)及字符最大相同部分,涉及java字符串的遍歷、比較、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Java經(jīng)典設(shè)計(jì)模式之責(zé)任鏈模式原理與用法詳解

    Java經(jīng)典設(shè)計(jì)模式之責(zé)任鏈模式原理與用法詳解

    這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之責(zé)任鏈模式,簡單說明了責(zé)任鏈模式的概念、原理,并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)責(zé)任鏈模式的具體用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-08-08
  • java實(shí)現(xiàn)多人多牌數(shù)比較游戲

    java實(shí)現(xiàn)多人多牌數(shù)比較游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多人多牌數(shù)比較游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Spring Boot 整合單機(jī)websocket的步驟 附github源碼

    Spring Boot 整合單機(jī)websocket的步驟 附github源碼

    websocket 是一個(gè)通信協(xié)議,通過單個(gè) TCP 連接提供全雙工通信,這篇文章主要介紹了Spring Boot 整合單機(jī)websocket的步驟(附github源碼),需要的朋友可以參考下
    2021-10-10
  • java 關(guān)鍵字static詳細(xì)介紹及如何使用

    java 關(guān)鍵字static詳細(xì)介紹及如何使用

    這篇文章主要介紹了java 關(guān)鍵字static詳細(xì)介紹及如何使用的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • SpringBoot使用 druid 連接池來優(yōu)化分頁語句

    SpringBoot使用 druid 連接池來優(yōu)化分頁語句

    這篇文章主要介紹了SpringBoot使用 druid 連接池來優(yōu)化分頁語句,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java中避免空指針的幾種方法解析

    Java中避免空指針的幾種方法解析

    這篇文章主要介紹了Java中避免空指針的幾種方法解析,Java 中任何對(duì)象都有可能為空,當(dāng)我們調(diào)用空對(duì)象的方法時(shí)就會(huì)拋出 NullPointerException 空指針異常,這是一種非常常見的錯(cuò)誤類型,需要的朋友可以參考下
    2023-12-12
  • mybatis 自定義實(shí)現(xiàn)攔截器插件Interceptor示例

    mybatis 自定義實(shí)現(xiàn)攔截器插件Interceptor示例

    這篇文章主要介紹了mybatis 自定義實(shí)現(xiàn)攔截器插件Interceptor,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論

连云港市| 彭泽县| 安康市| 泸西县| 淄博市| 华阴市| 怀远县| 繁昌县| 秭归县| 合阳县| 彩票| 清镇市| 老河口市| 明光市| 罗田县| 华蓥市| 东源县| 绥芬河市| 门源| 巧家县| 万安县| 江阴市| 巩留县| 民勤县| 酉阳| 凤阳县| 称多县| 新龙县| 泸定县| 宁城县| 博野县| 融水| 林州市| 成安县| 新津县| 丹阳市| 永顺县| 靖州| 岑溪市| 阳泉市| 嵊州市|