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

C++詳解實(shí)現(xiàn)Stack方法

 更新時(shí)間:2022年06月25日 09:39:34   作者:肩上風(fēng)騁  
C++ Stack(堆棧)是一個(gè)容器類的改編,為程序員提供了堆棧的全部功能,也就是說實(shí)現(xiàn)了一個(gè)先進(jìn)后出(FILO)的數(shù)據(jù)結(jié)構(gòu)

棧簡(jiǎn)介

棧本著先進(jìn)后出的原則,來存取數(shù)據(jù)。作為數(shù)據(jù)結(jié)構(gòu)中的一種,這里不多介紹相關(guān)棧。僅以此文記錄C++中棧的實(shí)現(xiàn),可幫助提升編程能力與對(duì)棧的理解。

stack模擬

stack是一種容器適配器,專門在具有后進(jìn)先出的上下文環(huán)境中,其刪除只能是在一端進(jìn)行操作。

stack是作為容器適配器被實(shí)現(xiàn)的,容器適配器即是對(duì)特定類封裝作為其底層的容器,并提供一組特定的成員函數(shù)來訪問其元素,將特定類作為其底層的,元素特定容器的尾部(即棧頂)被壓入和彈出 。

stack的底層原理可以是任何標(biāo)椎的容器類模板或者一些特定的容器類,這些容器類應(yīng)該支持以下操作:

  • empty:判空操作。
  • back:尾部元素獲取。
  • push_back:尾部插入元素操作
  • pop_back:尾部刪除元素操作。

模擬實(shí)現(xiàn)

template<class T, class Con = deque<T>>
    class stack
    {
    public:
        stack();
        void push(const T& x)
        {
            _c.push_back(x);
        }
        void pop()
        {
            _c.pop_back();
        }
        T& top()
        {
            return _c.back()
        }
        const T& top()const
        {
            return _c.back();
        }
        size_t size()const
        {
            return _c.size();
        }
        bool empty()const
        {
            return _c.empty();
        }
    private:
        Con _c;
    };
?

示例代碼

直接上代碼。

SeqStack.h

#pragma once
#define MAX_SIZE 1024
#define TRUE 1
#define FALSE 0
typedef struct SEQSTACK {
	void *data[MAX_SIZE];
	int size;
}SeqStack;
class MySeqStack
{
public:
	MySeqStack();
	~MySeqStack();
	void init();
	void pushStack(void *data);
	void * getTopStack();
	void popStack();
	int isEmpty();
	int getSizeStack();
	void clearStack();
private:
	SeqStack *m_stack;
};

SeqStack.cpp

#include "SeqStack.h"
#include <iostream>
using namespace std;
MySeqStack::MySeqStack()
{
}
MySeqStack::~MySeqStack()
{
	if (m_stack != nullptr) 
	{
		delete m_stack;
		m_stack = nullptr;
	}
}
void MySeqStack::init()
{
	m_stack = new SeqStack;
	if (m_stack == nullptr) 
	{
		cout << "分配內(nèi)存為空" << endl;
	}
	else 
	{
		m_stack->size = 0;
		for (int i = 0; i < m_stack->size; ++i) 
		{
			m_stack->data[i] = nullptr;
		}
	}
}
void MySeqStack::pushStack(void * data)
{
	if (m_stack->size == MAX_SIZE)
	{
		return;
	}
	if (m_stack == nullptr)
	{
		return;
	}
	if (data == nullptr) 
	{
		return;
	}
	m_stack->data[m_stack->size] = data;
	m_stack->size++;
}
void * MySeqStack::getTopStack()
{
	if (m_stack == nullptr)
	{
		return nullptr;
	}
	if (m_stack->size == 0)
	{
		return nullptr;
	}
	return m_stack->data[m_stack->size-1];
}
void MySeqStack::popStack()
{
	if (m_stack == nullptr)
	{
		return ;
	}
	if (m_stack->size == 0)
	{
		return ;
	}
	m_stack->data[m_stack->size - 1] = nullptr;
	m_stack->size--;
}
int MySeqStack::isEmpty()
{
	if (m_stack == nullptr)
	{
		return -1;
	}
	if (m_stack->size == 0) 
	{
		return TRUE;
	}
	return FALSE;
}
int MySeqStack::getSizeStack()
{
	return m_stack->size;
}
void MySeqStack::clearStack()
{
	if (m_stack == nullptr)
	{
		return ;
	}
	for (int i = 0; i < m_stack->size; ++i)
	{
		m_stack->data[i] = nullptr;
	}
	m_stack->size = 0;
}

