資料結構與演算法 棧模型(原始碼)!

2021-09-05 20:11:11 字數 2518 閱讀 8457

這篇是繼線性表,鍊錶,哈夫曼樹後的第四篇,資料結構複習性隨筆。

本篇將帶您重溫棧模型的魅力。棧簡單說就是「後進先出」。

本篇給出兩了完美執行的程式,分別是:棧結構和鏈棧結構。偶覺得熟練運用這兩了程式棧基本也就掌握了。

下面是原始碼:

#include

<

iostream

>

#define

max 1024

#define

datatype int

using

namespace

std;

//棧結構

typedef 

struct

seqstack, *s;

//棧的初始化 

seqstack 

*init_seqstack()

else}//

判別棧空

intempty_seqstack(seqstack *s)

//入棧

intpush_seqstack(seqstack 

*s,datatype x)}//

查詢棧中是否存在元素值

intcheck_seqstack(seqstack 

*s,datatype x)

return0;

}} //頭元素出棧

intpop_seqstack(seqstack *s)

}//讀取棧內資訊 

void

read_seqstack(seqstack *s)

}}//借助另乙個棧實現刪除站內任意元素

intdelete_seqstack(seqstack 

*s,datatype x)

else

break;}

}return1;

}}else}//

取棧頂元素

datatype top_seqstack(seqstack 

*s)        

intmain()

else

}read_seqstack(s); 

cout

<<

"元素出棧(如果操作完畢請輸入'00')

"<<

endl;

over

=true

;while

(over)

else

}read_seqstack(s);

return0;

} 下面是鏈棧原始碼:是借助頭結點操作的。說起來也挺鬱悶的,這個程式的刪除鏈棧任意元素的演算法,我寫了好久,

看來指標的使用還是很生啊。我嘗試了很多方法,但是指標總是亂指,出一些莫名其妙的數,真是讓我鬱悶了好久。

不過總算是讓我除錯好了,其實開著也挺簡單的,但是就是寫起來總出錯。看來**是靠寫的,不是靠看的。

#include

<

iostream

>

#define

datatype int

using

namespace

std;

//鏈棧結構 

typedef 

struct

nodestacknode,

*linkstack;

linkstack top;

//置空棧

linkstack init_linkstack() 

//判別棧空

intempty_linkstack(linkstack top)

//鏈棧入棧

linkstack push_linkstack(linkstack top,datatype x)

//頭元素出棧

linkstack pop_linkstack(linkstack top)}//

查詢數值是否尋在

intcheck_linkstack(linkstack top,datatype x)

return0;

}} //輸出鏈棧

void

read_linkstack(linkstack top)}} 

//借助乙個鏈棧實現刪除棧內任意元素

linkstack delete_linkstack(linkstack top,datatype x)

else

break;}

}return

top;}}

else

}  //

主函式 

intmain()

else

}read_linkstack(top);

cout

<<

"----出棧操作(如果操作完畢請輸入'00')----

"<<

endl;

over

=true

;while

(over)

else

over

=false;}

read_linkstack(top);

return0;

} 以上兩個程式都完美執行,而且用的c++標準寫法。

資料結構原始碼(二)棧ADT

棧adt結構是lifo last input first output,後進先出 使用鍊錶的形式即限制了鍊錶的 入棧和出棧 訪問只能在尾結點進行。include using namespace std typedef int elementtype struct node typedef struc...

資料結構與演算法 鍊錶(原始碼)!

今天抽了點時間,複習了一下鍊錶,總結了建立,刪除,插入,查詢的操作方法。原始碼如下 include iostream using namespace std typedef struct lnode lnode,llist 方法宣告 lnode creat head 建立乙個空表 void crea...

演算法與資料結構 (八) HashMap原始碼

static class nodeimplements map.entry if e.hash hash k e.key key key null key.equals k break p e 以下 好像是為了linkedhashmap服務的 v oldvalue e.value if onlyif...