線性表之陣列實現棧結構

2022-09-03 09:18:09 字數 1922 閱讀 9698

棧結構的陣列實現是用乙個一維陣列存放資料,資料每次從隊尾加入,刪除時也從隊尾刪除,要實現這種增刪操作需要使用乙個記錄下標的指標(top)來指向棧頂。當新增元素時新增到 arr[top+1]位置,當要做刪除操作時 使top–;指向倒數第二個元素,使其稱為新棧頂。舊棧頂則被忽略,當其所佔空間要使用時直接覆蓋即可。

棧是一種很常用的結構,比如函式呼叫就使用棧結構,當程式執行到函式調語句時先把當前函式儲存在棧中,即壓棧。然後進入函式呼叫執行。當再次碰到函式呼叫語句時則重複上述步驟。當乙個函式呼叫a執行完後,再把呼叫a的函式從棧中取出,繼續執行這條函式。如此重複,直到main函式執行結束。下面是遞迴演示

void recursiondemo(array *arr,int count)

push(arr,count);

printf(" %d 元素進棧\n",count);

//呼叫自身

recursiondemo(arr,++count);

//列印後 出棧

printf(" %d 元素出棧\n",*gettop(arr));

pop(arr);

列印結果

1 元素進棧

2 元素進棧

3 元素進棧

4 元素進棧

5 元素進棧

5 元素出棧

4 元素出棧

3 元素出棧

2 元素出棧

1 元素出棧

請按任意鍵繼續. . .

遞迴常用於分治法解決問題,每一次遞迴都使問題規模更小,直到問題規模最小(不可拆分)時結束遞迴。

#define size 6 

//定義棧結構

typedef

struct

arrayarray;

//初始化

array *newarr()

//判棧空

int isempty(array *arr)

//出棧

void pop(array *arr)

arr->top--;

}//返回棧頂元素的指標

int *gettop(array *arr)

//入棧

void push(array *arr,int value)

}//test

void astest()

//現在是空棧了

printf("\n遞迴演示\n");

//棧的遞迴演示

recursiondemo(arr,1);

}void recursiondemo(array *arr,int count)

push(arr,count);

printf(" %d 元素進棧\n",count);

//呼叫自身

recursiondemo(arr,++count);

//列印後 出棧

printf(" %d 元素出棧\n",*gettop(arr));

pop(arr);}/*

執行結果:

value = 5 top = 5

value = 4 top = 4

value = 3 top = 3

value = 2 top = 2

value = 1 top = 1

遞迴演示

1 元素進棧

2 元素進棧

3 元素進棧

4 元素進棧

5 元素進棧

5 元素出棧

4 元素出棧

3 元素出棧

2 元素出棧

1 元素出棧

請按任意鍵繼續. . .

*/

線性表之陣列實現

因為線性表的順序儲存結構是一種隨機訪問的儲存結構,同時線性表的長度可變,且所需最大儲存空間隨問題不同而不同,則在c語言中,用動態分配的一維陣列來實現。下面是線性表的動態分配順序儲存結構 typedef struct sqlist 該程式採用選單和結構體陣列,這樣方便測試每個功能的實現。同時將類c 轉...

線性表之棧

一種只能在一端進行插入或刪除操作的線性表被稱為棧,其中允許刪除或插入的一端為棧頂,另一端為棧底,棧底固定不變 棧的特點 先進後出,例如彈夾,先裝的子彈最後才能出 按照儲存結構可以分為兩種棧 順序棧的結構體定義 typedef struct sqstack 鏈棧結構體定義 typedef struct...

資料結構棧 線性表實現

棧的定義 棧是一種特殊的表這種表只在表頭進行插入和刪除操作。因此,表頭對於棧來說具有特殊的意義,稱為棧頂。相應地,表尾稱為棧底。不含任何元素的棧稱為空棧。而本次給大家介紹用線性表實現的棧。如圖 這裡介紹雙向鍊錶的常用操作 l 建立棧 l 銷毀棧 l 清空棧 l 壓棧 l 出棧 l 返回棧頂元素 l ...