在C語言中,可以使用數組或鏈表來實現棧的定義。
使用數組實現棧: 首先,需要定義一個數組和一個變量作為棧頂指針。棧頂指針指向棧中最新添加的元素。
#define MAX_SIZE 100 // 棧的最大容量
int stack[MAX_SIZE]; // 定義一個數組作為棧
int top = -1; // 棧頂指針初始化為-1
// 入棧操作
void push(int element) {
if (top >= MAX_SIZE - 1) {
printf("Stack Overflow\n");
return;
}
stack[++top] = element;
}
// 出棧操作
int pop() {
if (top == -1) {
printf("Stack Underflow\n");
return -1;
}
return stack[top--];
}
// 獲取棧頂元素
int peek() {
if (top == -1) {
printf("Stack is empty\n");
return -1;
}
return stack[top];
}
// 判斷棧是否為空
int isEmpty() {
return (top == -1);
}
// 判斷棧是否已滿
int isFull() {
return (top == MAX_SIZE - 1);
}
使用鏈表實現棧: 定義一個結構體作為鏈表節點,其中包含一個數據域和一個指向下一個節點的指針。
typedef struct StackNode {
int data; // 數據域
struct StackNode* next; // 下一個節點的指針
} StackNode;
StackNode* top = NULL; // 棧頂指針初始化為空
// 入棧操作
void push(int element) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode)); // 創建新節點
newNode->data = element; // 設置新節點的數據域
newNode->next = top; // 將新節點的指針指向當前棧頂節點
top = newNode; // 更新棧頂指針
}
// 出棧操作
int pop() {
if (top == NULL) {
printf("Stack Underflow\n");
return -1;
}
int element = top->data; // 獲取棧頂節點的數據域
StackNode* temp = top; // 保存當前棧頂節點的指針
top = top->next; // 更新棧頂指針
free(temp); // 釋放原棧頂節點的內存
return element;
}
// 獲取棧頂元素
int peek() {
if (top == NULL) {
printf("Stack is empty\n");
return -1;
}
return top->data;
}
// 判斷棧是否為空
int isEmpty() {
return (top == NULL);
}
以上是兩種常見的實現棧的方法,具體選擇哪一種取決于應用的需求和個人偏好。