1. 程式人生 > >C++ 練習:用指標實現棧

C++ 練習:用指標實現棧

使用C++的指標實現一個簡單版的棧

stack.h

#ifndef stack_hpp
#define stack_hpp

#include <stdio.h>

class Stack
{
public:
    Stack();
    ~Stack();
    
    bool Push(int value);
    int Pop();
    
private:
    unsigned int m_elem_size;
    unsigned int m_logic_length;
    unsigned int m_alloc_length;
    int* m_elems;
};
#endif /* stack_hpp */


stack.cpp

#include "stack.hpp"
#include <stdlib.h>
#include <assert.h>

Stack::Stack()
{
    m_elem_size = sizeof(int);
    m_logic_length = 0;
    m_alloc_length = 4;
    
    m_elems = (int*)malloc(m_alloc_length * sizeof(m_elem_size));
}

Stack::~Stack()
{
    free(m_elems);
}

bool Stack::Push(int value)
{
    //如果棧已滿,根據翻倍策略擴大記憶體
    if(m_logic_length == m_alloc_length)
    {
        m_alloc_length = m_alloc_length * 2;
        m_elems = (int*)realloc(m_elems, m_alloc_length * m_elem_size);
        assert(m_elems != NULL);
    }
    
    m_elems[m_logic_length] = value;
    m_logic_length ++;
    
    return true;
}

int Stack::Pop()
{
    assert(m_logic_length > 0);
    m_logic_length --;
    return m_elems[m_logic_length];
}


main.cpp

#include "stack.hpp"
#include <iostream>

int main(int argc, const char * argv[]) {
    
    Stack stack;
    stack.Push(1);
    stack.Push(2);
    stack.Push(3);
    stack.Push(4);
    stack.Push(5);
    
    int val = stack.Pop();
    std::cout << "val" << val << std::endl;
    
    return 0;
}

相關推薦

C++ 練習:指標實現

使用C++的指標實現一個簡單版的棧 stack.h #ifndef stack_hpp #define stack_hpp #include <stdio.h> class St

python列表練習-python實現和佇列

1.棧的工作原理:先進後出 入棧 出棧 棧頂元素 棧的長度 棧是否為空 stack = [] info = """ 棧操作 1.入棧 2.出棧 3.棧頂元素 4.棧的長度 5.棧是否為空 """ while True:

C/C++】指標實現二維陣列的傳遞、使用的4種示例,及各種變形。

請看例程。 #include <stdio.h> #include <stdlib.h> /* *func1:用int a[]傳遞二維陣列 *func2:用int a[][10]傳遞二維陣列 *func3:用int *a[10]傳遞二維 *

C#練習——方法實現兩個數的最大值

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T

C語言指標實現兩個陣列值互換

C語言用指標實現兩陣列的值互換 #include <stdio.h> #define N 10 void ReadData(int a[], int n); void PrintDa

C語言頂和指標實現的操作及實現數值轉換

棧是一種先進先出(FIFO)的資料結構。。廢話不多說,直接貼程式碼程式碼參考了小甲魚的資料機構課程#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <math.

LeetCode225 ·佇列實現(C++)

題目描述: 使用佇列實現棧的下列操作: push(x) -- 元素 x 入棧 pop() -- 移除棧頂元素 top() -- 獲取棧頂元素 empty() -- 返回棧是否為空 注意: 你只能使用佇列的基本操作-- 也就是 push to back, 

LeetCode255佇列實現c++

使用佇列實現棧的下列操作: push(x) -- 元素 x 入棧 pop() -- 移除棧頂元素 top() -- 獲取棧頂元素 empty() -- 返回棧是否為空 注意: 你只能使用佇列的基本操作-- 也就是 push to back,&n

C#LeetCode刷題之#225-佇列實現(Implement Stack using Queues)

問題 使用佇列實現棧的下列操作: push(x) -- 元素 x 入棧 pop() -- 移除棧頂元素 top() -- 獲取棧頂元素 empty() -- 返回棧是否為空 注意: 你只能使用佇列的基本操作-- 也就是 push to back, peek/pop f

C++分別指標和引用實現交換函式

       前幾天上課老師給出了一個課堂作業:請分別用指標和引用來實現兩個數的交換。雖然題目比較俗套,但是好久沒寫過C++程式了,依然很生疏,所以我決定總結一下自己的實現,程式粗糙,風格也混合著C,希望大家給提提建議。        老師出這個題目的目的無非是想讓我們聯絡

練習 5-3 指標實現函式strcat(s,t)將t指向的字串複製到s指向的字串的尾部。

1. 首先想到就是的將字串s迴圈到‘\0’的前一個字元,然後將字串t的地址給此時的s地址。  兩個問題: ①這種s=t,是不對的,只是拷貝了指標,並沒有進行字串的複製? ②當執行語句 while(*s++);時,此時 *s='\0', 所以後面應該s--;或者這樣寫 wh

C#調AForge實現攝像頭錄像

需要 version com targe supported .cn strong odin logs 1: 首先下載庫文件>> 也可以去官網尋找>> 下載本教程全代碼>> 輸出為MP4需要用到ffmpeg相關的文件,我打包的庫已經帶了,

Javascript實現結構

github主頁:https://github.com/A15162252289 什麼是棧? 棧是一種遵從後進先出(LIFO)原則的有序集合。新新增的或待刪除的元素都儲存在棧的同一端,稱之為棧頂,另一端則為棧底。在棧裡,新元素靠近棧頂,舊元素靠近棧底。 如何實現棧? 1.首

的建立------陣列實現

設計: 1、該陣列儲存物件型別在例項化是才確定-----泛型 2、陣列的索引0是棧底 3、建立一個正整數變數top ----是棧頂元素否後的索引號 4、建立一個棧的介面----定義如下函式: 程式碼實現: 介面類:StackADT  public

【LeetCode 簡單題】59-佇列實現

宣告: 今天是第59道題。給定一個整數陣列,判斷是否存在重複元素。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (手動比心ღ( ´・ᴗ・` )) 正文 題目:使用佇列實現棧的下列

佇列&//佇列實現

使用佇列實現棧的下列操作: push(x) -- 元素 x 入棧 pop() -- 移除棧頂元素 top() -- 獲取棧頂元素 empty() -- 返回棧是否為空 注意: 你只能使用佇列的基本操作-- 也就是 push to back,&n

Leetcode225 佇列實現

【方法一】 用一個輔助佇列,每當有元素push進“棧”,則需要把佇列的front位置給它空出來,方便後面直接pop()和top(),因此我們可以做兩次搬家操作,來獲得一個新的佇列: class MyStack { private: queue<int> q; qu

Python列表實現,佇列(二)

用列表實現佇列        佇列和棧實現的功能差不多,無非是入佇列,出佇列,佇列長度等等。其中,入佇列可以用列表的append()來實現,出佇列可以使用pop(0)來實現。由於這個實現方法比較簡單,因此它也是最低效的。append方法入佇列和棧實

Python列表實現,佇列(一)

用列表實現棧 棧方法 列表實現 S.push() L.append() S.pop() L.pop() S.top()

【LeetCode題解】225_佇列實現(Implement-Stack-using-Queues)

目錄 描述 解法一:雙佇列,入快出慢 思路 入棧(push) 出棧(pop) 檢視棧頂元素(peek) 是否為空(empty) Java 實現 Python 實現 解法二:雙佇列,入慢出