main.cpp

#include <iostream>
#include "SeqStack.h"
using namespace std;
typedef struct PERSON {
	char name[64];
	int age;
	int score;
}Person;
void test() 
{
	MySeqStack *stack = new MySeqStack;
	stack->init();
	Person p1 = { "hudf",3,56 };
	Person p2 = { "akso",4,67 };
	Person p3 = {"及家屬的",6,88};
	Person p4 = { "口袋",7,98 };
	Person p5 = { "husdh",8,34 };
	stack->pushStack(&p1);
	stack->pushStack(&p2);
	stack->pushStack(&p3);
	stack->pushStack(&p4);
	stack->pushStack(&p5);
	while (stack->getSizeStack() > 0)
	{
		Person *data = (Person*)stack->getTopStack();
		cout << "name = " << data->name << " age= " << data->age << " score=" << data->score << endl;
		stack->popStack();
	}
	delete stack;
	stack = nullptr;
}
int main()
{
	test();
	return 0;
}
// 運(yùn)行程序: Ctrl + F5 或調(diào)試 >“開始執(zhí)行(不調(diào)試)”菜單
// 調(diào)試程序: F5 或調(diào)試 >“開始調(diào)試”菜單
// 入門使用技巧: 
//   1. 使用解決方案資源管理器窗口添加/管理文件
//   2. 使用團(tuán)隊(duì)資源管理器窗口連接到源代碼管理
//   3. 使用輸出窗口查看生成輸出和其他消息
//   4. 使用錯(cuò)誤列表窗口查看錯(cuò)誤
//   5. 轉(zhuǎn)到“項(xiàng)目”>“添加新項(xiàng)”以創(chuàng)建新的代碼文件,或轉(zhuǎn)到“項(xiàng)目”>“添加現(xiàn)有項(xiàng)”以將現(xiàn)有代碼文件添加到項(xiàng)目
//   6. 將來,若要再次打開此項(xiàng)目,請(qǐng)轉(zhuǎn)到“文件”>“打開”>“項(xiàng)目”并選擇 .sln 文件

開發(fā)環(huán)境

vs2017控制臺(tái)輸出程序。

運(yùn)行結(jié)果

