栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
}Node;
//初始化栈
Node* initStack() {
Node* S = (Node*)malloc(sizeof(Node));
S->data = 0;
S->next = NULL;
return S;
}
//判断栈空
int isEmpty(Node* S) {
if (S->data == 0 || S->next == NULL) {
return 1;
}
else {
return 0;
}
}
//读栈顶元素
int getTop(Node* S) {
if (isEmpty(S)) {
return -1;
}
else {
return S->next->data;
}
}
//入栈
void push(Node* S, int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = S->next;
S->next = node;
S->data++;
}
//出栈
int pop(Node* S) {
if (isEmpty(S)) {
return -1;
}
else {
Node* node = S->next;
int data = node->data;
S->next = node->next;
free(node);
return data;
}
}
//遍历
void printStack(Node* S) {
Node* node = S->next;
while (node)
{
printf("%d->", node->data);
node = node->next;
}
printf("NULL\n");
}
int main() {
Node* S = initStack();
push(S, 1);
push(S, 2);
push(S, 3);
push(S, 4);
printStack(S);
int i = pop(S);
printf("current elem=%d\n", i);
printStack(S);
return 0;
}