1. 程式人生 > >程式設計實現一個堆疊類Stack,要有push()壓棧方法,pop()出棧方法,clear()方法

程式設計實現一個堆疊類Stack,要有push()壓棧方法,pop()出棧方法,clear()方法

 

1*程式設計實現一個堆疊類Stack,要求需要含有push()壓棧方法,pop()出棧方法,clear()方法。

我們採用的是典型的封裝,這裡的堆疊採用先進後出的順序儲存資料,通過兩個傳統的堆疊操作來控制,這兩種方法分別是壓棧(pose)和出棧(pop).

如果在堆疊的上面加入一項,用壓棧

如果從堆疊中取出一項,用出棧

Stack類實現整數的堆疊,參考程式碼如下:

//這個類定義一個變數

// This class defines an integer stack that can hold 10 values.

class Stack

{

       int stck[] = new int[10];

       int tos;

       // Initialize top-of-stack


       Stack()

      { 
          tos = -1; 
      }

      // Push an item onto the stack 

       void push(int item)

      {

          if(tos==9)

              System.out.println("Stack is full.");

          else

              stck[++tos] = item;

       }

        // Pop an item from the stack

         int pop()

        {

            if(tos < 0) {

                System.out.println("Stack underflow.");

                return 0;

             }
            else 
                return stck[tos--];
    }
}

Stack類定義了兩個資料項,三個方法

整數堆疊由陣列stck儲存,該陣列的下標是由變數t控制,該變數總是包含堆疊頂層的下標。

Stack()建構函式將t初始化為-1,他指向一個空的堆疊。

push()方法將一個專案壓入堆疊,為了重新的取回壓入堆疊的專案,需要呼叫 pop()方法

既然存取資料通過Push()和pop(),陣列中儲存堆疊的事實實際上和使用的堆疊並不相關

例如,堆疊可以被儲存在一個更復雜的資料結構中,比如說一個連結串列,但是Push()和Pop()定義的 介面還是一樣的

程式碼類TestStack,驗證Stack類,TestStack類產生兩個整數堆疊,將一些值存入,然後將他們取出。

class TestStack {

public static void main(String args[]) {
Stack mystack1 = new Stack();
Stack mystack2 = new Stack();

// push some numbers onto the stack
for(int i=0; i<10; i++) mystack1.push(i);
for(int i=10; i<20; i++) mystack2.push(i);

// pop those numbers off the stack
System.out.println("Stack in mystack1:");
for(int i=0; i<10; i++)

System.out.println(mystack1.pop());

System.out.println("Stack in mystack2:");
for(int i=0; i<10; i++)
System.out.println(mystack2.pop());
}
}

產生的輸出如下:

Stack in mystack1:
9
8
7
6
5
4
3
2
1
0
Stack in mystack2:
19
18
17
16

15
14
13
12
11
10

那麼到這裡我們已經看到了,每個堆疊中的內容是分離的。

關於Stack 類的最後值得注意的一點。正如它現在執行的一樣,通過Stack 類外面的程式碼可以改變儲存堆疊的陣列stck 。這樣的Stack 是開放的,容易誤用或損壞。

如何補救這種情況呢?繼續學習,,,待續

相關推薦

程式設計實現一個堆疊Stack,push()方法,pop()方法,clear()方法

  1*程式設計實現一個堆疊類Stack,要求需要含有push()壓棧方法,pop()出棧方法,clear()方法。 我們採用的是典型的封裝,這裡的堆疊採用先進後出的順序儲存資料,通過兩個傳統的堆疊操作來控制,這兩種方法分別是壓棧(pose)和出棧(pop). 如果在堆疊的上

從零到模擬實現一個Set

