棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
一、棧的陣列實現
棧的順序儲存結構通常由乙個一維陣列和乙個記錄棧頂元素位置的變數組成。
//堆疊的陣列實現
#include #include #define elementtype int //儲存資料元素的型別
#define maxsize 1024 //儲存資料元素的最大個數
#define error -99 //elementtype的特殊值,標誌錯誤
//堆疊的順序儲存結構通常由乙個一維陣列和乙個記錄棧頂元素位置的變數組成
typedef struct stack;
//初始化棧
stack* initstack()
stack->top = -1;
return stack;
}int isfull(stack* stack)
return 0;
}int isempty(stack* stack)
return 0;
}//入棧
void push(stack* stack, elementtype item)
stack->data[++stack->top] = item;
}//出棧
elementtype pop(stack* stack)
return stack->data[stack->top--];
}void printstack(stack* stack)
}int main(int argc, const char * argv)
二、棧的鍊錶實現
棧的鏈式儲存結構實際上就是乙個單鏈表,叫做鏈棧,插入和刪除操作只能在鏈棧的棧頂進行。那棧頂指標
top應該在鍊錶的哪一頭?我們要做插入刪除操作,很顯然在鏈頭是方便操作的。
#include #include #define elementtype int
#define error -99
typedef struct node linkstack;
//初始化堆疊
linkstack* initlinkstack()
s->next = null;
return s;
}int isempty(linkstack* s)
void push(linkstack* s, elementtype data)
cell->data = data;
cell->next = s->next;
s->next = cell;
}elementtype pop(linkstack* s)
firstcell = s->next;
s->next = firstcell->next;
topdata = firstcell->data;
free(firstcell);
return topdata;
}void printlinkstack(linkstack* s)
}int main(int argc, const char * argv)
C語言實現棧
下面程式分別實現了棧的順序儲存結構和棧的鏈式儲存結構的壓棧和彈棧操作,均在dev c 下執行通過。棧的順序儲存結構 include include include include include define ok 1 define error 0 define maxsize 10 typedef...
C語言實現棧
一 實現 vim stack c.c include stdio.h include stdlib.h 棧元素結構體 用來描述每個棧元素 struct list 棧結構體 棧頂元素指標,棧大小資訊 struct stack 棧初始化 struct stack stackinit void 入棧函式 ...
C語言實現棧
1.概念 棧是一種線性的資料結構,採用先進後出的方式管理資料,一端的位置固定 棧底 另外一端隨著資料的進出隨時改變 棧頂 2.實現思路 棧是一種邏輯概念,可以使用順序結構來實現 順序棧 也可以使用鏈式結構來實現 鏈式棧 鏈式棧可以使用單鏈表來實現,以頭結點作為棧頂,從頭部插入作為入棧,從頭部刪除作為...