链栈是一种特殊的链表,其基本操作包括:
初始化:创建一个空的链栈。
判断是否为空:检查链栈中是否有元素。
入栈:在链栈的栈顶添加一个元素。
出栈:删除链栈的栈顶元素,并返回该元素的值。
获取栈顶元素:返回链栈的栈顶元素的值。
遍历链栈:从栈顶到栈底遍历链栈的所有元素,并将它们打印出来。
以下是链栈基本操作的代码实现:
typedef struct StackNode {
int data; // 存储元素的数据域
struct StackNode *next; // 指向下一个元素的指针
} StackNode, *LinkStackPtr;
typedef struct LinkStack {
LinkStackPtr top; // 栈顶指针
int count; // 栈的元素个数
} LinkStack;
// 初始化链栈
void initLinkStack(LinkStack *s) {
s->top = NULL;
s->count = 0;
}
// 判断链栈是否为空
int isEmpty(LinkStack *s) {
return s->top == NULL;
}
// 入栈
void push(LinkStack *s, int data) {
LinkStackPtr newNode = (LinkStackPtr)malloc(sizeof(StackNode));
newNode->data = data;
newNode->next = s->top;
s->top = newNode;
s->count++;
}
// 出栈
int pop(LinkStack *s) {
if (isEmpty(s)) {
printf("The stack is empty.\n");
return -1;
}
int data = s->top->data;
LinkStackPtr temp = s->top;
s->top = s->top->next;
free(temp);
s->count--;
return data;
}
// 获取栈顶元素
int getTop(LinkStack *s) {
if (isEmpty(s)) {
printf("The stack is empty.\n");
return -1;
}
return s->top->data;
}
// 遍历链栈
void traverse(LinkStack *s) {
if (isEmpty(s)) {
printf("The stack is empty.\n");
return;
}
printf("The elements in the stack are: ");
LinkStackPtr p = s->top;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}