C 實現資料結構 順序棧和鏈棧

2021-10-08 22:55:30 字數 3778 閱讀 9159

2023年8月8日 週六 天氣晴 【不悲嘆過去,不荒廢現在,不懼怕未來】

用c++實現了簡單的順序棧和鏈棧類,成員函式實現了棧的基礎功能:isempty(),push(),pop(),top(),並且用實現的棧解決了兩個問題:進製轉換和判斷表示式是否有效,**是用vs2019實現的,每個函式的功能都新增了一定注釋,由於用了模板,函式的宣告和定義都放在了.**件中,完整工程放在了我的github上,有需要的也可以自取。

/**

* @license gnu general public license (gpl)

* @author march

* @email [email protected]

* @file main.cpp

* @brief 順序棧和鏈棧的c++實現主檔案

* @version 1.0

* @date 2020-07-31

*/#include

"stdafx.h"

#include

"solution.h"

intmain()

// // 利用順序棧或鏈棧判斷乙個表示式是否有效(即:三種括號是否匹配),輸入檔案為「2.in」

// string s = "";

// int cnt = 0;

// while (getline(cin, s))

return0;

}

#pragma once

#include

"stdafx.h"

/** * @brief 建立乙個順序棧類

*/template

<

typename elemtype>

class

sqstack

;// 建構函式,初始化基位址和棧頂索引

template

<

typename elemtype>

sqstack

::sqstack()

:top_(-

1)}// 建構函式,銷毀順序棧

template

<

typename elemtype>

sqstack::~

sqstack()

// 判斷順序棧是否為空

template

<

typename elemtype>

bool sqstack

::isempty()

// 判斷順序棧是否已滿

template

<

typename elemtype>

bool sqstack

::isfull()

// 向順序棧壓入乙個元素

template

<

typename elemtype>

bool sqstack

::push

(elemtype val)

else

}// 刪除順序棧頂端的元素

template

<

typename elemtype>

bool sqstack

::pop()

else

}// 返回順序棧頂端的元素但不刪除

template

<

typename elemtype>

elemtype sqstack

::top()

else

return elem_[top_]

;}

linkstack.**件:

#pragma once

#include

"stdafx.h"

/** * @brief 建立乙個鏈棧類

*/template

<

typename elemtype>

class

linkstack

;// 建構函式,初始化鏈棧的頭結點

template

<

typename elemtype>

linkstack

::linkstack()

// 析構函式,銷毀鏈棧

template

<

typename elemtype>

linkstack::~

linkstack()

}// 判斷鏈棧是否為空

template

<

typename elemtype>

bool linkstack

::isempty()

// 向鏈棧壓入乙個元素

template

<

typename elemtype>

bool linkstack

::push

(elemtype val)

else

return

true;}

// 刪除鏈棧頂端的元素

template

<

typename elemtype>

bool linkstack

::pop()

return

true;}

// 返回鏈棧頂端的元素但不刪除

template

<

typename elemtype>

elemtype linkstack

::top()

else

return top_-

>val;

}

#pragma once

// stdafx.h : include file for standard system include files,

// or project specific include files that are used frequently, but

// are changed infrequently

//#if !defined(afx_stdafx_h__d36e9d40_3bcb_4a85_9d48_ac876e7a2942__included_)

#define afx_stdafx_h__d36e9d40_3bcb_4a85_9d48_ac876e7a2942__included_

#if _msc_ver > 1000

#pragma once

#endif

// _msc_ver > 1000

#include

// 萬能的標頭檔案,可能需要手動加入include資料夾中

const

int kmaxsize =

100000

;// 順序棧的最大長度

using

namespace std;

/** * @brief 定義鏈棧的結點

*/template

<

typename elemtype>

struct stacknode

stacknode

(elemtype x)

:val

(x),

next

(nullptr)}

;#endif

// !defined(afx_stdafx_h__d36e9d40_3bcb_4a85_9d48_ac876e7a2942__included_)

資料結構 棧 順序棧和鏈棧

順序棧 基於陣列的順序棧 include include include typedef enum status status typedef int elemtype typedef struct sqstack sqstack 函式宣告 基於陣列的順序棧 status initstack sqs...

資料結構 棧的實現(順序棧和鏈棧)

棧介面,描述棧的抽象資料型別,泛型引數t表示資料元素的資料型別 public inte ce sstack 棧有兩種基本的實現 順序棧,實現棧介面 public class seqstack implements sstack 預設構造,構造容量為64的空棧 public seqstack 判斷棧是...

C 實現順序棧和鏈棧

順序棧和鏈棧分別類似於順序表和單鏈表,只是由於棧的first in last out性質,其操作相對簡單,是順序表和單鏈表的子集。鏈棧中的鏈不使用head屬性,這一屬性是多餘的,使用鏈棧類的topnode屬性即可。另外,為了避免每次返回鏈棧的長度都要遍歷所有結點,在鏈棧類中增加num屬性,push操...