1. 程式人生 > >棧的順序儲存結構——順序棧 圖解和程式碼實現

棧的順序儲存結構——順序棧 圖解和程式碼實現

棧的順序儲存結構稱為順序棧

先看下順序棧的圖片:

SeqStack.h

//SeqStack.h
#ifndef SEQSTACK_H
#define SEQSTACK_H

const int StackSize=10;  //10只是示例性的資料,可以根據實際問題具體定義

template <class T>       //定義模板類SeqStack
class SeqStack
{
public:
    SeqStack( ) ;            //建構函式,棧的初始化
	~SeqStack( );            //解構函式
    void Push(T x);          //將元素x入棧
    T Pop( );                //將棧頂元素彈出
    T GetTop( );	         //取棧頂元素(並不刪除)
	bool Empty( );           //判斷棧是否為空
private:
    T data[StackSize];      //存放棧元素的陣列
    int top;                //棧頂指標,指示棧頂元素在陣列中的下標
};

#endif

SeqStack.cpp

//SeqStack.cpp
#include "SeqStack.h"

/*
 * 前置條件:棧不存在
 * 輸    入:無
 * 功    能:棧的初始化
 * 輸    出:無
 * 後置條件:構造一個空棧
 */

template <class T>
SeqStack<T>::SeqStack( )
{
	top=-1;
}

/*
 * 前置條件:棧已存在
 * 輸    入:無
 * 功    能:銷燬棧
 * 輸    出:無
 * 後置條件:釋放棧所佔用的儲存空間
 */

template <class T>
SeqStack<T>::~SeqStack( )
{

} 

/*
 * 前置條件:棧已存在
 * 輸    入:元素值x
 * 功    能:在棧頂插入一個元素x
 * 輸    出:如果插入不成功,丟擲異常
 * 後置條件:如果插入成功,棧頂增加了一個元素
 */

template <class T> 
void SeqStack<T>::Push(T x)
{
    if (top== StackSize-1) throw "上溢";
    top++;
    data[top]=x;
}

/*
 * 前置條件:棧已存在
 * 輸    入:無
 * 功    能:刪除棧頂元素
 * 輸    出:如果刪除成功,返回被刪元素值,否則,丟擲異常
 * 後置條件:如果刪除成功,棧頂減少了一個元素
 */     

template <class T>
T SeqStack<T>::Pop( )
{ 
    T x;
    if (top==-1) throw "下溢";
    x=data[top--];
    return x;
}

/*
 * 前置條件:棧已存在
 * 輸    入:無
 * 功    能:讀取當前的棧頂元素
 * 輸    出:若棧不空,返回當前的棧頂元素值
 * 後置條件:棧不變
 */

template <class T> 
T SeqStack<T>::GetTop( )
{
	if (top!=-1)  
    return data[top];
}

/*
 * 前置條件:棧已存在
 * 輸    入:無
 * 功    能:判斷棧是否為空
 * 輸    出:如果棧為空,返回1,否則,返回0
 * 後置條件:棧不變
 */

template <class T> 
bool SeqStack<T>::Empty( )
{
	if(top==-1) return 1;
	else return 0;
} 



相關推薦

順序儲存結構——順序 圖解程式碼實現

棧的順序儲存結構稱為順序棧 先看下順序棧的圖片: SeqStack.h //SeqStack.h #ifndef SEQSTACK_H #define SEQSTACK_H const int StackSize=10; //10只是示例性的資料,可以根據實際問題

順序儲存結構 順序(Sequential Stack) C++

seqStack.h #ifndef __SEQSTACK_H__ #define __SEQSTACK_H__ const int size = 10; template <class T> class seqStack { public: seqStack(vo

1.線性表的順序儲存結構————順序表(包含C語言和C++版本的完整程式)

1.順序表的定義    將表中元素一個接一個的存入一組連續的儲存單元中,這種儲存結構是順序結構,採用順序儲存結構的線性表簡稱為“ 順序表”。    順序表的儲存特點是:只要確定了起始位置,表中任一元素的地址都通過下列公式得到: Loc(ai)=L

順序儲存結構鏈式儲存結構

1.棧的定義: 在表尾進行插入和刪除操作的線性表(仍然滿足線性表的操作,只是在push和pop有些區別) 棧頂(top)允許插入和刪除,另一端稱棧底(bottom),不含任何資料元素的棧叫空棧。 棧:後進先出(last in first out)的線性表,簡稱LIFO結構。 棧的插入

資料結構佇列(五)順序儲存結構鏈式儲存結構實現

一、 實驗目的1. 熟悉棧的特點(先進後出)及棧的抽象類定義;2. 掌握棧的順序儲存結構和鏈式儲存結構的實現;3. 熟悉佇列的特點(先進先出)及佇列的抽象類定義;4. 掌握棧的順序儲存結構和鏈式儲存結構的實現;二、實驗要求1. 複習課本中有關棧和佇列的知識;2. 用C++語言

的定義,兩種基本的儲存結構順序儲存結構鏈式儲存結構

