資料結構 堆疊 C語言

2021-10-06 04:31:04 字數 1882 閱讀 9448

1.基本概念

定義:限定只能在固定一端進行插入和刪除操作的線性表。特點:後進先出。

允許進行插入和刪除操作的一端稱為棧頂,另一端稱為棧底。

作用:可以完成從輸入資料序列到某些輸出資料序列的轉換

(1)順序堆疊

順序堆疊:順序儲存結構的堆疊。

順序棧的儲存結構:利用一組位址連續的儲存單元依次存放自棧底到棧頂的資料元素.

操作實現:

//定義

typedef

struct

seqstack;

//初始化stackinitiate(s)

void

stackinitiate

(seqstack *s)

//非空否stacknotempty(s)

intstacknotempty

(seqstack s)

//入棧stackpush(s, x)

intstackpush

(seqstack *s, datatype x)

else

}//出棧stackpop(s, d)

intstackpop

(seqstack *s, datatype *d)

else

}//取棧頂資料元素stacktop(seqstack s, datatype *d)

intstacktop

(seqstack s, datatype *d)

else

}

(2).鏈式堆疊

鏈式堆疊:鏈式儲存結構的堆疊。

鏈式棧的儲存結構:它是以頭指標為棧頂,在頭指標處插入或刪除,帶頭結點的鏈式堆疊結構.

//定義

typedef

struct snode

lsnode;

//初始化stackinitiate(head)

void

stackinitiate

(lsnode *

*head)

//非空否stacknotempty(head)

intstacknotempty

(lsnode *head)

//入棧stackpush(head, x)

intstackpush

(lsnode *head, datatype x)

//出棧stackpop(head, *d)

intstackpop

(lsnode *head, datatype *d)

head->next = p->next;

*d = p->data;

free

(p);

return1;

}//取棧頂資料元素stacktop(head, d)

intstacktop

(lsnode *head, datatype *d)

*d = p->data;

return1;

}//撤消動態申請空間destroy(*head)

void

destroy

(lsnode *head)

}

說明:

鏈棧的入棧、出棧操作就是棧頂的插入與刪除操作,修改指標即可完成。

2)一般不會出現棧滿情況;除非沒有空間導致malloc分配失敗。

3)採用鏈棧儲存方式的優點是,當棧中元素個數變化較大,準確數字難以確定時,鏈棧較順序堆疊方便。

C語言堆疊入門 與資料結構堆疊區別

在計算機領域,堆疊是乙個不容忽視的概念,我們編寫的c語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看帖遇到...

C 資料結構篇(堆疊

菸快沒有了,別人都說煙有害,但對與我可是必不可少的,呵呵。抽一根煙程式就寫出來了,好了,再加把勁,我們再完成堆疊,其實堆疊和線性表沒什麼大的區別,堆疊其實是一種特殊的線性表,使用push 壓輸入資料,pop 彈出資料,才用,先進後出的原則,就這麼簡單。前面已經寫好了list 類,在這裡我們可以呼叫它...

C語言資料結構拉練 佇列,堆疊

資料結構 結構定義 結構操作 include include include define color a,b 033 b m a 033 0m define green a color a,32 1 陣列,2 隊首,隊尾,3 佇列容量,4 佇列長度 typedef struct queue que...