前言 es6新增了Set資料結構,它允許你儲存任何型別的唯一值,無論是原始值還是物件引用。這篇文章希望通過模擬實現一個Set來增加對它的理解。 原文連結 用在前面 實際工作和學習過程中,你可能也經常用Set來對陣列做去重處理 let unique = (array

自己寫一個C#數據結構:用List<T>實現一個簡單的Stack

count 實現簡單 ole exceptio tac on() rem linq -- 在C#中利用List<T>實現一個簡單的Stack 需要實現的功能:壓棧、彈棧、查看棧頂元素、查看元素個數、查看Socket是否為空,判斷元素是否在Socket中、清空So

Algs4-1.2.11根據Date的API實現一個SmartDate

exc leg 閏年 整數 row -c nth -s lar 1.2.11根據Date的API實現一個SmartDate類型,在日期非法時拋出一個異常。答:參考資料:月份中的二月是28天還是29天,需看年份是否為閏年,閏年定義為:年份能被400整除的是閏年,或者年份能

java--建立一個Test,包含一個public許可權的int型成員變數與一個char型別的成員變數,觀察在main方法中的初始值。

//建立一個Test類 class Test1{ //包含有一個public許可權的int型成員變數與一個char型別的成員變數 public int a; public char c; } //主類 public class Test{ //主函式 publ

**c++基於tcp協議的socket程式設計實現一個簡單伺服器**

c++基於tcp協議的socket程式設計實現一個簡單伺服器 基於tcp的通訊,可以利益socket套接字實現。通訊,顧名思義需要伺服器和客戶端兩者進行資訊互動。 通過流程圖我們可以看到程式設計實現伺服器和客戶端的步驟大致相同,而伺服器則更為複雜一些。本文之給出了一個簡單的伺服器程式設計和

c++實現一個日期

#pragma once #include <iostream> using namespace std; class Date { private: int _year; int _month; int _day; int GetMonthDa

C++ 宣告並實現一個日期(運算子過載)

/****************************************************************************************** date.hpp: Copyright (c) Bit Software, Inc.(2

用C/C++實現一個日期,過載運算子=,==,+,-,++,--,>,>=,

#include<iostream> #include<windows.h> using namespace std; class Date { public: Date(int year, int month, int day) //建構函式

程式設計實現一個結構,用陣列來實現,具有入操作。

#include <stdio.h> #include <stdlib.h>typedef struct stack { int point;  signed char mem[1024];}STACK;STACK g_statck ={0}; //定

【OC複合題】之定義一個學生,需要姓名,年齡,考試成績三個成員屬性,建立5個物件,屬性可以任意值。(Objective-C)

題目: 定義一個學生類,需要有姓名,年齡,考試成績三個成員屬性,建立5個物件,屬性可以任意值。(Objective-C) 1)    不使用@property,手動編寫他們的訪問器方法(getter和setter),注意記憶體管理(手動管理記憶體) 2)    增加一個便利

一個員工Employee,員工編號,姓名,年齡。 用map儲存公司的員工,員工作為key,薪水作為value

要求:輸出所有員工的薪水 員工離職員工加薪按員工年齡從大到小輸出public class Employee implements Comparable<Employee>{ private String no; private String name; pr

程式設計實現一個css選擇器總結

題目:實現一個getCssSelector方法,可以根據給定的元素生成一個css選擇器,通過這個選擇器可以快速定位到這個元素(document.querySelector(A))。<!DOCTYPE html> <html> <head>

用C++實現一個日期

最近在複習C++的時候發現日期類是一個非常有用的類,在現實中是非常實用的(雖然我不知道為什麼這麼實用的類,庫裡沒有)以下是我自己實現的日期類的程式碼,因為大部分都是運算子的過載,所以理解起來應該並不難 #include <iostream> #include &

JAVA實驗二:利用二維陣列(double[])實現一個矩陣:Matrix的相乘、轉置、相加等

題目:利用二維陣列(double[])實現一個矩陣類:Matrix。 要求提供以下方法: (1)set(int row, int col, double value):將第row行第col列的元素賦值為value; (2)get(int row,int col):取第row行第c

第七週上機任務三--實現一個複數--通過模板的技術手段,設計Complex,使實部和虛部的型別為定義物件時用的實際型別

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生  * All rights reserved. * 檔名稱:實現一個複數類,通過模板類的技術手段,設計Complex,使實部和虛部的型別為定義物

C++實現一個有理數,包括大小比較,有理數的加減乘除。測試你的

//實現一個有理數類,包括大小比較,有理數的加減乘除。測試你的類。 #include <iostream> #include <stdlib.h> class Rational { public: Rational(int nu

Linux程式設計實現一個簡單的Shell

在linux中實現一個簡單的命令解釋程式,功能要求: 1)同時支援內部命令和外部命令,內部命令支援兩個(cd、exit) 2)支援後臺命令 首先解釋一下上面的兩個要求,實際上是三種情況: 1.如果是內部命令cd和exit,那麼在父程序裡直接分析執行 2.如果是外部命令,則

C++ 宣告並實現一個複數

<pre name="code" class="cpp">/****************************************************************************************** complex.hp