到此這篇關(guān)于C++詳解實(shí)現(xiàn)Stack方法的文章就介紹到這了,更多相關(guān)C++ Stack內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VSCode中C/C++編碼亂碼問題的兩種解決方法

    VSCode中C/C++編碼亂碼問題的兩種解決方法

    在中國(guó)地區(qū),Windows 系統(tǒng)中的 cmd 和 PowerShell 默認(rèn)編碼是 GBK,但 VSCode 默認(rèn)使用 UTF-8 編碼,這種編碼不一致會(huì)導(dǎo)致在 VSCode 終端中運(yùn)行 C/C++ 程序時(shí)出現(xiàn)亂碼,以下介紹兩種方法來解決這一問題,需要的朋友可以參考下
    2025-03-03
  • 淺析iterator與指針的區(qū)別

    淺析iterator與指針的區(qū)別

    指針和iterator都支持減法運(yùn)算,指針-指針得到的是兩個(gè)指針之間的距離,迭代器-迭代器得到的是兩個(gè)迭代器之間的距離
    2013-10-10
  • C++11 智能指針之shared_ptr代碼詳解

    C++11 智能指針之shared_ptr代碼詳解

    這篇文章主要介紹了 C++11 智能指針之shared_ptr的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 用C語言的泛型實(shí)現(xiàn)交換兩個(gè)變量值

    用C語言的泛型實(shí)現(xiàn)交換兩個(gè)變量值

    在日常編程里面經(jīng)常會(huì)遇到交換兩個(gè)變量的內(nèi)容的任務(wù),對(duì)于泛型類型而言有兩種泛型策略來實(shí)現(xiàn),下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)。
    2016-08-08
  • 關(guān)于C/C++中typedef的定義與用法總結(jié)

    關(guān)于C/C++中typedef的定義與用法總結(jié)

    在C還是C++代碼中,typedef都使用的很多,在C代碼中尤其是多,typedef與#define有些相似,其實(shí)是不同的,特別是在一些復(fù)雜的用法上,需要的朋友可以參考下
    2012-12-12
  • VS2022調(diào)試通過海康攝像頭煙火識(shí)別SDK的實(shí)現(xiàn)

    VS2022調(diào)試通過??禂z像頭煙火識(shí)別SDK的實(shí)現(xiàn)

    本文主要介紹了VS2022調(diào)試通過??禂z像頭煙火識(shí)別SDK的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++ 函數(shù) strftime 和時(shí)間格式示例詳解

    C++ 函數(shù) strftime 和時(shí)間格式示例詳解

    strftime 是 C/C++ 標(biāo)準(zhǔn)庫(kù)中用于格式化日期和時(shí)間的函數(shù),定義在 <ctime> 頭文件中,它將 tm 結(jié)構(gòu)體中的時(shí)間信息轉(zhuǎn)換為指定格式的字符串,是處理時(shí)間輸出的核心工具,這篇文章主要介紹了C++ 函數(shù) strftime和時(shí)間格式,需要的朋友可以參考下
    2025-06-06
  • VsCode安裝和配置c/c++環(huán)境小白教程(圖文)

    VsCode安裝和配置c/c++環(huán)境小白教程(圖文)

    本文主要介紹了VsCode安裝和配置c/c++環(huán)境小白教程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言新手入門速通手冊(cè)

    C語言新手入門速通手冊(cè)

    C 語言是一種通用的、面向過程式的計(jì)算機(jī)程序設(shè)計(jì)語言。1972 年,為了移植與開發(fā) UNIX 操作系統(tǒng),丹尼斯·里奇在貝爾電話實(shí)驗(yàn)室設(shè)計(jì)開發(fā)了 C 語言。C 語言是一種廣泛使用的計(jì)算機(jī)語言,它與 Java 編程語言一樣普及,二者在現(xiàn)代軟件程序員之間都得到廣泛使用
    2022-04-04
  • 詳解C語言中scanf函數(shù)使用的一些注意點(diǎn)

    詳解C語言中scanf函數(shù)使用的一些注意點(diǎn)

    這篇文章主要介紹了C語言中scanf函數(shù)使用的一些注意點(diǎn),scanf函數(shù)的使用是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-04-04

最新評(píng)論

白山市| 二连浩特市| 旺苍县| 鹤壁市| 阿鲁科尔沁旗| 青神县| 正宁县| 慈溪市| 南雄市| 房山区| 铜鼓县| 东乌珠穆沁旗| 沙湾县| 尼勒克县| 岳西县| 山阴县| 大连市| 米泉市| 汉寿县| 沛县| 汉沽区| 凌云县| 普洱| 博湖县| 郁南县| 余江县| 藁城市| 盐边县| 齐齐哈尔市| 长白| 义马市| 武邑县| 博乐市| 新沂市| 九龙坡区| 珲春市| 中宁县| 商河县| 乡城县| 久治县| 公安县|