数据结构——堆栈
數據結構——堆棧
?
宗旨:技術的學習是有限的,分享的精神是無限的。
?
1、特性:先進后出(FILO)
?
2、應用:
?????? 子程序的調用
?????? 處理遞歸調用
?????? 表達式轉換與求值
?????? 二叉樹的遍歷
?????? 圖形的深度優化優先
?
3、用數組仿真堆棧
(1)堆棧數組結構
char stack[MAX_SIZE]; //堆棧的最大容量
int top = -1; //-1表示堆棧為空,隨著堆棧中數據量的變動改變指向頂端的位置
(2)數據的存取
?數據輸入堆?!緋ush】:棧頂指針top+1;若top小于MAX_SIZE,則數據存入top所指的數組元素中,否則堆棧已滿,無法存入數據。 ? ? ? ??
void push(int value) {if(top >= MAX_SIZE) //堆棧已滿{printf("stackis full!\n");}else{top++;//堆棧指針+1stack[top] = value; //將數據壓入棧中} }數據輸出堆棧【pop】:若堆棧指針索引大于0(堆棧未空),則取出目前棧頂指針top所指數組內容;top-1指向下一個堆棧元素。???
int pop(void) {int temp;//暫存從堆棧中取出的數據int i;if(top < 0) // 堆棧為空,退出{printf("stackis empty!\n");return -1;}temp = stack[top]; //將數據pop出棧top--;return temp; }4、用鏈表仿真堆棧
(1)堆棧鏈表結構
typedef struct node {int data;struct node *next; } list, *link; link stack = NULL; //向鏈表頂端的(2)數據的存取
?數據輸入堆棧【push】:建立一個新節點;將新節點的指針指向原來堆棧指針所指的節點;將原來的節點指向新節點。
void push(int value) {link new;new = (link)malloc(sizeof(list));new-> data = value;new-> next = stack;stack = new; }? 數據輸出堆?!緋op】:先保留棧頭指針stack所指的位置;將堆棧指向下一個節點;取出原堆棧頂端指針所指的節點內容;釋放原堆棧頂端指針所指的節點內存。
int pop(void) {link pop;int temp;if(stack != NULL){pop = stack;stack = stack -> next;temp = pop -> data;free(pop);return temp;}return -1; }? ? ??
總結
- 上一篇: 第2章-系统控制原理 -> 李雅普诺夫稳
- 下一篇: lacp协议