棧的定義:棧是一種特殊的表這種表只在表頭進行插入和刪除操作。因此,表頭對於棧來說具有特殊的意義,稱為棧頂。相應地,表尾稱為棧底。不含任何元素的棧稱為空棧。
而本次給大家介紹用線性表實現的棧。
如圖**總分為三個檔案:這裡介紹雙向鍊錶的常用操作:
l 建立棧
l 銷毀棧
l 清空棧
l 壓棧
l 出棧
l 返回棧頂元素
l 返回棧的大小
l 返回棧的最大長度
seqstack.h : 放置功能函式的宣告,以及表的宣告整體結構圖為:seqstack.c : 放置功能函式的定義
main.c : 主函式,使用功能函式完成各種需求,一般用作測試
這裡詳細說下壓棧操作,出棧操作和返回棧頂元素操作:
壓棧操作:如果(表頭用作棧底,表尾用作棧頂)時,每次操作都在表尾部操作,不會移動元素,如果(表頭用作棧頂,表尾用作棧底)時,每次操作都會移動表元素,所以第一種方案較合適。如圖:
出棧操作:
如圖:
返回棧頂元素:
如圖:
ok! 上**:
seqstack.h :[cpp]view plain
copy
#ifndef _seqstack_h_
#define _seqstack_h_
typedef
void
seqstack;
seqstack* seqstack_create(int
capacity);
void
seqstack_destroy(seqstack* stack);
void
seqstack_clear(seqstack* stack);
intseqstack_push(seqstack* stack,
void
* item);
void
* seqstack_pop(seqstack* stack);
void
* seqstack_top(seqstack* stack);
intseqstack_size(seqstack* stack);
intseqstack_capacity(seqstack* stack);
#endif
seqstack.c :
[cpp]view plain
copy
#include "seqlist.h"
#include "seqstack.h"
seqstack* seqstack_create(int
capacity)
void
seqstack_destroy(seqstack* stack)
void
seqstack_clear(seqstack* stack)
intseqstack_push(seqstack* stack,
void
* item)
void
* seqstack_pop(seqstack* stack)
void
* seqstack_top(seqstack* stack)
intseqstack_size(seqstack* stack)
intseqstack_capacity(seqstack* stack)
main.c :
[cpp]view plain
copy
#include
#include
#include "seqstack.h"
intmain(
void
)
printf("top: %d\n"
, *(
int*)seqstack_top(stack));
printf("capacity: %d\n"
, seqstack_capacity(stack));
printf("length: %d\n"
, seqstack_size(stack));
while
(seqstack_size(stack) > 0)
printf("\n"
);
seqstack_destroy(stack);
return
0;
}
考研資料結構 線性表 棧
1.棧是一種線性表,主要特點就是只允許在一端進行插入或刪除操作的線性表。2.棧頂 top 線性表允許進行插入和刪除的一端 棧底 bottom 是固定的,不允許進行插入和刪除的一端 採用順序儲存的棧被稱為 順序棧 通常順序儲存結構由乙個 一維陣列 和乙個記錄 棧頂 元素位置的變數組成。1.結構定義 d...
資料結構 線性結構(線性表 棧與佇列)
線性表的抽象定義集合a和集合b的並集操作線性表的順序儲存的結構 位址計算獲得元素操作 getelem插入操作 listinsert刪除操作 lisedelete優缺點比較。線性表的單鏈表儲存結構 linklistgetelemlistinsertlistdeletecreatelisthead 頭插...
資料結構 特殊的線性表 棧
棧是一種特殊的線性表,只允許在一段插入和刪除,所以一般畫圖總把棧化成乙個杯子,在杯口進入元素,在杯口移出元素。故有三個概念 因為線性表可以用順序儲存結構和鏈式儲存結構表示,因此棧也可以。define false 0 define true 1 define stack size 50 define ...