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

C++實(shí)現(xiàn)棧的操作(push和pop)

 更新時(shí)間:2022年07月25日 15:29:41   作者:酸菜魚的魚  
這篇文章主要介紹了C++實(shí)現(xiàn)棧的操作(push和pop),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

棧的操作(push和pop)

棧的組織形式

如上圖所示:棧也是有多個(gè)數(shù)據(jù)節(jié)點(diǎn)組成的,每個(gè)節(jié)點(diǎn)包含有數(shù)據(jù)域和指向下一個(gè)節(jié)點(diǎn)的指針域。并且每次的push、pop和判空都是操作的棧頂指針top。

棧中每個(gè)數(shù)據(jù)節(jié)點(diǎn)的定義

class data_node{
public:
	data_node() :data(0), next(NULL){}//default constructer function
	data_node(int value) :data(value), next(NULL){}//include arg constructer function
	int data;
	data_node *next;//pointer that point to next node
};

棧的類的定義

class my_stack{
public:
	my_stack() :top(NULL){}
	void push(data_node new_data);
	void pop(data_node *pop_node);
	bool empty();
	data_node *top;
};

棧的push操作

void my_stack::push(data_node new_data)
{
	data_node *pnode = NULL;
	pnode = new data_node(new_data.data);
	pnode->next = top;
	top = pnode;
}
 
void my_stack::pop(data_node *pop_node)
{
	if (empty())
	{
		printf("this stack is empty\n");
		return;
	}
	pop_node->data = top->data;
	data_node *pnode = top;
	top = top->next;
	delete pnode;
}
 
bool my_stack::empty()
{
	return (top == NULL);
}

完整的代碼如下:

#include "stdafx.h"
#include <iostream>
#pragma warning(disable:4996)
#include <string>
 
using namespace std;
 
class data_node{
public:
	data_node() :data(0), next(NULL){}//default constructer function
	data_node(int value) :data(value), next(NULL){}//include arg constructer function
	int data;
	data_node *next;//pointer that point to next node
};
 
class my_stack{
public:
	my_stack() :top(NULL){}
	void push(data_node new_data);
	void pop(data_node *pop_node);
	bool empty();
	data_node *top;
};
 
void my_stack::push(data_node new_data)
{
	data_node *pnode = NULL;
	pnode = new data_node(new_data.data);
	pnode->next = top;
	top = pnode;
}
 
void my_stack::pop(data_node *pop_node)
{
	if (empty())
	{
		printf("this stack is empty\n");
		return;
	}
	pop_node->data = top->data;
	data_node *pnode = top;
	top = top->next;
	delete pnode;
}
 
bool my_stack::empty()
{
	return (top == NULL);
}
 
int main()
{
	data_node pop_node(0);
	my_stack stack;
	stack.push(3);
	stack.push(2);
	stack.push(6);//3,2,6
	stack.pop(&pop_node);
	//printf("is empty? %d\n", stack.empty());
	printf("%2d ", pop_node.data);
	stack.pop(&pop_node);
	//printf("is empty? %d\n", stack.empty());
	printf("%2d ", pop_node.data);
	stack.pop(&pop_node);
	printf("%2d\n ", pop_node.data);
	printf("is empty? %d\n", stack.empty());
	return 0;
}

棧應(yīng)用之進(jìn)制轉(zhuǎn)換

MyStack.h

#ifndef MYSTACK_H
#define MYSTACK_H
#include <iostream>
using namespace std;
template <typename T>
class MyStack
{
public:
? ? MyStack(int size); ? ? ? ? ?//分配內(nèi)存初始化空間,設(shè)定棧容量,棧頂
? ? ~MyStack(); ? ? ? ? ? ? ? ? ? ?//回收??臻g內(nèi)存
? ? bool stackEmpty(); ? ? ? ? ?//判定棧是否為空,為空返回true,非空返回false
? ? bool stackFull(); ? ? ? ? ? //判定棧是否為滿,為滿返回true,不滿返回false
? ? void clearStack(); ? ? ? ? ?//清空棧
? ? int stackLength(); ? ? ? ? ?//已有元素的個(gè)數(shù)
? ? bool push(T elem); ? ? ? ? ?//元素入棧,棧頂上升
? ? bool pop(T &elem); ? ? ? ? ?//元素出棧,棧頂下降
? ? void stackTraverse(bool isFromButtom); ? ? ?//遍歷棧中所有元素
private:
? ? T *m_pBuffer; ? ? ? ? ? ? ? //??臻g指針
? ? int m_iSize; ? ? ? ? ? ? ? ?//棧容量
? ? int m_iTop; ? ? ? ? ? ? ? ? //棧頂,棧中元素個(gè)數(shù)
};
template <typename T>
MyStack<T>::MyStack(int size)
{
? ? m_iSize = size;
? ? m_pBuffer = new T[size];
? ? m_iTop = 0;
}
template <typename T>
MyStack<T>::~MyStack()
{
? ? delete[]m_pBuffer;
? ? m_pBuffer = NULL;
}
template <typename T>
bool MyStack<T>::stackEmpty()
{
? ? if (0 == m_iTop)
? ? {
? ? ? ? return true;
? ? }
? ? else
? ? {
? ? ? ? return false;
? ? }
}
template <typename T>
bool MyStack<T>::stackFull()
{
? ? if (m_iTop == m_iSize)
? ? {
? ? ? ? return true;
? ? }
? ? else
? ? {
? ? ? ? return false;
? ? }
}
template <typename T>
void MyStack<T>::clearStack()
{
? ? m_iTop = 0;
}
template <typename T>
int MyStack<T>::stackLength()
{
? ? return m_iTop;
}
template <typename T>
bool MyStack<T>::push(T elem)
{
? ? if(!stackFull())
? ? {
? ? ? ? m_pBuffer[m_iTop] = elem;
? ? ? ? m_iTop++;
? ? ? ? return true;
? ? }
? ? else
? ? {
? ? ? ? return false;
? ? }
}
template <typename T>
bool MyStack<T>::pop(T &elem)
{
? ? if (!stackEmpty())
? ? { ??
? ? ? ? m_iTop--;
? ? ? ? elem = m_pBuffer[m_iTop];
? ? ? ? return true;
? ? }
? ? else
? ? {
? ? ? ? return false;
? ? }
}
template <typename T>
void MyStack<T>::stackTraverse(bool isFromButtom)
{
? ? if (isFromButtom)
? ? {
? ? ? ? for (int i = 0; i < m_iTop; i++)
? ? ? ? {
? ? ? ? ? ? cout << m_pBuffer[i];
? ? ? ? }
? ? }
? ? else?
? ? ? ? for (int i = m_iTop -1; i >= 0; i--)
? ? ? ? {
? ? ? ? ? ? cout << m_pBuffer[i];
? ? ? ? }
? ? cout << endl;
}
#endif MYSTACK_H

