資料結構之棧

2021-08-04 02:03:09 字數 1779 閱讀 8036

一、棧的定義

二、棧的特性

由於棧只允許在棧頂(top)操作,故棧的特性為後進先出(last in first out)。如下圖所示:

(注:此圖引用自狄泰軟體學院唐老師ppt)

三、棧的操作

四、棧的實現

1.棧的抽象實現:

stack.h

#ifndef stack_h

#define stack_h

namespace stack ;

}#endif // stack_h

2.靜態棧的實現:設計要點:1.使用原生陣列作為棧的儲存空間;

2.棧的儲存空間在建立棧的時候指定(由模板引數指定),且不能動態的改變。

下面給出靜態棧的具體實現:

staticstack.h

#ifndef staticstack_h

#define staticstack_h

#include "stack.h"

#include "exception.h"

namespace stack

int capacity() const

void push(const t& e)

else

}void pop()

else

}t top()

else

}void clear()

int size() const

};}#endif // staticstack_h

3.鏈式棧的實現由於靜態棧一次性建立指定大小的空間,如果棧的資料元素為類型別的話,就需要呼叫n次建構函式,故效率會比較低;另靜態棧沒法動態的改變棧的大小。

基於以上兩點,鏈式棧便可以解決上述兩個問題。

設計要點:

1.用類模板實現,是抽象父類stack的直接子類;

2.內部實現乙個單鏈表;

3.只在單鏈表成員物件的頭部進行操作。

下面給出鏈式棧的具體實現:

linkstack.h

#ifndef linkstack_h

#define linkstack_h

#include "stack.h"

namespace stack ;

// 為了防止泛指型別t在建構函式中丟擲異常,導致棧初始化失敗,故重新實現頭結構

struct m_header;

int m_length;

public:

linkstack()

void push(const t& e)

else

m_length ++;

} else

}void pop()

else

}t top()

else

}void clear()

}int size() const

};}#endif // linkstack_h

資料結構之棧結構

棧結構是一種filo first in last out 的批量資料儲存結構。其特點是先進後出,後來者居上 棧的基本屬性 棧記憶體 棧頂標記 棧的當前元素個數 萬金油屬性 size 棧的基本操作 萬金油的的操作 根據實現的不同將棧結構分為兩種 1.鏈式棧 2.陣列 利用有表頭鍊錶的頭插法來完成棧的功...

資料結構之棧

4.8.2 四則運算表示式求值 程式如下所示 include include include 定義結點型別 typedef struct node node,pnode 定義棧的抽象資料型別 typedef struct stack stack,pstack 函式宣告 對棧進行初始化的函式 void...

資料結構之棧

資料結構之棧 本文討論棧的陣列實現。棧需要有如下幾個屬性 棧的容量 capacity 棧頂指標 儲存棧元素的陣列 根據這幾個屬性可以定義乙個棧結構體 struct stackrecord 然後定義棧的操作,一般可以包含如下幾個 棧的建立 stack createstack int size 棧的銷毀...