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...