main.cpp

#include "MyStack.h"
#define BINARY ? ? ?2
#define OCTONSRY ? ?8
#define HEXADECTMAL 16
int main()
{
? ? char num[] = "0123456789ABCDEF";
? ? MyStack<char> *pStack = new MyStack<char>(50);
? ? int N = 0;
? ? cin >> N;
? ? int mod = 0;
? ? while (N != 0)
? ? {
? ? ? ? mod = N % HEXADECTMAL;
? ? ? ? pStack->push(num[mod]);
? ? ? ? N = N / HEXADECTMAL;
? ? }
? ? pStack->stackTraverse(false);
? ? delete pStack;
? ? pStack = NULL;
? ? system("pause");
? ? return 0;
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 總結(jié)IOS中nil、Nil、NULL和NSNull區(qū)別

    總結(jié)IOS中nil、Nil、NULL和NSNull區(qū)別

    相信有不少朋友想知道,在 Objective-C 中 nil 和 Nil 以及 NULL 的區(qū)別。最重要的是,在面試中還有不少朋友常會(huì)被問到。現(xiàn)在小編在這里統(tǒng)一詳細(xì)說明。
    2016-08-08
  • C語言一篇精通鏈表的各種操作

    C語言一篇精通鏈表的各種操作

    鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu)。它是動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu),是根據(jù)需要開辟內(nèi)存單元,鏈表這種數(shù)據(jù)結(jié)構(gòu),必須利用指針變量才能實(shí)現(xiàn),即一個(gè)結(jié)點(diǎn)中應(yīng)包含一個(gè)指針變量,用它存放下一結(jié)點(diǎn)的地址
    2022-04-04
  • Qt實(shí)現(xiàn)簡易秒表設(shè)計(jì)

    Qt實(shí)現(xiàn)簡易秒表設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)簡易秒表設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言操作符超詳細(xì)講解上篇

    C語言操作符超詳細(xì)講解上篇

    C?語言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。因?yàn)槠^大將分兩篇講解,讓我們通讀本篇來詳細(xì)了解吧
    2022-04-04
  • C語言實(shí)現(xiàn)天氣信息管理系統(tǒng)

    C語言實(shí)現(xiàn)天氣信息管理系統(tǒng)

    這篇文章主要介紹了C語言實(shí)現(xiàn)天氣信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C語言編程銀行ATM存取款系統(tǒng)實(shí)現(xiàn)源碼

    C語言編程銀行ATM存取款系統(tǒng)實(shí)現(xiàn)源碼

    這篇文章主要為大家介紹了C語言編程銀行ATM存取款系統(tǒng)實(shí)現(xiàn)的源碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • C++ set的使用方法詳解

    C++ set的使用方法詳解

    這篇文章主要介紹了C++ set的使用方法詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握set的使用方法,需要的朋友可以參考下
    2017-10-10
  • C++類與對(duì)象及構(gòu)造函數(shù)析構(gòu)函數(shù)基礎(chǔ)詳解

    C++類與對(duì)象及構(gòu)造函數(shù)析構(gòu)函數(shù)基礎(chǔ)詳解

    這篇文章主要為大家介紹了C++類與對(duì)象及構(gòu)造函數(shù)析構(gòu)函數(shù)基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 采用C++實(shí)現(xiàn)區(qū)間圖著色問題(貪心算法)實(shí)例詳解

    采用C++實(shí)現(xiàn)區(qū)間圖著色問題(貪心算法)實(shí)例詳解

    這篇文章主要介紹了采用C++實(shí)現(xiàn)區(qū)間圖著色問題(貪心算法),很經(jīng)典的算法問題,需要的朋友可以參考下
    2014-07-07
  • 老生常談C語言鏈表小結(jié)

    老生常談C語言鏈表小結(jié)

    鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的 ,這篇文章主要介紹了C語言鏈表,需要的朋友可以參考下
    2021-11-11

最新評(píng)論