向量 鍊錶 棧和佇列

2021-09-01 05:00:32 字數 4275 閱讀 7129

三、不足之處

自學資料結構和演算法到現在時間也不短了,一直猶豫著要不要寫一寫向量等幾個最最基本的資料結構,因為總覺得是最基本的,太容易了,不想花這個時間去寫。然而學著學著慢慢發現,雖然這個很基本,但我並不一定能夠做好(尤其是以前的我)。實際上我幾次因為需要寫過簡單的結構,但是沒有專門寫過,而且體驗也不是很好。最近在學圖演算法,裡面涉及到一些更複雜的演算法和結構,又時需要用上這幾個基本資料結構作為輔助,於是我覺得,不如自己這次認真的寫一下,作為模板放在電腦裡,以後需要用向量什麼的就用自己寫的,這樣可以幫助自己更好的理解資料結構。於是就有了現在的成果。

我覺得事情雖然簡單,但是我還是很有收穫的,因為以前是看上去簡單,但是沒有真正去做這件事,而現在我真正做了,完成了基本的工作,但是有的難點還是沒有克服,比如遍歷問題。這說明之前的認識有很大的錯誤,沒有親力親為就以為自己懂了,那是無知的表現。從某種意義上講,不斷學習的目的之一就是為了克服這種無知,並且做到真正掌握知識和技術。講這些基本的完成了,心裡更有底了,以後在學習更難的內容的時候,我會更加清楚的知道自己以前做過什麼工作,在使用資料結構的時候,也會有更好的掌控。

#ifndef vector__h__

#define vector__h__

#include

template

<

typename t>

class

vector

void

print()

void

print

(int st,

int end)

;int

getsize()

t operator

(int id)

void

reverse()

;void

insert

(t e)

;void

insert

(int id, t e)

; t del

(int id)

; t del()

};template

<

typename t> vector

::vector()

template

<

typename t> vector

::vector

(t e)

template

<

typename t> vector

::vector

(t *arr,

int len)

template

<

typename t>

void vector

::insert

(t e)

template

<

typename t>

void vector

::insert

(int id, t e)

template

<

typename t> t vector

::del

(int id)

template

<

typename t>

void vector

::print

(int st,

int end)

template

<

typename t>

void vector

::check_overflow()

}template

<

typename t>

void vector

::check_underflow()

}template

<

typename t>

void vector

::reverse()

}#endif

#ifndef list__h__

#define list__h__

#include

template

<

typename t>

struct node

;template

<

typename t>

class

list

list

(t e)

list

(t * a,

int len)

; node

*first()

bool

isempty()

void

insertaslast

(t e)

;void

insertasfirst

(t e)

;void

insert

(t e)

t del()

t dellast()

; t delfirst()

;};template

<

typename t>

void list

::init()

template

<

typename t> list

::list

(t * a,

int len)

template

<

typename t>

void list

::insertasfirst

(t e)

template

<

typename t>

void list

::insertaslast

(t e)

template

<

typename t> t list

::delfirst()

else

printf

("error! empty! cannot delete!");

}template

<

typename t> t list

::dellast()

#endif

自己在寫的時候,由於對c++繼承機制掌握不夠熟練,陷入編譯錯誤很久,主要在派生類的構造上。派生類的構造需要用初始化列表的方式給出基類的構造。

#ifndef stack__h__

#define stack__h__

#include

"vector.h"

template

<

typename t>

class

stack

:public vector

stack

(t e)

: vector

(e)stack

(t *a,

int len)

: vector

(a, len)

void

push

(t e)

t pop()

t top()

};#endif

#ifndef queue__h__

#define queue__h__

#include

"list.h"

template

<

typename t>

class

queue

:public list

queue

(t e)

: list

(e)queue

(t *a,

int len)

: list

(a, len)

void

enqueue

(t const

& e)

t dequeue()

};#endif

這幾個資料結構實現了基本的功能,但是api不算豐富,也許不能完全滿足需求。由於我現在使用資料結構解決問題的經驗很少,對哪些方法比較常用和重要沒有直觀的和深刻的理解,所以我想以後經驗積累了、懂得了需求之後再來不斷豐富自己的資料結構庫,現在先到這裡。

有的需求我是切身體會到了的,比如對鍊錶實現遍歷的功能,奈何自己能力不夠,對c++的語法功能了解不夠,儘管做了嘗試但是還是沒有成功。這個就需要以後自己越來越厲害、積累了知識之後再進行完善了。

諸如鍊錶沒有析構函式此類的不周到的地方,模板中到底有多少我也不知道。現在只把這些問題記錄下來,等以後學了更多東西再來完善吧!

模板中的bug和**綴餘之處,都留給未來的自己好了。略略略。

鍊錶,棧和佇列

1.建立鍊錶 package com.zzw.鍊錶 非常基本的單項鍊表 author john public class node 新增乙個結點 node end new node d node n this while n.next null n.next end 刪除單向鍊錶中的結點 node ...

棧 佇列 鍊錶

includestruct queue int main while q.head includeint main maxvalue temp maxvalue temp maxvalue temp 0 for int j 1 j len j maxvalue temp maxvalue temp ...

鍊錶 佇列和棧的區別

鍊錶 佇列和棧的區別 鍊錶,佇列和棧都是資料結構的一種。sartaj sahni 在他的 資料結構 演算法與應用 一書中稱 資料結構是資料物件,以及存在於該物件的例項和組成例項的資料元素之間的各種聯絡。這些聯絡可以通過定義相關的函式來給出。他將資料物件 data object 定義為 乙個資料物件是...