棧的定義 棧(stack )又稱堆疊,它是運算受限的線性表。 其限制是僅允許在表的一端進行插入和刪除操作,不允許在其他任何位置進行插入、查詢、刪除等操作。 表中進行插入、刪除操作的一端稱為 棧頂(top) ,棧頂儲存的元素稱為 棧頂元素。 相對的,表的另一端稱為棧底(bottom) 

【資料結構作業三】利用(以順序儲存結構實現二、十十六進位制轉換

#include <iostream> #define MAXSIZE 100 using namespace std; typedef int SElemType; typedef struct { SElemType *base; SElemType

大白話講資料結構演算法__11 順序儲存結構定義與插入,刪除等操作

棧的定義 棧是一種重要的線性結構,可以這樣講,棧是線性表的一種具體形式。 例如,我們瀏覽網頁,點選後退,我們不會直接返回第一個介面,而是上一個頁面,這種後進先出的資料結構就是棧,棧應用是非常廣泛的。 例如我們Word,Photoshop等的“撤銷”功能也是如此。再例如我們C

資料結構學習筆記9--佇列的順序儲存結構

棧和佇列的相同點和不同點: 相同點:棧和佇列是兩種重要的資料結構,也是兩種特殊的線性表結構。從資料的邏輯角度看,棧和佇列是線性表;從操作的角度來看,棧和佇列的基本操作是線性表基本操作的子集,是操作受限

3.1 順序儲存結構

<?php header("content-type:text/html;charset=utf-8"); /** * 棧的順序儲存結構的基本操作 * *包括 * 1.順序棧的初始化 __contruct() * 2.銷燬棧 destroyStack() * 3.清空棧 clearSt

【資料結構順序儲存結構 C語言實現

棧(stack),是一種線性儲存結構,它有以下幾個特點: 棧中資料是按照"後進先出(LIFO, Last In First Out)"方式進出棧的。 向棧中新增/刪除資料時,只能從棧頂進行操作。 基本操作 initStack(&S) destroySt

順序儲存結構與基本運算

// // main.cpp // 棧的基本運算 // // Created by 柯木超 on 2018/12/3. // Copyright © 2018年 柯木超. All rights reserved. // #include <iostream> #define m

Java中實現(1)-使用順序儲存結構(陣列)以及實現

棧和佇列其實是與普通的線性發展而來的,為普通的線性表增加一些特殊的限制就可以得到棧和隊列了。從功能上看,棧和佇列比普通的線性表功能相對弱一點,但是在特殊的場合下,使用棧和佇列更有利,例如,編譯器在實現函式的呼叫的時候需要使用棧來儲存斷點,實現遞迴演算法時候也需要用棧來儲存。

順序儲存結構 -- C++使用類模板實現

棧 棧是先進後出的線性表。即限定只能在表的一段進行插入和刪除操作的線性表。 棧結構在計算機中有廣泛的應用。常見的軟體的”撤銷”和”恢復”功能就是用棧實現的。 棧的順序儲存結構示例程式碼 template<typename T> cla

順序儲存結構實現

棧和佇列: 前面已經介紹完了線性表的順序和鏈式兩中實現,但如果再對線性表增加一些額外的限制和約束,例如,去除普通線性表中通過索引訪問資料元素的功能,去除普通線性表中查詢某個元素在表中的位置的功能。去除普通線性表中可以在任意位置隨意增加、刪除元素的功能,而是改為只允許線上性表

順序儲存結構C語言

棧是一種先入後出的資料結構,應用也非常廣泛,例如在電腦中檔案管理裡,點選進入多層檔案裡,然後點返回鍵,又能回到原處。雙擊進入相當於入棧,返回相當於出棧,返回時只能返回到當前級的上一級。 棧的儲存結構與連結串列一樣,有順序儲存結構和鏈式儲存結構,先來談一談順序儲

鏈式儲存結構順序儲存結構的區別

演算法設計的要求 時間效率高 儲存量低 順序儲存結構和鏈式儲存結構的區別 連結串列儲存結構的記憶體地址不一定是連續的,但順序儲存結構的記憶體地址一定是連續的; 鏈式儲存適用於在較頻繁地插入、刪除、更新元素時,而順序儲存結構適用於頻繁查詢時使用。 順序儲

佇列的順序儲存結構鏈式儲存結構

佇列(queue)是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表(在隊尾進行插入操作,在對頭進行刪除操作)。 與棧相反,佇列是一種先進先出(First In First Out, FIFO

線性表包括順序儲存結構鏈式儲存結構

還記得資料結構這個經典的分類圖吧: 今天主要關注一下線性表。 什麼是線性表 線性表的劃分是從資料的邏輯結構上進行的。線性指的是在資料的邏輯結構上是線性的。即在資料元素的非空有限集中 (1) 存在唯一的一個被稱作“第一個”的資料元素,(2) 存在唯一的一個被稱

【資料結構演算法】8 線性表:線性表的順序儲存結構

線性表的順序儲存結構 線性表有兩種物理儲存結構: 順序儲存結構 和 鏈式儲存結構。 物理上的儲存方式事實上就是在記憶體中找個初始地址,然後通過佔位的形式,把一定的記憶體空間給佔了,然後把相同資料型別的資料元素依次放在這塊空地中。 順序儲存結構:指的是用一段地址連續的儲