链栈是一种特殊的链表,其基本操作包括:
-
初始化:创建一个空的链栈。
-
判断是否为空:检查链栈中是否有元素。
-
入栈:在链栈的栈顶添加一个元素。
-
出栈:删除链栈的栈顶元素,并返回该元素的值。
-
获取栈顶元素:返回链栈的栈顶元素的值。
-
遍历链栈:从栈顶到栈底遍历链栈的所有元素,并将它们打印出来。
以下是链栈基本操作的代码实现:
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");
}